Можно ли поставить в цикл компоненты?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Всем привет! Проблема такая, у меня в проге 89 компонентов Edit, начиная с Edit1 и заканчивая Edit89 Мне вломы писать одну и туже процедуру каждому компоненту, т.е. Edit1.text:=''; Edit2.text:=''; и т.д., можно ли это в цикл какой-нить сунуть? Например Edit.text:='';
Код: Выделить всё
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;
С уважением, Lost Angel...
Если по именам:
Код: Выделить всё
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;
С уважением, Lost Angel...
А ещё можно и пропертю прикрутить
вообще красиво будет...
Тогда можно будет обращаться к Едитам так:

Код: Выделить всё
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);
С уважением, Lost Angel...
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
A еще можно написать процедуру-итератор.
В качестве последнего параметра процедуры поставить VariantArray через который передавать список указателей на Edit-ы. В самой процедуре написать цикл по всем элементам массива, и, разыменовывая каждый элемент как TEdit, выполнять присвоение.
FillEdits("";[Edit1,Edit32,Edit34......]);
FillEdits("SomeValue";[Edit2,Edit3,Edit4......]);
Если такой подход кому-нибудь интересен, то постараюсь закинуть исходный код этой процедуры.
Не делаю этого сразу, так как отлаживать не на чем
В качестве последнего параметра процедуры поставить VariantArray через который передавать список указателей на Edit-ы. В самой процедуре написать цикл по всем элементам массива, и, разыменовывая каждый элемент как TEdit, выполнять присвоение.
FillEdits("";[Edit1,Edit32,Edit34......]);
FillEdits("SomeValue";[Edit2,Edit3,Edit4......]);
Если такой подход кому-нибудь интересен, то постараюсь закинуть исходный код этой процедуры.
Не делаю этого сразу, так как отлаживать не на чем
