Цитата:
Сообщение от delphicoding
2. Ну это да, массив... думал может можно побыстрее как-то одним действим через запятую. Типа "SetAll (Field1,Filed2,Field3+[.Enable]) := False", жалко, что нет такой конструкции
3. FindComponent да, но названия разные, лучше назвать нормально, чем потом ковыряться пытаясь понять что обозначает название Tlabel100500. TActionList похоже не подходит, да и разницы видимо нет со списком/массивом в коде, а поскольку это компонент формы - код будет хуже читаться.
4. Круто, я знал, что такое должно быть! Спасибо. 
|
2. Ну, например, можно изголяться так:
Код:
const
A : Array [1..2] Of Array [1..5] Of String =
(('Edit1','Edit2','Edit3','Edit4','Edit5'),
('Edit1','edMyEdit','TheOtherEdit','',''));
procedure TForm1.SetMyControls(ACaseNumber : Integer);
var
I : Integer;
begin
For I := 1 To 5 Do
If A[ACaseNumber,I] <> '' Then
(FindComponent(A[ACaseNumber,I]) As TEdit).Enable := True;
end;
Вот тебе все и будет сделано в один вызов. А имена можно передавать и прямо в массиве, например:
Код:
procedure TForm1.SetMyControls(AValue : Boolean; ANames : Array Of String);
var
I : Integer;
begin
For I := Low(ANames) To High(ANames) Do
(FindComponent(ANames[i]) As TEdit).Enabled := AValue;
end;
Опять же один вызов, в котором просто передаются имена компонентов.
3. Вот тебе пара названий:
Код:
rbDoThis : TRadioButton;
edDoThis : TEdit;
rbDoThat : TRadioButton;
edDoThat : TEdit;
Соотв, можно написать что-то вроде этого:
Код:
procedure TForm1.rbClick(Sender : Tobject);
var
AName : String;
begin
AName := (Sender As TRadioButton).Name;
AName[1] := 'e';
AName[2] := 'd';
(FindComponent(AName) As TEdit).Enabled := (Sender As TRadioButton).Checked;
end;
И присвоить его всем кнопкам. Соотв. при смене состояния кнопка найдет соотв. компонент и сделает все что нужно.