Конференция "Компоненты" » Родительство у TCustomGroupBox
 
  • TStas (11.05.12 16:43) [0]
    Если на GroupBox что-то положить в design time, то GroupBox и будет родителем Control'а, который на него положили. Если тоже самое проделать с TRadioGroup, также точно выделив его, то родителем Control'а, который на него положили, он не станет. Они оба происходят от TCustomGroupBox. А как это сделано?
    Ведь различие начинается именно с CustomRadioGroup. Он ведь тоже TCustomGroupBox, только с кнопочками и перехваченным сообщением CM_ENABLEDCHANGED. Вообще, у него перехватываются ещё сообщение о смене фона и размеров. Это понятно, для чего.
    Чтение кода TCustomRadioGroup ответа на данный вопрос не принесло, хотя дало ответы на другие.
  • Cobalt © (11.05.12 17:59) [1]
    Ну, батенька, вы конструктор-то с предком сравните...
  • Cobalt © (11.05.12 18:03) [2]
    Кстати, тут в верху форума рекламируется книжечка по написанию компонентов. там как раз на стр. 112 раскрыты кое-какие особенности поведения компонентов.
  • TStas (11.05.12 19:02) [3]
    У меня есть книжка по компонентам. Фаронов "Искусство создания компонетов". Мне её Юрий Зотов посоветовал, за что спасибо ему.
    Кстати, тут в верху форума рекламируется книжечка //Простите за тупость, а наверху - это где?
    Ну, батенька, вы конструктор-то с предком сравните... //А вот конструктор TCustomRadioGroup сейчас почитаю. :)
  • DimaBr © (11.05.12 20:36) [4]
    Перевожу вопрос на русский язык. Почему на 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;

  • TStas (12.05.12 00:40) [5]
    Спасибо, разобрался. :) Про флаг csAcceptsControls не знал.
 
Конференция "Компоненты" » Родительство у TCustomGroupBox
Есть новые Нет новых   [118643   +48][b:0][p:0.001]