首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

组件编程有关问题

2012-02-29 
组件编程问题!以下是我开发的一个组件继承自TCustomMemo具体代码如下:现在想问的问题是:在调用组件的CodeE

组件编程问题!
以下是我开发的一个组件继承自TCustomMemo
具体代码如下:
现在想问的问题是:
在调用组件的CodeEditCodeClick想取的Name属性是方法是出现如下问题:
TCodeEdit(Sender).Name得到的是按扭的Name属性,我想得到的是
TCodeEdit的Name属性,请给予指教!谢谢!

Label1.Caption:=TCodeEdit(Sender).Name;

unit   CodeEdit;
{*******************************************************}
{                                                                                                               }
{               Delphi   Visual   Component   Library                                   }
{                                                                                                               }
{               Copyright   (c)   2007   Sunweikey                                         }
{               All   right   reserved                                                             }
{               E-mail:Sunweikey@qingdaonews.com                                 }
{                                                                                                               }
{*******************************************************}
 

interface

uses
    Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,
    StdCtrls,Buttons;

type
    TCodeEdit   =   class(TCustomMemo)
    private
        {   Private   declarations   }
        Flabel         :   Tlabel;
        Fuseable     :   Boolean;
        Fcode           :   String;
        procedure   Setlabel(Lb:   Tlabel);
        procedure   Setuseable(AA:   Boolean);
        procedure   Setcode(cc:   String);
    protected
        {   Protected   declarations   }
        FCodeButton:   TSpeedButton;
        function     GetOnClick:   TNotifyEvent;


        procedure   SetOnClick(Value:   TNotifyEvent);
        procedure   UpdateFormatRect;
        procedure   WMSize(var   Msg:   TWMSize);   message   WM_SIZE;
        procedure   WMSetCursor(var   Msg:   TWMSetCursor);   message   WM_SETCURSOR;
        procedure   CMEnabledChanged(var   Msg:   TWMNoParams);   message   CM_ENABLEDCHANGED;
        procedure   CreateHandle;   override;
    public
        constructor   Create(AOwner:   TComponent);   override;
        destructor     Destroy;   override;
    published
        {   Published   declarations   }
          property   Name;
          property   Alignment   default   taLeftJustify;
          property   BorderStyle;
          property   CharCase;
          property   Color;
          property   Ctl3D;
          property   Font;
          property   visible;
          property   Text;
          property   MaxLength;
          property   PasswordChar;
          property   HideSelection;
          property   ImeMode;
          property   ImeName;
          property   ShowHint;
          property   TabOrder;
          property   TabStop;
          property   Hint;
          property   Code:String   read   Fcode   write   Setcode;
          property   Title   :Tlabel   read   Flabel   write   Setlabel;
          property   Useable:   Boolean   read   Fuseable   write   Setuseable   ;
          property   ReadOnly;

          property   OnChange;
          property   OnClick;
          property   OnDblClick;
          property   OnEnter;
          property   OnExit;
          property   OnKeyDown;
          property   OnKeyPress;
          property   OnKeyUp;
          property   OnMouseDown;
          property   OnMouseMove;
          property   OnMouseUp;
          property   OnCodeClick:   TNotifyEvent   read   GetOnClick   write   SetOnClick;
    end;

procedure   Register;

implementation
{$R   CodeEdit.res}
constructor   TCodeEdit.Create(AOwner:   TComponent);
begin
    inherited   Create(AOwner);


    Height   :=   22;   Width   :=   121;
    WordWrap   :=   False;   WantReturns   :=   False;
    Useable   :=   True;
    FCodeButton   :=   TSpeedButton.Create(Self);
    with   FCodeButton   do   begin
        Parent   :=   self;
        Align     :=   alRight;
        Width     :=   Width   -1;
        Glyph.LoadFromResourceName(HInstance,   'CODEEDIT ');
    end;
end;


destructor   TCodeEdit.Destroy;
begin
    FCodeButton   :=   nil;
    inherited   Destroy;
end;

function     TCodeEdit.GetOnClick:   TNotifyEvent;
begin
    Result   :=   FCodeButton.OnClick;
end;

procedure   TCodeEdit.SetOnClick(Value:   TNotifyEvent);
begin
    FCodeButton.OnClick   :=   Value;
end;


procedure   TCodeEdit.Setlabel(Lb:   Tlabel);
begin
    if   Flabel <> Lb   then
    begin
    Flabel:=Lb;
    //TCodeEdit.name:=Lb.caption;
    end;
end;

procedure   TCodeEdit.Setuseable(AA:   Boolean);
begin
    if   Fuseable <> AA   then
    BEGIN
    Fuseable:=   AA;
    enabled     :=   AA;
    if   AA     then
    Color:=clWindow
    else
    Color:=clSilver;
    end;
end;
procedure   TCodeEdit.Setcode(cc:   String);
begin
    if   Fcode <> cc   then
    Fcode   :=   cc;
end;

procedure   TCodeEdit.UpdateFormatRect;
var   Rect:   TRect;
begin
    Rect   :=   ClientRect;
    Dec(Rect.Right,   FCodeButton.Width);
    SendMessage(Handle,   EM_SETRECTNP,   0,   LongInt(@Rect));
end;

procedure   TCodeEdit.WMSize(var   Msg:   TWMSize);
begin
    inherited;
    FCodeButton.Width   :=   FCodeButton.Height;
    UpdateFormatRect;
end;

procedure   TCodeEdit.WMSetCursor(var   Msg:   TWMSetCursor);
var   P:   TPoint;
begin
    GetCursorPos(P);
    P   :=   ScreenToClient(P);
    if   (P.X   > =   ClientWidth   -   FCodeButton.Width)   then
        SetCursor(Screen.Cursors[crDefault])
    else   inherited;
end;

procedure   TCodeEdit.CMEnabledChanged(var   Msg:   TWMNoParams);
begin
    inherited;
    FCodeButton.Enabled   :=   Enabled;
end;
procedure   TCodeEdit.CreateHandle;
begin
    inherited
    CreateHandle;
    UpdateFormatRect;
end;

procedure   Register;
begin
    RegisterComponents( 'WintekIT   Ctrl ',   [TCodeEdit]);
end;

end.

------解决方案--------------------


//属性改一下
property OnCodeClick: TNotifyEvent read FOnCodeClick write FOnCodeClick;

//定义一个私有成员
procedure OnBtnClick(Sender:TObject);
begin
if Assigned(FOnCodeClick) then FOnCodeClick(Self);
end;

//改一下这里
FCodeButton.OnClick:=OnBtnClick

热点排行