Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как групировать несколько компонент, чтобы изменить одно свойство [D7, WinXP]


Boroda Oleg ©   (2004-06-30 15:30:00) 

Имеем Label1, Label2, Edit1, Edit2
Можно ли в Дельфи как-то записать одним выражением так, чтобы у всех их изменилось свойство Enabled?

Что-то вроде (так, правда, не работает :(():
(Label1,Label2,Edit1,Edit2).Enabled:=false;


Sandman25   (2004-06-30 16:56:00) [1]

[12] Boroda Oleg   (30.06.04 16:50)

Включите настройку Range checking в Project-Options-Compiler. Будет гораздо легче находить подобные ошибки выхода индекса за пределы массива


Boroda Oleg   (2004-06-30 16:50:00) [2]

Заменил
for i := 0 to length(A) do

на
for I := Low(A) to High(A) do

и все пошло.

Спасибо!!!


Sandman25   (2004-06-30 16:18:00) [3]

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:15:00) [4]

Дошло. Нужно было в квадратные скобки заключить :))

Тут другое вылезло. Если я вызываю процедуру с параметром Enabled = false, то у меня вся форма энаблится. Т. е. перестают на ней работать все кнопки, включая те, которые я вообще не трогаю.


Sandman25   (2004-06-30 16:13:00) [5]

Найдите 10 отличий.
А еще лучше почитайте главу Open array constructors в спарвке


Boroda oleg   (2004-06-30 16:00:00) [6]

Что [1]??


Sandman25   (2004-06-30 15:58:00) [7]

[1]


Boroda Oleg   (2004-06-30 15:57:00) [8]

Сделал так:

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'


begin...end   (2004-06-30 15:40:00) [9]

Или массив. Или динамически.


Iconka   (2004-06-30 15:39:00) [10]

Создавай TList с сылками на компоненты и в цикле обрабатывай


Sandman25   (2004-06-30 15:39:00) [11]

procedure MySetEnabled(const A: array of TControl; Value: Boolean = True);


Boroda Oleg   (2004-06-30 15:36:00) [12]

Угу. А как в таком случае сформировать MySetEnabled?
Чтобы можно было засылать n компонент, да еще и разных типов? Я что-то не додумался.


Sandman25   (2004-06-30 15:31:00) [13]

Можно.

MySetEnabled([Label1, Label2, Edit1, Edit2])


Наверх

Титульная страница Поиск, карта сайта Написать письмо