我在输入数值型数据时,如何让数据显示在Edit控件的右面?

解决方案 »

  1.   

    要想将 TEdit 的 Text 以右对齐方式显示需要自己写一个控件去作。右对齐方式是创建一个窗体的时候在它的风格里面所设定的,对齐方式可在三个参数中选一个 [ES_LEFT, ES_RIGNT, ES_CENTER],默认值是ES_LEFT。设定该值是通过一个 WinControl 的 CreateParams 过程完成的,由于 Delphi 在 TEdit 中没有定义对齐的属性,所以你必须自定义一个 Alignment:TAlignment类型的属性,每次改变改属性后必须重新创建窗体(调用 RecreateWnd 函数)。
    下面是一个实际的例子动态的创建一个带有左中右对齐属性(经过测试)。如果想以后使用这个对象,你可以单独创建一个 Unit 并加入注册函数,使其变成一个控件:
    type
      //自定 TMyEdit 对象
      TMyEdit = class(TEdit)
      private
        FAlignment: TAlignment;
      protected
        procedure CreateParams(var Params: TCreateParams); override;
        procedure SetAlignment(Value: TAlignment);
      published
        property Alignment: TAlignment read FAlignment write SetAlignment;
      end;
      //Deliphi 的 TForm1 
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        MyEdit1: TMyEdit;
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.DFM}
    procedure TMyEdit.SetAlignment(Value: TAlignment);
    begin
      if FAlignment <> Value then
      begin
        FAlignment := Value;
        RecreateWnd;
      end;
    end;
    procedure TMyEdit.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;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     MyEdit1:=TMyEdit.Create(Self);
     MyEdit1.Alignment := taRightJustify;
     MyEdit1.parent:=Self;
     MyEdit1.Left := 20;
     MyEdit1.Top := 50;
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      MyEdit1.Free;
    end;
      

  2.   

    http://expert.csdn.net/Expert/topic/2068/2068925.xml?temp=.2531855
    记住设置以后 要刷新
      

  3.   

    // :)
    begin
      SetWindowLong(Edit1.Handle, GWL_STYLE,
        GetWindowlong(Edit1.Handle, GWL_STYLE) + ES_CENTER);
      Edit1.Refresh;  SetWindowLong(Edit2.Handle, GWL_STYLE,
        GetWindowlong(Edit2.Handle, GWL_STYLE) + ES_RIGHT);
      Edit2.Refresh;
    end;
      

  4.   

    非常表示感谢!
    但我用了风焱与伴水清清的方法,怎么会没反应呢?我是在
    procedure TForm_rksp.FormCreate(Sender: TObject);
    begin
        SetWindowLong(Edit_cbhj.handle,GWL_STYLE,GetWindowlong(edit_cbhj.Handle,GWL_STYLE)+ES_RIGHT);
        Edit_cbhj.Refresh;
    end;
    但却不好用呢?不知道我写的对不对呢?
    天才弟弟,不好意思,我还没有试验你的方法,因为我是新手!
      

  5.   

    我的测试环境是Delphi6 + Window XP~~
    那你测试下microjuz的代码~~
      

  6.   

    我用的是Delphi6 + Win2000
      

  7.   

    我的问题解决了,先谢谢大家,是用了你们  firetoucher(风焱) zswang(伴水清清)(专家门诊清洁工) 的方法,我是个新手,我不太明白的是,为什么我的电脑可以,但在别的机器上却不能用呢?我是在windows自动更新后才可以的!我不知道zswang(伴水清清)(专家门诊清洁工) 的所说的microjuz如何测试呢?这个贴子我结了,你们考虑考虑吧!