Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Обход всех компонентов на форме   Найти похожие ветки 

 
dim-   (2006-06-07 09:09) [0]

Когда делаю следующее:
  For i:=0 to Child.ControlCount-1 do Begin
     if Child.Controls[i].ClassName="TDBEdit" Then
       Child.Controls[i].Enabled:=false;
     if Child.Controls[i].ClassName="TDBDateEdit" Then
       Child.Controls[i].Enabled:=false;
   End;

Обходит компоненты которые находяться на форме, а те которые находяться на панелях или тулбарах не попадают.
Как сделать чтобы попадали все?


 
Loginov Dmitry ©   (2006-06-07 09:17) [1]

Выполнить рекурсивный обход


 
Zeqfreed ©   (2006-06-07 09:27) [2]

type
 TEnumControlsCallback = procedure(Control : TControl) of object;

 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   Panel1: TPanel;
   CheckBox1: TCheckBox;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
 private
   procedure MyCallback(Control : TControl);
 public
   { Public declarations }
 end;

. . .

function EnumControls(Parent : TWinControl; Callback : TEnumControlsCallback) : Integer;
var
 i : Integer;
begin
 Result := 0;

 for i := 0 to Parent.ControlCount - 1 do begin
  if (Parent.Controls[i] is TWinControl) then
   Result := Result + EnumControls(Parent.Controls[i] as TWinControl, Callback);

   Callback(Parent.Controls[i]);
   Inc(Result);
 end;
end;

procedure TForm1.MyCallback(Control : TControl);
begin
Memo1.Lines.Add(Format("Class: %s; Name: %s", [Control.ClassName, Control.Name]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
ShowMessage(Format("%d control(s) found", [EnumControls(Form1, MyCallback)]));
end;


 
[email protected] ©   (2006-06-07 10:52) [3]

> For i:=0 to Child.ControlCount-1 do Begin
>if Child.Controls[i].ClassName="TDBEdit" Then
>Обходит компоненты которые находяться на форме

Обманывать нехорошо. Не компоненты, а элементы управления (контролы то бишь).


 
Игорь Шевченко ©   (2006-06-07 15:18) [4]

for I:=0 to Pred(ComponentCount) do
 if (Component[I].ClassName="TDBEdit") or (Component[I].ClassName = "TDBDateEdit") then
   TControl(Components[I]).Enabled := false;



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

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
3-1148184412
Аркадий
2006-05-21 08:06
2006.07.23
добавление поля в таблице


2-1152097275
XTD
2006-07-05 15:01
2006.07.23
каким способом можно управлять стандартными приложениями Windows


15-1150711268
Fireboy
2006-06-19 14:01
2006.07.23
Много вопросов на которые нужны ответы


2-1151929185
Id
2006-07-03 16:19
2006.07.23
Добавление полей в триггере


2-1151929083
Neket
2006-07-03 16:18
2006.07.23
Язык