【发布时间】:2020-12-08 15:28:09
【问题描述】:
我正在工作跨平台 vnc 项目。 Windows 端可以使用 VCL。但是当我使用相同代码的 FMX 平台时,我遇到了问题。
procedure TFrmScreenView.pbViewPaint(Sender: TObject);
begin
Client.DrawBitmap(pbView.Canvas);
end;
对于来自远程计算机的每个新图像包,此代码都会更新到 Paintbox Canvas。这在 VCL 上工作没问题。但是当我在 FMX 图像重绘上执行这个项目时不起作用。它只是获取第一张图片,并没有更新。
procedure TFrmScreenView.pbViewPaint(Sender: TObject; Canvas: TCanvas);
begin
Client.DrawBitmap(pbView.Canvas);
end;
客户代码:
procedure TClient.DrawBitmap(Canvas: TCanvas);
begin
if assigned(Bitmap) then // Bitmap is global variable
begin
Canvas.DrawBitmap(Bitmap,RectF(0,0,Bitmap.Width, Bitmap.Height),
RectF(0,0,Bitmap.Width, Bitmap.Height),1,True);
end;
end;
如果我使用计时器,画框会为每个图像包更新
procedure TScreenViewFrm.Timer1Timer(Sender: TObject);
begin
pbScreenView.Repaint;
end;
我必须使用 Timer 来重绘我的代码,但我不想要这个并且工作不稳定。
***注意:当我调整 ScreenView 表单的大小时,Paint 框正在更新。为什么?
你有什么想法吗?
示例捕获
【问题讨论】:
-
请出示您收到数据包后的代码。什么是
TScreenView,什么是Client -
嘿汤姆,我编辑了我的代码。 ScreenView 是 FMX 表单。 Client 是一个用于解析某些进程的类。
标签: firemonkey repaint paintbox