您的位置:首页 > 编程语言 > C语言/C++

c++builder自定义控件

2015-07-13 20:55 447 查看
c++builder自定义控件
http://docwiki.embarcadero.com/CodeExamples/XE8/en/RegisterComponents_%28C%2B%2B%29
void __fastcall SetFocusControl(TWinControl* Value);
void __fastcall CMDialogChar(TWMKey& Message);
void __fastcall CMTextChanged(TMessage& Message);

protected:
virtual void __fastcall Notification(TComponent* AComponent, TOperation Operation);
virtual void __fastcall Paint(void);

public:
__fastcall virtual TDemoLabel(TComponent* AOwner);

__published:
__property Caption ;
__property Color ;
__property TWinControl* FocusControl = {read=FFocusControl, write=SetFocusControl, nodefault};
__property Font ;
__property ParentColor ;
__property ParentFont ;
public:
__fastcall virtual ~TDemoLabel(void) { }

BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_DIALOGCHAR, TWMKey, CMDialogChar);
MESSAGE_HANDLER(CM_TEXTCHANGED, TMessage, CMTextChanged);
END_MESSAGE_MAP(TGraphicControl);
};

void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TDemoLabel)};
RegisterComponents("Samples", classes, 0);
RegisterComponents("MySystem", classes, 0);
}

__fastcall TDemoLabel::TDemoLabel(TComponent *AOwner):
TGraphicControl(AOwner)
{
FComponentStyle >> csInheritable;
Width=64;
Height=13;
}

void __fastcall    TDemoLabel::Notification(TComponent *AComponent, TOperation Operation)
{
TGraphicControl::Notification(AComponent, Operation);
if ((Operation == opRemove)  && (AComponent == FFocusControl))
FFocusControl = 0;
}

void __fastcall    TDemoLabel::SetFocusControl(TWinControl *Value)
{
FFocusControl = Value;

// Calling FreeNotification ensures that this component
// will receive an opRemove when Value is either removed
// from its owner or destroyed.

Value->FreeNotification(Value);
}

void __fastcall    TDemoLabel::Paint()
{
TRect    Rect = ClientRect;
Canvas->Font = Font;
Canvas->Brush->Color = Color;
Canvas->FillRect(Rect);
DrawText(
Canvas->Handle,
Caption.t_str(),
Caption.Length(),
&Rect,
DT_EXPANDTABS | DT_WORDBREAK | DT_LEFT);
}

void __fastcall    TDemoLabel::CMDialogChar(TCMDialogKey &Message)
{
if (FFocusControl != NULL &&
Enabled == true &&
IsAccel(Message.CharCode, Caption))
if (FFocusControl->CanFocus()){
FFocusControl->SetFocus();
Message.Result = 1;
}
}

void __fastcall    TDemoLabel::CMTextChanged(TMessage &Message)
{
Invalidate();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: