当我从此类开发自己的组件时遇到了这个问题:TImage
我使用了以下代码:
procedure Paint;override;
begin
inherited
canvas.TextOut(5,5,'Hi')
end;
Run Code Online (Sandbox Code Playgroud)
提前致谢
因为TImage是TGraphicControl的后代,并且Paint程序在WMPaint(windows WM_PAINT)消息内处理。因此,当您在TImage画布上绘制(在绘制过程中)时,Windows将发送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;
Run Code Online (Sandbox Code Playgroud)
由于Windows.ExtTextOut是API调用,因此不会发送WM_PAINT消息,例如...
canvas.TextOut(5,5,'Hi')
Run Code Online (Sandbox Code Playgroud)
...内部调用FreeImage过程。