Конференция "Компоненты" » ToggleBox (наследник TCheckBox) [WinXP]
 
  • Vasena © (30.10.10 13:49) [0]
    суть вопроса очень проста, есть базовый класс TCustomCheckBox, есть класс TButton (или подобные ему), как соединить эти два класса в один, т.е. получить компонент TToggleBox (так он называется в Lazarus), который по сути является кнопкой с двумя состояниями
    итак сам вопрос, как надо правильно расширить класс TCustomCheckBox, чтобы придать визуальным состояниям вид кнопки???
    PS D2010
  • DimaBr © (01.11.10 08:49) [1]
    Перехватите сообщение WM_PAINT и рисуйте что угодно
  • Vasena © (03.11.10 23:37) [2]
    Дык, это то понятно, суть в чем, как мне прорисовать изображение кнопки, или если  поставить вопрос по другому, как это изображение извлечь из компонента Tbutton???
  • DimaBr © (04.11.10 08:30) [3]
    В TButton нет никакого изображения, TButton - оболочка вокруг стандартного Win-контрола. Его рисует сама Windows.
    Вы же будете использовать Canvas (которую нужно будет создать, загляните в TCustomControl) и скорее всего DrawFrameControl
  • DimaBr © (04.11.10 09:48) [4]

    type
    TMyCheckBox = class(StdCtrls.TCheckBox)
     private
       procedure CreateParams(var Params: TCreateParams); override;
       procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
       procedure BMSetCheck(var Message: TMessage); message BM_SETCHECK;
     public
       procedure Draw(DC: HDC);
    end;

    implementation

    procedure TMyCheckBox.BMSetCheck(var Message: TMessage);
    begin
     inherited;
     Invalidate;
    end;

    procedure TMyCheckBox.CNDrawItem(var Message: TWMDrawItem);
    begin
     Draw(Message.DrawItemStruct^.hDC);
    end;

    procedure TMyCheckBox.CreateParams(var Params: TCreateParams);
    begin
     inherited;
     with Params do
       Style := Style and not BS_RADIOBUTTON or BS_OWNERDRAW;
    end;

    procedure TMyCheckBox.Draw(DC: HDC);
    var r: TRect;
       Flag: integer;
    begin
     R := ClientRect;
     Flag := DFCS_BUTTONPUSH;
     if Checked then Flag := Flag or DFCS_PUSHED;
     DrawFrameControl(DC,R,DFC_BUTTON,Flag);
     DrawText(DC,PChar(Caption),Length(Caption),R,DT_CENTER or DT_VCENTER or DT_SINGLELINE);
    end;

 
Конференция "Компоненты" » ToggleBox (наследник TCheckBox) [WinXP]
Есть новые Нет новых   [134466   +3][b:0][p:0.001]