-1

私はクロスプラットフォームの vnc プロジェクトに取り組んでいます。Windows側はVCLでOK。しかし、同じコードで 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;

コードの再描画にタイマーを使用する必要がありますが、これは望ましくなく、安定して動作しません。

***注: ScreenView フォームのサイズを変更すると、ペイント ボックスが更新されます。なんで?

何か考えはありますか?

例のキャプチャ

https://gyazo.com/f880c2f172b0106122ea711389bf1659

4

2 に答える 2