以下是我开发的一个组件继承自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.
具体代码如下:
现在想问的问题是:
在调用组件的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.
beginend;
请各位给指教顺便在清楚的描述一下我的问题:
就是希望在点击组件的下拉按扭时,击发组件OnCodeClick是返回的类是整个TCodeEdit而不是TCodeEdit类中的FCodeButton!这样才可以在事件中编写代码是用TCodeEdit(Sender).Name
得到是TCodeEdit类的Name属性!
property OnCodeClick: TNotifyEvent read FOnCodeClick write FOnCodeClick;//定义一个私有成员
procedure OnBtnClick(Sender:TObject);
begin
if Assigned(FOnCodeClick) then FOnCodeClick(Self);
end;//改一下这里
FCodeButton.OnClick:=OnBtnClick
能不能说明白点,能不能说的明白点?
可不可以MSN交流谢谢!