如何让Edit控件中的内容居在控件的右面? 我在输入数值型数据时,如何让数据显示在Edit控件的右面? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要想将 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; http://expert.csdn.net/Expert/topic/2068/2068925.xml?temp=.2531855记住设置以后 要刷新 // :)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; 非常表示感谢!但我用了风焱与伴水清清的方法,怎么会没反应呢?我是在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;但却不好用呢?不知道我写的对不对呢?天才弟弟,不好意思,我还没有试验你的方法,因为我是新手! 我的测试环境是Delphi6 + Window XP~~那你测试下microjuz的代码~~ 我用的是Delphi6 + Win2000 我的问题解决了,先谢谢大家,是用了你们 firetoucher(风焱) zswang(伴水清清)(专家门诊清洁工) 的方法,我是个新手,我不太明白的是,为什么我的电脑可以,但在别的机器上却不能用呢?我是在windows自动更新后才可以的!我不知道zswang(伴水清清)(专家门诊清洁工) 的所说的microjuz如何测试呢?这个贴子我结了,你们考虑考虑吧! 在子类中如何限制基类的一些没用的一些属性,方法,过程? 客户端关闭出错 一个服务程序读取INI文件,并且创建新窗体,新窗体如何取得服务程序的INI数据?在线等待 这个应该怎么调用 如何在客户端显示网站上图片 如何在oracle中存取文件??? 有谁知道哪里可以找到这个控件? Report builder 7enterprise如何象fastreport中的add page一样能够设计几页不同纸张大小的报表 不使用midas技术,如何编写一个dcom服务器来进行多层数据库开发? TObject中的Destroy为什么声明为虚拟方法 如何让exe文件变小? QUERY的简单问题!
下面是一个实际的例子动态的创建一个带有左中右对齐属性(经过测试)。如果想以后使用这个对象,你可以单独创建一个 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;
记住设置以后 要刷新
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;
但我用了风焱与伴水清清的方法,怎么会没反应呢?我是在
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;
但却不好用呢?不知道我写的对不对呢?
天才弟弟,不好意思,我还没有试验你的方法,因为我是新手!
那你测试下microjuz的代码~~