Страница 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......]);
Если такой подход кому-нибудь интересен, то постараюсь закинуть исходный код этой процедуры.
Не делаю этого сразу, так как отлаживать не на чем
