T_QuestionKind=(qkOneChoice,qkString,qkNumber,qkReorder) - перечислимый тип, RGQ_Kind:TRadioGroup, Q_Buttons:array of TRadioButton, cQKhint и cQKname - константы-массивы array[T_QuestionKind] of string - тексты хинтов и подписей для каждой кнопки, Lasts.QKindSelected переменная из ini-файла
- Код: Выделить всё
procedure TEditForm.Init_QType;
var i:T_QuestionKind;
begin
for i:=Low(T_QuestionKind) to High(T_QuestionKind) do begin
Q_buttons[i]:=TRadioButton.Create(RGQ_Kind);
with Q_buttons[i] do begin
Width:=cDefRButHeight;
Height:=cDefRButHeight;
Hint:=cQKhint[i];
Visible:=true;
TabOrder:=ord(i);
Caption:=cQKname[i];
Parent:=RGQ_Kind;
OnClick:=@RGQ_KindClick;
end;
end;
RGQ_Kind.Height:=(ord(High(T_QuestionKind))+2)*cDefRButHeight; //растягиваем в высоту
Q_buttons[T_QuestionKind(Lasts.QKindSelected)].Checked:=true;
end;
Кнопки создаются, однако RGQ_Kind.items.count=0, и при выборе одной из кнопок RGQ_Kind.itemindex не меняется, оставаясь =-1.
Если же созданные кнопки добавлять через RGQ_Kind.items.AddObject, то пропадают дополнительные свойства кнопок - OnCLick, Hint и что-то еще.
Замена Parent на Owner или их совместное использование ничего не меняет.
Временный выход из положения нашелся использованием TabOrder с его запоминанием в отдельной переменной в функции OnClick, но что-то мне это не нравится, явно должен быть более ортодоксальный способ.
Прошерстил хелп по Д-7, нашел только упоминание о создании кнопок в дизайнере и ничего на тему их создания в рантайме.
Any suggestions?