为什么我没次都要输入两次!

我先前曾修改过TEDIT,使其数据右对齐,可是每次我都要输入一次,然后跳到其他文本框后,再回来之后才可以正常有对齐(开始运行初期都是默认对齐方式).还有我在设计登录窗口的时候,想开始'登录'按钮不可用,每次我都要输入一次,还是不可用,再输入一次才正常显示,这是怎么回事!
[145 byte] By [coldmail] at [2008-1-9]
# 1
设计登录窗口的时候,想开始'登录'按钮不可用,每次我都要输入一次,还是不可用,再输入一次才正常显示,这是怎么回事!
================================================================================
那要看你自己是怎么控制按钮的Enabled属性的,又是在哪个事件中控制的。
maozefa-阿发伯 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 2
简单例子,设计时设按钮
Botton.Enabled := False;

//在TEdit的OnChange事件判断
procedure TForm1.Edit1Change(Sender: TObject);
begin
Button1.Enabled := Edit1.Text <> '';
end;

maozefa-阿发伯 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 3
这个问题好像不是控制的问题,同样的问题已经发生过两次了!
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 4
我的程序是这样的
procedure tform1.edit1change(sender:tobject);
begin
if(trim(edit1.text)<>'')and(trim(edit2.text)<>'')then
bitbtn1.enabled:=true
else
bitbtn1.enabled:=false;
end;
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 5
我知道了,你把2个Edit的OnChange都指向一个方法。
maozefa-阿发伯 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 6
Edit1和Edit2共用一个事件方法就行了
maozefa-阿发伯 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 7
阿发伯正解!如果你只是在edit1的Onchange事件中注入这些代码,那只能是在edit1的内容发生变化时才会触发,而在edit2中是不行的!
winxkm-蹩脚的程序员 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 8
给我高手,我还是不太明白,能解释的直观一些!
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 9
各位高手,我还是不太明白,能解释的直观一些吗?
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 10
procedure TForm3.Edit1Change(Sender: TObject);
var
lStyle:Integer;
begin
lStyle:=GetWindowLong(edit1.Handle,GWL_STYLE);
SetWindowLong(edit1.Handle, GWL_STYLE,lStyle or ES_RIGHT );
end;

那上面的问题是,文本框内容居右对齐,开始时还是左对齐,后来从别的文本框条回来之后,才可以右对齐是怎么回事!非常感谢!
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 11
你把上述代码放到FormCreate事件中就行了
maozefa-阿发伯 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 12
果然厉害!谢谢阿发伯,我还有一点问题,就是我所有的edit都要在FORMCREATE里面吗?
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 13
果然厉害!谢谢阿发伯,我还有一点问题,就是我所有的edit都要在FORMCREATE里面吗
==================================================================================
是啊,如果Edit太多,可以做个循环

for I := 0 to ComponentCount - 1 do
if Components[I] is TEdit then
with Components[I] as TEdit do
begin
lStyle:=GetWindowLong(Handle,GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE,lStyle or ES_RIGHT );
end;
maozefa-阿发伯 at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 14
我太佩服你了,非常感谢,问题解决了!
coldmail at 2007-10-19 > top of Msdn China Tech,Delphi,VCL组件开发及应用...