Вниз
Скачать: CL | DM;

Как групировать несколько компонент, чтобы изменить одно свойство   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
14-1087819008
YurikGL
2004-06-21 15:56
2004.07.11
Восстановление SCSI-винта


3-1086753895
Valera
2004-06-09 08:04
2004.07.11
master-detail с помощюю FIBPlus


1-1088504855
ZiRoCool
2004-06-29 14:27
2004.07.11
как узнать ASCII код символа?


1-1087550958
doma
2004-06-18 13:29
2004.07.11
Попытка создать Frame из Dll...


3-1087276044
query
2004-06-15 09:07
2004.07.11
1 234 567,000 -->>> 1234567




   Наверх