以下是我开发的一个组件继承自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:[email protected]                }
{                                                       }
{*******************************************************}
 interfaceuses
  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.

解决方案 »

  1.   

    property OnCodeClick: TNotifyEvent read FOnCodeClick write FOnCodeClick;procedure OnBtnClick(Sender:TObject);
    beginend;
      

  2.   

    难道大家都不编写组件吗?
    请各位给指教顺便在清楚的描述一下我的问题:
     
     就是希望在点击组件的下拉按扭时,击发组件OnCodeClick是返回的类是整个TCodeEdit而不是TCodeEdit类中的FCodeButton!这样才可以在事件中编写代码是用TCodeEdit(Sender).Name
    得到是TCodeEdit类的Name属性!
      

  3.   

    //属性改一下
    property OnCodeClick: TNotifyEvent read FOnCodeClick write FOnCodeClick;//定义一个私有成员
    procedure OnBtnClick(Sender:TObject);
    begin
      if Assigned(FOnCodeClick) then FOnCodeClick(Self);
    end;//改一下这里
    FCodeButton.OnClick:=OnBtnClick
      

  4.   

    HsWong() 
    能不能说明白点,能不能说的明白点?
      

  5.   

    我的msn:[email protected]
    可不可以MSN交流谢谢!