Страница 1 из 1

Можно ли поставить в цикл компоненты?

Добавлено: 16 сен 2005, 10:11
Dr_Grizzly
Всем привет! Проблема такая, у меня в проге 89 компонентов Edit, начиная с Edit1 и заканчивая Edit89 Мне вломы писать одну и туже процедуру каждому компоненту, т.е. Edit1.text:=''; Edit2.text:=''; и т.д., можно ли это в цикл какой-нить сунуть? Например Edit.text:='';

Добавлено: 16 сен 2005, 11:03
LAngel

Код: Выделить всё

procedure SendTextToAllEdits(Text: String);
var
  i: Integer;
begin
  For i := 0 to Form1.ComponentCount-1 do
  if Form1.Components[i] is TEdit then
    (Form1.Components[i] as TEdit).Text := Text;
end;

Добавлено: 16 сен 2005, 11:07
LAngel
Если по именам:

Код: Выделить всё

procedure SendTextToAllEdits(Text: String);
var
  i: Integer;
  Edit: TEdit;
begin
  For i := 1 to 89 do
  begin
    Edit := Form1.FindComponent('Edit' + IntToStr(i)) as TEdit;
    if Assigned(Edit) then Edit.Text := Text;
  end;
end;

Добавлено: 16 сен 2005, 11:18
LAngel
А ещё можно и пропертю прикрутить :) вообще красиво будет...

Код: Выделить всё

type
  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
    function GetEdit(Index: Integer): TEdit;
  public
    property Edit[Index: Integer]: TEdit read GetEdit;
    { Public declarations }
  end;

...
implementation

function TForm1.GetEdit(Index: Integer): TEdit;
begin
  Result := Form1.FindComponent('Edit' + IntToStr(Index)) as TEdit;
  if Result = nil then Raise(Exception.Create('Компонент Edit' + IntToStr(Index) +  ' не существует'));
end;
Тогда можно будет обращаться к Едитам так:

Код: Выделить всё

For i := 1 to 89 do Edit[i].Text := 'Hello ' + IntToStr(i);

Добавлено: 20 сен 2005, 15:36
Naeel Maqsudov
A еще можно написать процедуру-итератор.
В качестве последнего параметра процедуры поставить VariantArray через который передавать список указателей на Edit-ы. В самой процедуре написать цикл по всем элементам массива, и, разыменовывая каждый элемент как TEdit, выполнять присвоение.

FillEdits("";[Edit1,Edit32,Edit34......]);
FillEdits("SomeValue";[Edit2,Edit3,Edit4......]);

Если такой подход кому-нибудь интересен, то постараюсь закинуть исходный код этой процедуры.
Не делаю этого сразу, так как отлаживать не на чем :(