私はクロスプラットフォームの 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 フォームのサイズを変更すると、ペイント ボックスが更新されます。なんで?
何か考えはありますか?
例のキャプチャ