gpt4 book ai didi

delphi - 如何获取字符串的 TextWidth(没有 Canvas)?

转载 作者:行者123 更新时间:2023-12-03 14:35:25 27 4
gpt4 key购买 nike

我想在应用程序启动之前获取字符串的文本宽度。一切正常,直到出现 Application.MainForm Canvas 。问题是,当我尝试在应用程序的 OnCreate 事件中动态创建 TOrdinarium 时。主窗体出现“ Canvas 不允许绘图”错误。 (Application.MainForm 为零......)。我尝试了几种动态创建 Canvas 的方法(其中之一写在下面),但如果不附加到父控件,它就无法测量文本大小。

有办法让它以某种方式工作吗?

谢谢

我尝试过这个:

  TOrdinarium = class (TCustomControl)
private
function GetVirtualWidth:integer;
end;

constructor TOrdinarium.Create(AOwner:TComponent);
begin
inherited;
Width:=GetVirtualWidth;
end;

function TOrdinarium.GetVirtualWidth:integer;
var ACanvas : TControlCanvas;
begin
ACanvas := TControlCanvas.Create;
TControlCanvas(ACanvas).Control := Application.MainForm;
ACanvas.Font.Assign(Font);

result:=ACanvas.TextWidth('0');

ACanvas.Free;
end;

最佳答案

这有效:

procedure TForm1.FormCreate(Sender: TObject);
var
c: TBitmap;
begin
c := TBitmap.Create;
try
c.Canvas.Font.Assign(self.Font);
Caption := IntToStr(c.Canvas.TextWidth('My String'));
finally
c.Free;
end;
end;

关于delphi - 如何获取字符串的 TextWidth(没有 Canvas)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548132/

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