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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |