关于自定义组件继承TEdit的一个简单问题 我编写了一个组件,继承了TEdit,想得到这样的功能,就是当这个组件失去焦点后,组件会自动修改text的格式,如用户输入了34,失去焦点后显示为34.00,我已知道用formatcurr('0.00',x)这样的函数,但不知道在哪儿写这样的代码?解决了有100分.最好有详细的代码例子. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接在OnExit()里写不就行了吗? 是啊,我写 proceduer exit(sender:Tobject);override;但是编译时出现错误,提示基类没有exit事件. procedure DoExit; override;继承自TEdit 的父类 TCustomEdit 的父类 TWinControl试一下 你看看 WM_KILLFOCUS有没有用啊..TUEdit=class(TEdit)............... pvivate procedure WMKILLFOCUS(msg:TMessage);message WM_KILLFOCUS;........................procedure TUEdit.WMKILLFOCUS(msg:TMessage);begin..............end; 谢谢SydPink(敲坏10块键盘就能成高手) ,只有你给出了正确的方向和代码,我用的是procedure WMKILLFOCUS(msg:TMessage);message cm_Exit;这样当组件失去焦点时就可以自动执行这个过程了。论坛中讨论组件编写的好象很少啊?如果没人能给出其他的方法,代码,那么我就把分数都给他了。各位不反对吧? 代码如下:化了我一个晚上的时间才做出的,继承自TEdit控件,可以控制文字的对齐方式,只能输入数字,保留小数点后两位,此组件主要是用于金额的输入。见笑了,欢迎大家批评指正。(此组件是别人做的(文字对齐),我添加了一些代码用于需要的功能,输入数字和保留两位小数。)unit extedit;interfaceuses Messages, Windows, SysUtils, Classes, Controls, Forms, StdCtrls;type TExtEdit = class(TEdit) private { Private declarations } FAlignment: TAlignment; protected { Protected declarations } procedure CreateParams(var Params: TCreateParams); override; procedure Loaded; override; procedure SetAlignment(Value: TAlignment); procedure KeyPress(var Key: Char); override; procedure edit_focus_Exit(var msg:Tmessage);message cm_exit; public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; function GetControlsAlignment: TAlignment; override; published { Published declarations } property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; property Align; property Anchors; property BevelEdges; property BevelInner; property BevelKind default bkNone; property BevelOuter; property BiDiMode; property BorderStyle; 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 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 Register;begin RegisterComponents('Custom', [TExtEdit]);end;constructor TExtEdit.Create(AOwner: TComponent);begin inherited Create(AOwner); //ParentBackground := False;end;procedure TExtEdit.CreateParams(var Params: TCreateParams);const Alignments: array[Boolean, TAlignment] of DWORD = ((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER));begin inherited CreateParams(Params); with Params do begin Style := Style or Alignments[UseRightToLeftAlignment, FAlignment]; end;end;destructor TExtEdit.Destroy();begin inherited Destroy();end;procedure TExtEdit.edit_focus_Exit(var msg: Tmessage);var x:currency;begin x:=strtofloat(Text); Text:=formatcurr('0.00',x);end;function TExtEdit.GetControlsAlignment: TAlignment;begin Result := FAlignment;end;procedure TExtEdit.KeyPress(var Key: Char);begin inherited; //只能输入数字 if not (key in ['0'..'9','.','-',#8,#13]) then key:=#0;end;procedure TExtEdit.Loaded;begin inherited Loaded; Modified := False;end;procedure TExtEdit.SetAlignment(Value:TAlignment);begin if FAlignment <> Value then begin FAlignment := Value; RecreateWnd; end;end;end. 第一次用三层结构,超简单问题,希望大家帮助 在Delphi中动态创建控件并处理添加事件处理 DELPHI中如何获取一个文件的大小? 再发类似问题,四舍六入问题谁帮我修改一下程序 delphi7调用DLL与DELPHI6不同吗,程序是书本上的例子,如下通不过;马上给分 再放50分(10人)人满结帖 局域网中语音传输如何实现?先给50分后加分! 用电记费系统谁做过? messagebox的提示文字怎样折行 delphi高手请进.......... 为什么没有人回答?Delphi写OCX控件(用ActiveForm生成),如何显露里面组件的事件???? 如何测试BDE是否能够联得通?
proceduer exit(sender:Tobject);override;但是编译时出现错误,提示基类没有exit事件.
TUEdit=class(TEdit)
...............
pvivate
procedure WMKILLFOCUS(msg:TMessage);message WM_KILLFOCUS;
........................
procedure TUEdit.WMKILLFOCUS(msg:TMessage);
begin
..............
end;
procedure WMKILLFOCUS(msg:TMessage);message cm_Exit;这样当组件失去焦点时就可以自动执行这个过程了。论坛中讨论组件编写的好象很少啊?如果没人能给出其他的方法,代码,那么我就把分数都给他了。各位不反对吧?
见笑了,欢迎大家批评指正。(此组件是别人做的(文字对齐),我添加了一些代码用于需要的功能,输入数字和保留两位小数。)unit extedit;
interfaceuses Messages, Windows, SysUtils, Classes, Controls, Forms, StdCtrls;type
TExtEdit = class(TEdit)
private
{ Private declarations }
FAlignment: TAlignment;
protected
{ Protected declarations }
procedure CreateParams(var Params: TCreateParams); override;
procedure Loaded; override;
procedure SetAlignment(Value: TAlignment);
procedure KeyPress(var Key: Char); override;
procedure edit_focus_Exit(var msg:Tmessage);message cm_exit;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetControlsAlignment: TAlignment; override;
published
{ Published declarations }
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
property Align;
property Anchors;
property BevelEdges;
property BevelInner;
property BevelKind default bkNone;
property BevelOuter;
property BiDiMode;
property BorderStyle;
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 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 Register;
begin
RegisterComponents('Custom', [TExtEdit]);
end;constructor TExtEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//ParentBackground := False;
end;procedure TExtEdit.CreateParams(var Params: TCreateParams);
const
Alignments: array[Boolean, TAlignment] of DWORD =
((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER));
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or
Alignments[UseRightToLeftAlignment, FAlignment];
end;
end;destructor TExtEdit.Destroy();
begin
inherited Destroy();
end;procedure TExtEdit.edit_focus_Exit(var msg: Tmessage);
var
x:currency;
begin x:=strtofloat(Text);
Text:=formatcurr('0.00',x);end;function TExtEdit.GetControlsAlignment: TAlignment;
begin
Result := FAlignment;
end;procedure TExtEdit.KeyPress(var Key: Char);
begin
inherited;
//只能输入数字
if not (key in ['0'..'9','.','-',#8,#13]) then
key:=#0;
end;procedure TExtEdit.Loaded;
begin
inherited Loaded;
Modified := False;
end;procedure TExtEdit.SetAlignment(Value:TAlignment);
begin
if FAlignment <> Value then
begin
FAlignment := Value;
RecreateWnd;
end;
end;end.