我正在工作跨平台 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;
如果我使用计时器paintbox正在为每个图像包更新
procedure TScreenViewFrm.Timer1Timer(Sender: TObject);
begin
pbScreenView.Repaint;
end;
我必须使用 Timer 在我的代码上重新绘制,但我不想要这个并且工作不稳定。
***注意:当我调整 ScreenView 表单的大小时,Paint 框正在更新。为什么?
你有什么主意吗?
示例捕获