Показать сообщение отдельно
  #8  
Старый 22.07.2011, 01:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от 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;

И присвоить его всем кнопкам. Соотв. при смене состояния кнопка найдет соотв. компонент и сделает все что нужно.
Ответить с цитированием