我要在一个edit里输入字符,edit的长度会随字符长度增加而增加,但当我删除字符时,edit的长度依然增加。
请大家帮忙看看怎么回事。procedure TForm1.Edit1Change(Sender: TObject);
begin
len:= length(edit1.text);
if edit1.Width < 83 then
edit1.Width:=83
else
edit1.Width :=edit1.Width+len;
end;
请大家帮忙看看怎么回事。procedure TForm1.Edit1Change(Sender: TObject);
begin
len:= length(edit1.text);
if edit1.Width < 83 then
edit1.Width:=83
else
edit1.Width :=edit1.Width+len;
end;
解决方案 »
- SQL SERVER这个错误是什么意思
- 请问这样获取系统时间,为什么不对啊?????
- 读Excel时0.27读出来变成.27了,去掉了0。怎么办
- Delphi的事务究竟是什么样的?
- 哪几种情况不要用到线程同步?
- intraweb里的jscript和delphi代码之间变量传递的问题
- 求助,给分100,adodataset的数据如何读出生成特定格式的XML文件?
- 在delphi中调用存储过程,老说类型转换不对
- 哪位大侠给讲讲socket和Tcp/Ip的关系?
- 急求DELPHI控件使用大全的电子书(20分)
- 用“select sum(f_cjmy),sum(f_sl) from xsls”这条SQL语句,怎么提示该表的第一个字段不存在?
- sql 数据库查询 关于日期
只帮你解决删除依然增加的问题:var
Len: integer;procedure TForm1.Edit1Change(Sender: TObject);
var
X : integer;
begin
X := 0;
if Length(Edit1.Text) - Len > 0 then X := 1;
if Length(Edit1.Text) - Len < 0 then X := -1;
Len := Length(Edit1.Text);
if Edit1.Width < 83 then
Edit1.Width := 83
else
Edit1.Width := Edit1.Width + X*Len;
end;{具体增加、减少的幅度,我无法知道你的目的,因此没改动。}{如果不想用全局变量Len,可以用Edit1.Tag代替}
procedure TForm1.Edit1Change(Sender: TObject);
begin
len:= length(edit1.text);
if edit1.Width < 83 then
edit1.Width:=83
else
edit1.Width := 83 + len;
end; 原来的代码,
只要编辑文本框就会执行TForm1.Edit1Change函数,最后都会执行:edit1.Width :=edit1.Width+len;
只要len>1,都将变大文本框长度。
var
ALabel: TLabel;
begin
ALabel := TLabel.Create(Self);
try
ALabel.AutoSize := True;
ALabel.Font := TEdit(Sender).Font;
ALabel.Caption := TEdit(Sender).Text;
TEdit(Sender).Width := ALabel.Width + 12;
finally
ALabel.Free;
end;
end;
Length(S)表示的的是字符的长度,而控件的尺寸是用象素来确定的,两者怎么混起来了??
所以我认为正确的做法应该如下:
procedure TForm1.Edit1Change(Sender: TObject);
begin
//edit1.Width为内容所需长度再留前后两个象素的宽度
edit1.Width := Canvas.TextWidth(edit1.Text)+4
end;