Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизКак групировать несколько компонент, чтобы изменить одно свойство Найти похожие ветки
← →
Boroda Oleg (2004-06-30 15:30) [0]Имеем Label1, Label2, Edit1, Edit2
Можно ли в Дельфи как-то записать одним выражением так, чтобы у всех их изменилось свойство Enabled?
Что-то вроде (так, правда, не работает :(():
(Label1,Label2,Edit1,Edit2).Enabled:=false;
← →
Sandman25 © (2004-06-30 15:31) [1]Можно.
MySetEnabled([Label1, Label2, Edit1, Edit2])
← →
Boroda Oleg (2004-06-30 15:36) [2]Угу. А как в таком случае сформировать MySetEnabled?
Чтобы можно было засылать n компонент, да еще и разных типов? Я что-то не додумался.
← →
Iconka (2004-06-30 15:39) [3]Создавай TList с сылками на компоненты и в цикле обрабатывай
← →
Sandman25 © (2004-06-30 15:39) [4]procedure MySetEnabled(const A: array of TControl; Value: Boolean = True);
← →
begin...end © (2004-06-30 15:40) [5]Или массив. Или динамически.
← →
Boroda Oleg (2004-06-30 15:57) [6]Сделал так:
procedure MySetEnabled(const A: array of TControl; Value: Boolean);
var i : integer;
begin
for i := 0 to length(A) do
A[i].Enabled:=value;
end;
Вызываю:
MySetEnabled(Label1,Label2,DBEdit1,DBDateEdit1,true);
Выдает ошибку о несоответствии типов "Array" и "TLabel"
← →
Sandman25 © (2004-06-30 15:58) [7][1]
← →
Boroda oleg (2004-06-30 16:00) [8]Что [1]??
← →
Sandman25 © (2004-06-30 16:13) [9]Найдите 10 отличий.
А еще лучше почитайте главу Open array constructors в спарвке
← →
Boroda Oleg (2004-06-30 16:15) [10]Дошло. Нужно было в квадратные скобки заключить :))
Тут другое вылезло. Если я вызываю процедуру с параметром Enabled = false, то у меня вся форма энаблится. Т. е. перестают на ней работать все кнопки, включая те, которые я вообще не трогаю.
← →
Sandman25 © (2004-06-30 16:18) [11]type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure MySetEnabled(const Arr: array of TControl; Value: Boolean);
var
I: integer;
begin
for I := Low(Arr) to High(Arr) do
Arr[I].Enabled := Value;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MySetEnabled([Button1, Button2], False);
end;
Button3 не дизъэблится.
← →
Boroda Oleg (2004-06-30 16:50) [12]Заменил
for i := 0 to length(A) do
на
for I := Low(A) to High(A) do
и все пошло.
Спасибо!!!
← →
Sandman25 © (2004-06-30 16:56) [13][12] Boroda Oleg (30.06.04 16:50)
Включите настройку Range checking в Project-Options-Compiler. Будет гораздо легче находить подобные ошибки выхода индекса за пределы массива
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c