TButton控件的形狀是哪個方法繪制的? (50分)

  • 主题发起人 主题发起人 leway
  • 开始时间 开始时间
L

leway

Unregistered / Unconfirmed
GUEST, unregistred user!
TTest1 = class(TButton)

TTest2 = class(TButtonControl)


將上面兩個控件Install到元件盤。然後分別點到Form,只有TTest1出現了Button的形狀。這是否能說明TButton下的方法完成了TButton元件的形狀繪制。
查看TButton控件的Source,不知是哪個方法實現的Button現狀的繪制,請指點一二。


TButton = class(TButtonControl)
private
FDefault: Boolean;
FCancel: Boolean;
FActive: Boolean;
FModalResult: TModalResult;
procedure SetDefault(Value: Boolean);
procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
procedure CNCtlColorBtn(var Message: TWMCtlColorBtn); message CN_CTLCOLORBTN;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure SetButtonStyle(ADefault: Boolean); virtual;
public
constructor Create(AOwner: TComponent); override;
procedure Click; override;
function UseRightToLeftAlignment: Boolean; override;

 
想干什么那?
 
procedure TButton.CreateParams(var Params: TCreateParams);
const
ButtonStyles: array[Boolean] of DWORD = (BS_PUSHBUTTON, BS_DEFPUSHBUTTON);
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'BUTTON');//這裡就是一個WIN32標準控件
Params.Style := Params.Style or ButtonStyles[FDefault];
end;

TBitBtn -> CN_DRAWITEM
如果要重寫TButton建議Copy TBitBtn所有代碼.
 
接受答案了.
 
后退
顶部