Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: 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 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
4-1085588142
Manulo
2004-05-26 20:15
2004.07.11
Есть ли альтернатива <CODE>GetWindowText</CODE>


1-1088408739
VadimKV
2004-06-28 11:45
2004.07.11
Error: class + Constructor + Destructor


1-1088247918
Lexa
2004-06-26 15:05
2004.07.11
Файл ресурсов


14-1087955709
Думкин
2004-06-23 05:55
2004.07.11
С днем рождения! 23 июня


4-1086157047
Term
2004-06-02 10:17
2004.07.11
как получить список дисков в системе, С ,D и т.д. скоко их там ес