Вниз
Скачать: 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.022 c
14-1087392519
MBo
2004-06-16 17:28
2004.07.11
Sha - поздравляю !


1-1088599378
Provodnick
2004-06-30 16:42
2004.07.11
PasteExcelTable не работает в Word


8-1082905956
iudjen
2004-04-25 19:12
2004.07.11
image OnMauuseEnter - Leave


3-1087283159
denis24
2004-06-15 11:05
2004.07.11
Как проверить существование таблицы на сервере БД


14-1088086427
QuasiLamo
2004-06-24 18:13
2004.07.11
Как удалить свою анкету?




   Наверх