zoukankan      html  css  js  c++  java
  • c++builder自定义控件

    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();
    }
  • 相关阅读:
    设计模式系列之-抽象工厂
    设计模式系列之-工厂方法
    设计模式系列之-简单工厂
    键盘事件keydown、keypress、keyup随笔整理总结(摘抄)
    js 方法重载
    JS禁止右键
    jquery.validate运用和扩展
    Javascript Math.ceil()与Math.round()与Math.floor()区别
    Jquery操作下拉框(DropDownList)实现取值赋值
    jquery中attr和prop的区别
  • 原文地址:https://www.cnblogs.com/cb168/p/4643916.html
Copyright © 2011-2022 走看看