加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:08:11 所属栏目:大数据 来源:网络整理
导读:我想在应用程序启动之前获取字符串的文本宽度.一切正常,直到Application.MainForm画布呈现.问题是,当我尝试在应用程序的OnCreate事件中动态创建TOrdinarium.主窗体“Canvas不允许绘图”出现错误. (Application.MainForm是nil ….).我尝试了几种方式动态创建C
我想在应用程序启动之前获取字符串的文本宽度.一切正常,直到Application.MainForm画布呈现.问题是,当我尝试在应用程序的OnCreate事件中动态创建TOrdinarium.主窗体“Canvas不允许绘图”出现错误. (Application.MainForm是nil ….).我尝试了几种方式动态创建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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读