【发布时间】:2015-04-15 22:12:38
【问题描述】:
我有一个表单,我抓取了一个位图以发送到一个小型嵌入式 TFT 显示器。然后,我将显示器中的触摸事件注入表单以激活控件。除非表单不可见,否则这一切都很好。如果它从可见桌面移出、最小化或关闭,它将不会获得绘制事件并且永远不会更新。
有没有办法强制画布重绘自己可见或不可见? 所有像重绘这样明显的东西都不起作用。
【问题讨论】:
我有一个表单,我抓取了一个位图以发送到一个小型嵌入式 TFT 显示器。然后,我将显示器中的触摸事件注入表单以激活控件。除非表单不可见,否则这一切都很好。如果它从可见桌面移出、最小化或关闭,它将不会获得绘制事件并且永远不会更新。
有没有办法强制画布重绘自己可见或不可见? 所有像重绘这样明显的东西都不起作用。
【问题讨论】:
是的,您可以在表单上使用PaintTo 方法:
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.Width := Form2.Width;
Bitmap.Height := Form2.Height;
Form2.PaintTo(Bitmap.Canvas, 0, 0);
Image1.Picture.Assign(Bitmap);
Bitmap.Free;
end;
在我的小例子中,我创建了一个包含Form1 和Form2 两种形式的项目。在 Form2 上,我放置了一个标签和计时器。
这是Form2的代码
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Label1.Caption := FloatToStr(now);
end;
而且我炒得很好。
【讨论】: