gpt4 book ai didi

delphi - 确定TLabel的宽度

转载 作者:行者123 更新时间:2023-12-03 19:51:00 28 4
gpt4 key购买 nike

你好堆栈溢出用户

我有一个带有TGroupBoxTLabel。我要使用此TLabel显示候选人的姓氏和名字。有些候选人有一个以上的名字,有时是三个,而当出现这种情况时,TLabel并不总是适合我的TGroupBox。发生这种情况时,我只显示姓氏,名字,其余的仅显示首字母。

为了做到这一点,我需要知道TLabel是否适合将值分配给它。换句话说,在实际将值分配给其TLabel属性之前,我需要确定Caption的宽度,因为这对于显示变量数据来说是不好的编程。

有什么建议?

最佳答案

在VCL中,TLabel使用Win32 API DrawText()函数计算文本宽度,使用GetDC()获取屏幕的HDC,然后使用SelectObject()将其当前的Font选择到该HDC 。您将必须在自己的代码中执行相同的操作,例如:

// set Label1.AutoSize to False and Label1.Width to
// the max width your UI will accept the Label1 to be...

function WillFitInLabel(Label: TLabel; const S: String): Boolean;
var
R: TRect;
C: TCanvas;
DC: HDC;
begin
R := Rect(0, 0, Label.Width, 0);
C := TCanvas.Create;
try
DC := GetDC(0);
try
C.Handle := DC;
try
C.Font := Label1.Font;
Windows.DrawText(DC, PChar(S), Length(S), R, DT_SINGLELINE or DT_CALCRECT);
finally
C.Handle := 0;
end;
finally
ReleaseDC(0, DC);
end;
finally
C.Free;
end;
Result := (R.Width <= Label.Width);
end;

var
Names: String;
begin
Names := ...;
if WillFitInLabel(Label1, Names) then
Label1.Caption := Names
else
...
end;

关于delphi - 确定TLabel的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865154/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com