我想实现双击Shape控件处理相应事件,但Tshape本身没有双击和单击事件,如何实现或者如何继承重写控件啊,看了很多帖子,只是说了一下,还是不会,我想知道详细的实现步骤或者实现方法,我的分可能不多,但我会尽力给分,因为我真得很急。麻烦各位大侠了。

解决方案 »

  1.   


    type
      Test = class(TShape)
     published
       onclick;
    end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('T', [Test ]);
    end;
      

  2.   

    TOnClick=procedure(Sender: TObject) of Object;type
      TYourSharp = class(TSharp)
      private
        FOnClick: TOnClick;
      protected
        procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
          X, Y: Integer); override;
      published
        procedure StyleChanged(Sender: TObject);
        property Align;
        property Anchors;
        property Brush: TBrush read FBrush write SetBrush;
        property DragCursor;
        property DragKind;
        property DragMode;
        property Enabled;
        property Constraints;
        property ParentShowHint;
        property Pen: TPen read FPen write SetPen;
        property Shape: TShapeType read FShape write SetShape default stRectangle;
        property ShowHint;
        property Visible;
        property OnContextPopup;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDock;
        property OnStartDrag;
        property OnClick: TOnClick read FOnClick write FOnClick;
      end;procedure TYourSharp.MouseDown(Button: TMouseButton; Shift: TShiftState;
          X, Y: Integer);
    begin
      if Assigned(FOnClick) then
        FOnClick(Self);
    end;
      

  3.   

    TShape是从TControl继承的,只是没有公布出来,你直接published就可以了。
    可以公布的事件属性如下:
      TNewShap = class(TShape)
      published
        property OnCanResize;
        property OnClick;
        property OnConstrainedResize;
        property OnContextPopup;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnMouseWheel;
        property OnMouseWheelDown;
        property OnMouseWheelUp;
        property OnResize;
        property OnStartDock;
        property OnStartDrag;
      end;
      

  4.   

    我再包装一下,其实楼上几位已经说了比较清楚了。1、代码直接新建一个单元,把下面的代码拷贝过去即可;unit ExtendShape;
    interface
    uses
      SysUtils, Classes, Controls, ExtCtrls;
    type
      TExtendShape = class(TShape)
      private
        { Private declarations }
      protected
        { Protected declarations }
      public
        { Public declarations }
      published
        property OnClick;   //单击
        property OnDblClick;//双击
      end;procedure Register;implementationprocedure Register;
    begin
      //参数1:要注册的组件面板
      //参数2:要注册的类名
      RegisterComponents('System', [TExtendShape]);
    end;
    end.2、安装组建
       点击菜单“component”—〉install componet...后,第一个输入框选择你刚才保存的 pas文件,点击OK按钮即完成安装,安装后的组件在上面注册的 System 面板里面。3、效果图A、B、如果还有什么问题,可以继续接着讨论!