delphi - 为什么在我使用 Canvas 时重写的 Paint 过程会一次又一次地调用自己?

标签 delphi

当我从这个类开发自己的组件时遇到了这个问题:TImage 我使用了这段代码:

procedure Paint;override;
begin
inherited
canvas.TextOut(5,5,'Hi')
end;

提前致谢

最佳答案

因为 TImage 是 TGraphicControl 的后代,并且 Paint 过程在内部处理 WMPaint (windows WM_PAINT) 消息。因此,当您在 TImage Canvas 上绘制(内部绘制过程)时,窗口会发送 WM_PAINT 消息并再次调用 Paint。

编辑: 一种方法是...

procedure TMyImage.Paint;
const
  Text = 'Hi';
begin
  inherited;
  Windows.ExtTextOut(Canvas.Handle, 5, 5, 0, nil, PChar(Text), Length(Text), nil);
end;

因为 Windows.ExtTextOut 是 API 调用,不会像...一样发送 WM_PAINT 消息

canvas.TextOut(5,5,'Hi') 

...内部调用 FreeImage 程序。

关于delphi - 为什么在我使用 Canvas 时重写的 Paint 过程会一次又一次地调用自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3593868/

相关文章:

delphi - SQLite 和 DISQLite 如何比较大型简单数据库?

delphi - 简单的 Delphi DBcharting

Delphi - 检测 Int64 溢出错误

Delphi 2007帮助集成

delphi - 将数据库复制到受限客户端

delphi - 大于 2 GB 的文件上出现 TReadOnlyCachedFileStream 错误

delphi - 使用主键移动到 TFDQuery 中的特定记录

delphi - 增加一个指针没有按照我计划的方式编译

delphi - Delphi 2007 中的 HelpInsight 文档

delphi - 如何确定接口(interface)的实现对象的类型