Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Вниз

Help!   Найти похожие ветки 

 
Seldon   (2002-08-27 22:14) [0]

Такая проблема:
у меня есть панелька (TPanel), а на ней куча всяких копонентов. И есть CheckBox. Мне надо при установке флажка у всех копонетов на панельке установить Enabled в true, а при снятии флажка в false. Мне в лом писать для каждого компонента Enabled:=true (или false) и я написал такую вот штуку:

procedure SetControlsState(Enabled:Boolean);
var
a:Integer;
begin
for a:=0 to Form1.Panel1.ComponentCount-1 do
(Form1.Panel1.Components[a] as TControl).Enabled:=Enabled;
end;

Но этот код не работает. Form1.Panel1.ComponentCount всегда равно 0. Тогда я изменил код вот так:

procedure SetControlsState(Enabled:Boolean);
var
a:Integer;
begin
for a:=0 to Form1.ComponentCount-1 do
if (Form1.Components[a] as TControl).Owner=Form1.Panel1 then
(Form1.Components[a] as TControl).Enabled:=Enabled;
end;

Но этот код вообще вызывает исключение EInvalidCast. Как мне быть?


 
MsGuns   (2002-08-27 22:17) [1]

А почему всей панели не дать Enabled := false ?


 
Seldon   (2002-08-27 22:20) [2]


> MsGuns ©

В этом случае копоненты отключатся. Но их вид не поеняется на отключенный.


 
MsGuns   (2002-08-27 22:27) [3]

Не, ну тогда вперед ! В вышеприведенном цикле опрашивать координаты компонента и сравнивать их с координатами панели. Заборно ? Зато красяво !


 
Ученик   (2002-08-27 22:34) [4]

Пользуюсь этим:
type
TProtectedWinControl = class(TWinControl);

procedure EnableControls(Control : TWinControl; Enable : Boolean;
ChangeColor : Boolean = True);
const
Colors : array[Boolean] of TColor = (clBtnFace, clWindow);
var
i : Integer;
NewColor : TColor;
begin
if Control.Tag <> 99999 then begin
Control.Enabled := Enable;
if ChangeColor and (Control is TCustomEdit) or (Control is TCustomComboBox) or
(Control is TCustomListBox) then begin
if Enable then
NewColor := clWindow
else if Control.Parent <> nil then
NewColor := TProtectedWinControl(Control.Parent).Color
else
NewColor := clBtnFace;
TProtectedWinControl(Control).Color := NewColor
end
end;
with Control do
for i := 0 to ControlCount - 1 do
if Controls[i] is TWinControl then
EnableControls(TWinControl(Controls[i]), Enable, ChangeColor)
else if Control.Tag <> 99999 then
Controls[i].Enabled := Enable
end;


 
Seldon   (2002-08-27 22:35) [5]


> MsGuns ©

Вы имеете ввиду сравнивать экранные координаты панели и каждого копонента, и если компонент находится внутри панели то изменять его сотояние? Действительно заборно. Но если не будет других предложений, я попробую. Спасибо!


 
Seldon   (2002-08-27 22:38) [6]


> Ученик ©

И это тоже попробую. Спасибо!


 
aus   (2002-08-28 00:44) [7]

Я вот так сделал, и все работает:
procedure TForm1.SetControlsState(Enabled:Boolean);
var
a:Integer;
begin
with Panel1 do
for a:=0 to ControlCount-1 do
Controls[a].Enabled:=Enabled;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-26996
CrazyHackers
2002-08-29 15:43
2002.09.09
Поиск - Замена


1-27018
SergeyKnyazev
2002-08-29 12:03
2002.09.09
Как в RBuildere или другом отчете добавить линии под углом.


14-27201
V.exeR
2002-08-14 21:41
2002.09.09
Бета-тестинг


1-27070
Viacheslav
2002-08-28 12:50
2002.09.09
Помогите разобраться с компонентами


1-26993
AFROLOV
2002-08-29 16:14
2002.09.09
Как узнать как работают с приложением -





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский