Советы по Delphi

         

Циклический опрос компонентов


    procedure TForm1.FormCreate(Sender: TObject);
var
I : integer; begin
for I:= 0 to ComponentCount -1 do if (Components[I] IS TEdit) then (Components[I] AS TEdit).{Вашпараметр} := {ваше значение}; end;

Если вам необходимо идентифицировать конкретный набор edit-компонентов, поместите их на панели и сделайте примерно так:

    procedure TForm1.FormCreate(Sender: TObject);
var
I : integer; begin
with
MyPanel do for I:= 0 to ControlCount -1 do if (Controls[I] IS TEdit) then (Controls[I] AS TEdit).{Вашпараметр} := {Ваше значение}; end;

В контексте примера, Edit1, Edit2 и т.д. есть то же самое, что и Edit[1], Edit[2]. Если вы хотите иметь доступ к серии элементов управления как к элементам массива, поместите их в TList.

    MyArr := TList.Create;
MyArr.Add(Edit1);
MyArr.Add(Edit2);
...
For
i := 0 To MyArr.count - 1 Do (MyArr.items[i] As TEdit).Enabled := False;
MyArr.Free;

procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer; begin
for
I := 0 to ComponentCount -1 do if Components[I] is TEdit then TEdit(Components[I]).Whatever := 10; end;

Для получения доступа используйте:

    TButton(mylist.items[i]).property := sumpin;

или

    TButton(mylist.items[i]).method;

Это хорошее решение для пакетной обработки компонентов или для получения доступа при линейном способе. Для решения вашей проблемы есть еще более легкое решение, которое требует предварительной работы в режиме проектирования. Установите свойство tag и получите преимущество в том, что все компоненты являются производными от TComponent и имеют это свойство.

    Procedure TMyForm.MyButtonHandler(Sender: TObject);
Begin
Case
(Sender As TComponent).Tag Of 1 : { что-то делаем } 2 : { делаем что-то еще } . . End; End;

Просто укажите в событии OnClick на MyButtonHandler для тех кнопок, в которых вы хотите использовать общий обработчик события. [001497]



Содержание раздела