我有一个输入编辑字段,用户可以在其中输入数据。我希望盒子的宽度至少是191 box (最小)和最大450 box(最大)。
procedure THauptform.edtEingabeChange(Sender: TObject);
begin
// Scale
if Length(edtEingabe.Text) > 8 then
begin
if Hauptform.Width <= 450 then
begin
verschiebung := verschiebung + 9;
// The initial values like 'oldedtEingabeWidth' are global vars.
edtEingabe.Width := oldedtEingabeWidth + verschiebung;
buDo.Left := oldbuDoLeft + verschiebung;
Hauptform.Width := oldHauptformWidth + verschiebung;
end;
end;
end;这适用于输入文本。但是当我删除一个字符时,并没有相应地缩小.
发布于 2010-03-28 01:06:33
在您的代码中,当文本长度小于8个字符时,不会发生任何事情。
而且,我没有看到任何情况下,你的宽度变小。每次迭代时,它只会变得更大( 9)。
顺便说一句,你的平均字符宽度似乎是9倍。您可以使用Canvas.TextWidth来确定文本所需的实际宽度,而无需估计。
如果您想无论如何使用"9“,您应该将它命名为常量,以明确它是什么。
快速和肮脏地使用TextWidth:
const
MAX_EINGABE_WIDTH = 450;
MIN_EINGABE_WIDTH = 191;
procedure THauptform.edtEingabeChange(Sender: TObject);
var Width: Integer;
begin
// Scale
Width := edtEingabe.Canvas.TextWidth(edtEingabe.Text);
if Width > MAX_EINGABE_WIDTH then
Width := MAX_EINGABE_WIDTH
else if Width < MIN_EINGABE_WIDTH then
Width := MIN_EINGABE_WIDTH
edtEingabe.Width := Width;
end;发布于 2010-03-28 01:05:55
您只是在每次文本更改时添加9,长度比8还要高--不管变化如何。您需要将它改为基于长度的函数。
像这样的东西会起作用的:
procedure THauptform.edtEingabeChange(Sender: TObject);
var
len: integer;
additionalWidth: integer;
begin
len := Length(edtEingabe.Text);
if len <=8 then
additionalWidth:=0
else
additionalWidth:=(len-8)*9; //Assuming we need an extra 9 pixels per character after the 8th one
if additionalWidth > 259 then additionalWidth := 259; // maximum - minimum
edtEingabe.Width := 191 + additionalWidth;
Width := OriginalFormWidth + additionalWidth; // You'll need to know what the minimum width of your form is
end;但是,这并不是一个非常好的解决方案--以同样的方式改变所有这些属性是很糟糕的。相反,由于它看起来还在调整窗体的大小,所以可以更改编辑框的Anchors属性,使其保持右侧的边距,并且只调整窗体的大小。
但是,您可能想考虑一下,这是否真的是一个好主意。为什么不让输入字段只有一个大小呢?一般来说,如果窗口不自行调整大小,情况会更好。
发布于 2010-03-28 17:04:00
做这样的事:
procedure THauptform.edtEingabeChange(Sender: TObject);
var
Edit:TEdit;
begin
Edit := TEdit(Sender);
Edit.Width := Canvas.TextWidth(Edit.Text+' |')+
Edit.Padding.Left+
Edit.Padding.Right;
end;https://stackoverflow.com/questions/2531501
复制相似问题