4

Delphi 2009で発生した問題をTImage.Canvas、次の再現可能なケースに絞り込みました。

与えられた: フォーム、TImageTLabelおよびそのTButton上。はTImage4 つのエッジすべてに固定されているため、フォームのサイズを変更すると のサイズも変更されTImageます。私ができるようにしたいのはImage1、サイズ変更後に利用できる最大の領域を描画することです。したがって、私のテストケースでは、ボタンのOnClickハンドラー に次のコードがあります。


procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption:= IntToStr (Image1.Width)+' x '+IntToStr(Image1.Height);
  Image1.Canvas.Pen.Color:= 0;
  Image1.Canvas.Rectangle(0,0,Image1.Width, Image1.Height);
end;
Image1.Widthフォームのサイズを.Height変更すると、期待どおりに変更される ことがわかりますが、サイズ変更されたフォームが元のフォームよりも大きい場合に描画される四角形は不完全になり、以前と同じ領域にのみ描画されます。

サイズ変更された領域全体を使用するにはどうすればよいですか?

価値があるのは、私が遊んだ元の問題でImage1.Stretch、サイズ変更時により多くの領域を使用できますが、図面が歪んでしまいます(望ましくありません)。も使用する場合はImage1.Proportional、より良いですが、使用可能な領域をすべて使用することはできません。Image1.AutoSize私にとっても何の役にも立たないようです。

どんな助けでも感謝します。

4

2 に答える 2

8

フォームに OnResize イベントを追加します。

procedure TForm1.FormResize(Sender: TObject);
begin
  Image1.Picture.Bitmap.Width := Image1.Width;
  Image1.Picture.Bitmap.Height := Image1.Height;
end;

また、ファイルなどから画像を表示するのではなく、コンポーネントを使用して描画する場合は、TImage ではなく TPaintBox を使用することを検討してください。

于 2009-10-20T09:23:21.633 に答える
3

Image1.Picture.Width/Height または Image1.Picture.Bitmap.Width/Height も調整する必要があるかもしれません。

于 2009-10-20T09:18:00.597 に答える