请问怎么编写自定义的控件,最好能有例子,我试了几次都成功都没成功!

解决方案 »

  1.   

    unit DemoVcl;interfaceuses
      SysUtils, Classes, Controls;type
      TDemoVcl = class(TWinControl)
      private
        { Private declarations }
      protected
        { Protected declarations }
      public
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Public', [TDemoVcl]);
    end;end.
      

  2.   

    制作VCL组件1.从合适的基类进行继承
    TWinControl 是窗体类的基类,有Handle
    TGraphControl  是图形类的基类,无Handle
    TComponent  是完全空白的基类,一般用于非可视组件
    或他们的派生类
    2.加入构件的属性、方法和事件
    属性、方法和事件,一部分是继承的,一部分是自己写的.
    3.安装组件
    Components -> Install Components
      

  3.   

    unit MyEdit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TCustomREdit = class(TCustomEdit)
      private
        { Private declarations }
        FAlignment:TAlignment;
        procedure SetAlignment(Value: TAlignment);
      protected
        { Protected declarations }
        property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
        procedure CreateParams(var Params: TCreateParams); override;
      public
        { Public declarations }
      published
        { Published declarations }
      end;  TMyEdit = class(TCustomREdit)
      published
        { Published declarations }
        property Alignment;
        property Anchors;
        property AutoSelect;
        property AutoSize;
        property BiDiMode;
        property BorderStyle;
        property CharCase;
        property Color;
        property Constraints;
        property Ctl3D;
        property DragCursor;
        property DragKind;
        property DragMode;
        property Enabled;
        property Font;
        property HideSelection;
        property ImeMode;
        property ImeName;
        property MaxLength;
        property OEMConvert;
        property ParentBiDiMode;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PasswordChar;
        property PopupMenu;
        property ReadOnly;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Text;
        property Visible;
        property OnChange;
        property OnClick;
        property OnContextPopup;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDock;
        property OnStartDrag;
      end;procedure Register;implementationprocedure TCustomREdit.CreateParams(var Params: TCreateParams);
    const
      Alignments: array[Boolean, TAlignment] of DWORD =
        ((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_LEFT,ES_RIGHT, ES_CENTER));
    begin
      inherited CreateParams(Params);
      with Params do
      begin
        Style := Style or Alignments[UseRightToLeftAlignment, FAlignment];
      end;
    end;procedure TCustomRedit.SetAlignment(Value:TAlignment);
    begin
      if FAlignment <> Value then
      begin
        FAlignment := Value;
        RecreateWnd;
      end;
    end;procedure Register;
    begin
      RegisterComponents('Samples', [TREdit]);
    end;end.
      

  4.   

    unit Chart1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, TeeProcs, TeEngine, Chart;type
      TChart1 = class(TChart)
      private
        { Private declarations }
      protected
        { Protected declarations }
      public
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples', [TChart1]);
    end;end.
      

  5.   

    这个问题,建议你还是找书看看为好!
    因为书上一般都能讲得很详细,
    而CSDN上的网友任凭他有多热情,恐怕都很难在此
    讲清你这个问题!