强制 Delphi 表单在其不可见时绘制
Forcing a Delphi form to draw when its not visible
我有一个表单,我可以抓取一个位图发送到一个小型嵌入式 TFT 显示器。然后,我将显示器中的触摸事件注入到表单中以激活控件。除非表格不可见,否则这一切都非常有效。如果它从可见桌面上移开、最小化或关闭,它将不会获得绘制事件并且永远不会更新。
有没有办法强制 canvas 重新绘制自己可见或不可见?
所有明显的东西,比如所谓的重绘都不起作用。
是的,您可以在表单上使用 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;
而且我工作得很好。
我有一个表单,我可以抓取一个位图发送到一个小型嵌入式 TFT 显示器。然后,我将显示器中的触摸事件注入到表单中以激活控件。除非表格不可见,否则这一切都非常有效。如果它从可见桌面上移开、最小化或关闭,它将不会获得绘制事件并且永远不会更新。
有没有办法强制 canvas 重新绘制自己可见或不可见? 所有明显的东西,比如所谓的重绘都不起作用。
是的,您可以在表单上使用 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;
而且我工作得很好。