-
Если на GroupBox что-то положить в design time, то GroupBox и будет родителем Control'а, который на него положили. Если тоже самое проделать с TRadioGroup, также точно выделив его, то родителем Control'а, который на него положили, он не станет. Они оба происходят от TCustomGroupBox. А как это сделано? Ведь различие начинается именно с CustomRadioGroup. Он ведь тоже TCustomGroupBox, только с кнопочками и перехваченным сообщением CM_ENABLEDCHANGED. Вообще, у него перехватываются ещё сообщение о смене фона и размеров. Это понятно, для чего. Чтение кода TCustomRadioGroup ответа на данный вопрос не принесло, хотя дало ответы на другие.
-
Ну, батенька, вы конструктор-то с предком сравните...
-
Кстати, тут в верху форума рекламируется книжечка по написанию компонентов. там как раз на стр. 112 раскрыты кое-какие особенности поведения компонентов.
-
У меня есть книжка по компонентам. Фаронов "Искусство создания компонетов". Мне её Юрий Зотов посоветовал, за что спасибо ему. Кстати, тут в верху форума рекламируется книжечка //Простите за тупость, а наверху - это где? Ну, батенька, вы конструктор-то с предком сравните... //А вот конструктор TCustomRadioGroup сейчас почитаю. :)
-
Перевожу вопрос на русский язык. Почему на TGroupBox можно положить контрол, а на TRadioGroup нельзя. Потому, что в конструкторе TCustomGroupBox убран флаг csAcceptsControls
constructor TCustomGroupBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csSetCaption, csDoubleClicks, csReplicatable, csParentBackground];
Width := 185;
Height := 105;
end;
constructor TCustomRadioGroup.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csSetCaption, csDoubleClicks, csParentBackground];
FButtons := TList.Create;
FItems := TStringList.Create;
TStringList(FItems).OnChange := ItemsChange;
FItemIndex := -1;
FColumns := 1;
end;
-
Спасибо, разобрался. :) Про флаг csAcceptsControls не знал.
|