关于API GetTextExtentPoint

dyf2001 2003-02-19 10:08:20
发现有时调用showMessage、messageDlg程序停止相应,一开始没有在意。后来跟踪一下发现运行到Dialogs.pas单元GetAveCharSize(Canvas: TCanvas): TPoint函数的如下语句
GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result))
时程序停止响应,这时Result的x、y中有一个是负数,于是在前面添加:
Result.X:=10; Result.Y:=10; // dyf 2003-02-18 我添加的
结果还是一样。

事情起因是我在数据模块中调用MainForm.ProgressBar用于显示进度,如果注释调这些语句则没有问题。调用过程如下:
function TBackup.RestoreAll: boolean;
var
i:integer;
begin
ImportForm.cbbLog.Clear;
MainForm.ProgressBar.Visible:=True;
for i:=0 to Ftables.Count-1 do begin
Result:=Restore(TTableBackup(Ftables.Objects[i]));
MainForm.ProgressBar.Position:=(i+1)*100 div Ftables.Count;
if not Result then Break;
end;
MainForm.ProgressBar.Visible:=False;
end;

Dialogs.pas单元GetAveCharSize函数如下,用于获得字符width\height
function GetAveCharSize(Canvas: TCanvas): TPoint;
var
I: Integer;
Buffer: array[0..51] of Char;
begin
Result.X:=10; Result.Y:=10; // dyf 2003-02-18 我添加的
for I := 0 to 25 do
Buffer[I] := Chr(I + Ord('A'));
for I := 0 to 25 do
Buffer[I + 26] := Chr(I + Ord('a'));
GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
Result.X := Result.X div 52;
end;
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyf2001 2003-04-01
  • 打赏
  • 举报
回复
问了好久了竟然无人问津,郁闷!!
dyf2001 2003-02-20
  • 打赏
  • 举报
回复
不是那么难吧!

up
dyf2001 2003-02-19
  • 打赏
  • 举报
回复
没有人遇到过吗?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧