alexs писал(а):имя присваиваеш уникальное?
Разумеется. Вот так, как мы когда-то обсуждали в теме "передача типа как параметра". Я не стал возиться с классами - раньше никогда сам их не делал, и боюсь сейчас "зарыться", поэтому "рулит" старое доброе процедурное программирование.
car и har - массивы строк для caption и hint.
BuName - шаблон для создания имен, например
- Код: Выделить всё
procedure TEditForm.CreateButtons(car,har:TStrArray;var bar:array of TRadioButton;BuName:string;POw:TGroupBox;ONC:TNotifyEvent);
var i:Integer;
begin
for i:=Low(car) to High(car) do begin
bar[i]:=TRadioButton.Create(POw);
with bar[i] do begin
Caption:=car[i];
Hint:=har[i];
Width:=cDefRButHeight;
Height:=cDefRButHeight;
Visible:=true;
Tag:=ord(i);
Name:=BuName+Format('%2.2D',[i]);
Checked:=false;
Parent:=POw;
Onclick:=ONC;
TabStop:=false;
end;
end;
end;
Вот примеры использования из реального исходника:
- Код: Выделить всё
CreateButtons(TStrArray(cCDKName),TStrArray(cCDKHint),CDKButtons,'CDKButton',CollDestKindBox,@CollKindChanged);
CreateButtons(TStrArray(cQKname),TStrArray(cQKhint),QKButtons,'QKButton',QKindBox,@QKindChanged);
CreateButtons(TStrArray(cEKname),TStrArray(cEKhint),EKButtons,'EKButton',ExamKindBox,@EKindChanged);
Соответственно, имена получаются типа CDKButton00, QKButton03 и т.п.
Единственное сомнение, ибо этот момент как-то не очень отражен в документации, это то, что я при создании указываю овнером тот групбокс, куда кнопки должны вставляться. Может там надо указывать форму как овнера, а групбокс только как родителя?
Добавлено спустя 22 минуты 56 секунд:Сейчас изменил немного процедуру создания кнопок:
- Код: Выделить всё
bar[i]:=TRadioButton.Create(EditForm);
Кнопки появились в списке компонентов формы. Но мне это не нравится.
Не нравится тем, что я в описании КЛАССА обращаюсь к конкретной переменной, не являющейся пропертью этого класса, и не могу вспомнить, к чему относится self - к экземпляру класса или к чему-то другому? То есть, если вместо
Create(EditForm) я напишу
Create(Self), кто станет овнером?