我编写了一个组件,继承了TEdit,想得到这样的功能,就是当这个组件失去焦点后,组件会自动修改text的格式,如用户输入了34,失去焦点后显示为34.00,我已知道用formatcurr('0.00',x)这样的函数,但不知道在哪儿写这样的代码?
解决了有100分.最好有详细的代码例子.

解决方案 »

  1.   

    直接在OnExit()里写不就行了吗?
      

  2.   

    是啊,我写 
    proceduer exit(sender:Tobject);override;但是编译时出现错误,提示基类没有exit事件.
      

  3.   

    procedure DoExit; override;继承自TEdit 的父类 TCustomEdit 的父类 TWinControl试一下
      

  4.   

    你看看 WM_KILLFOCUS有没有用啊..
    TUEdit=class(TEdit)
    ...............
     pvivate
     procedure WMKILLFOCUS(msg:TMessage);message WM_KILLFOCUS;
    ........................
    procedure TUEdit.WMKILLFOCUS(msg:TMessage);
    begin
    ..............
    end;
      

  5.   

    谢谢SydPink(敲坏10块键盘就能成高手) ,只有你给出了正确的方向和代码,我用的是
    procedure WMKILLFOCUS(msg:TMessage);message cm_Exit;这样当组件失去焦点时就可以自动执行这个过程了。论坛中讨论组件编写的好象很少啊?如果没人能给出其他的方法,代码,那么我就把分数都给他了。各位不反对吧?
      

  6.   

    代码如下:化了我一个晚上的时间才做出的,继承自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.