2017-11-02 14 views
-3

こんにちは私は以下のコードを使って、今はブロブから入力されたTimageから画像を追加します。私の問題は、このコードは画像をペイントボックスに追加するのではなく、フォームに追加することです。Delphi 10 TPaintboxコードは、paintboxの代わりにフォームにビットマップを配置します

var 
    RectangleCanvas, RectanglePicture: TRectF; 
    BlobStream: TStream; 
begin 
     BlobStream := qrypunchsheetitemphoto.CreateBlobStream(qrypunchsheetitemphoto.FieldByName('Photo'),TBlobStreamMode.bmRead); 
     imgviewimage.Bitmap.LoadFromStream(BlobStream); 
     fdrawbox:= TMyPaintBox.Create(panel1); 
     fdrawbox.Canvas.BeginScene; 
     fdrawbox.BitmapStamp := imgviewimage.Bitmap; 
     fdrawbox.Height := imgviewimage.Bitmap.Height; 
     fdrawbox.Width := imgviewimage.Bitmap.Width; 
     RectangleCanvas := RectF(10, 10, imgviewimage.Bitmap.Width, imgviewimage.Bitmap.Height); 
     RectanglePicture := RectF(10, 10, imgviewimage.Bitmap.Width, imgviewimage.Bitmap.Height); 
      fdrawbox.Canvas.DrawBitmap(imgviewimage.Bitmap, RectangleCanvas , RectanglePicture, 1); 
      fdrawbox.Canvas.EndScene; 
      fdrawbox.BringToFront; 
      BlobStream.Free; 
      TabControl1.ActiveTab := tabViewImage; 
    end; 
end; 
+0

ようこそ。そのクラスが 'TMyPaintBox'と呼ばれるので、あなたが使用している' TPaintBox'は普通のものではないようです。それはどう違うの?私はまたあなたが何を意味するのかを理解していません。... ...画像をペイントボックスに追加しません。*。これは 'TMyPaintBox'に追加した機能に関連していますか? 'TPaintBox'は画像を保持する能力を持っていません。まだ文書を読んだことがありますか? * ... TPaintBoxはキャンバスに直接画像を描画するアプリケーションが必要です*。あなたは実際の問題が何であるかをよりよく説明する必要があります。 –

+0

ああ、btwは、どのように動作しているのかわからない場合、 'with'文を使用しないでください。これについてのドキュメントもお読みください。 –

+0

こんにちはTmypaintboxは私が見つけて、適応した例でした。私はそれが似ていることを望む。 – Geoff

答えて

0

FMX Paintboxは古いDelphi Paintboxとは異なります。以前は、フォームのどこにでもペイントボックスを置いて描画を開始することができました。結果は、配置したPaintboxの範囲内になります。

FMX Paintboxはそうではなく、私は彼らの推論を理解していません。私はそれがプラットフォーム間の互換性とデバイスがどのようにキャンバス操作を扱うかと関係があると言われてきました。

キャンバス幅を自分で簡単に確認できます。

フォームの幅が640ピクセルで、中央に50 x 50のペイントボックスを配置すると、中央に描画が行われることが予想されます。

自分で確認してください。

ShowMessage(FloatToStr(Paintbox1.Width)); // Result will be 50 

ここでPaintbox1.Canvas.Widthをチェックすると、別の結果が得られます。

ShowMessage(IntoToStr(Paintbox1.Canvas.Width); // Result is 640 

あなたがこれを考慮に入れる必要があり、それに応じてオフセット機能を描くにパラメータを渡します。私は親のクリッピングについていくつかの効果を持っているものを読んだことがあるが、それはうまく動作していないと思う。

TPanelを使用してキャンバスに描画する方法もあります。

+0

こんにちはCraig、 Delphiが、コンポーネントが他のプラットフォーム用に変更されていることを見ている実用的な例を提供してくれれば幸いです。私は以前のすべてのDBのグラフィックスコンポーネントに関する経験はありません。 $ 3000 AUDのためこれはちょっとイライラします、私はTpanelオプションを追求するかもしれません とにかくありがとうと敬具 Geoff – Geoff

+0

@Geoff私たちはオーストラリアのソフトウェアのために多くの方法を支払っています。おそらく(私は思うが)ここ​​のPainBoxを含むデモがあります:[link](http:// sourceforge。net/p/radstudiodemos/code/HEAD /ツリー/ブランチ/ RADStudio_Tokyo /オブジェクト%20Pascal /マルチデバイス%20Samples/User%20Interface/ControlsDesktop) – Craig

関連する問題