2017-01-24 9 views
0

私はTScrollBoxといくつかのTImageのコンポーネントとDelphiのフォームを持っており、それが空になっていますときに、フォームのスクロールボックスがリセットされていない...それは、新たな画像が箱にスローされるたびに成長しているように見えます。TScrollBoxでイメージを削除した後にスクロールをリセットするにはどうすればよいですか?

私は、画像を削除した後、次のいずれかがロードされる前に、スクロールボックスのサイズにスクロール範囲/サイズをリセットしたいと思います。それを行う方法はありますか?

私は、スクロールバーを非表示に設定すると、次のファイルをロードした後に戻ってそれらを回してみた、それが動作するようには思えません。どんな助けでも大歓迎です。

根本原因:だから、画像がビットマップが解放されたときにイメージがTScrollBoxに位置していた場所の中央にその左上隅を動かすことが表示されます。

+0

は(/ヘルプ/ MCVE)[、最小完全、かつ検証例]を入力してください。あなたのコードとDFMの外観はどうですか? 'TForm.AutoSize'がtrueまたはfalseに設定されていますか? 'TScrollBox.AutoSize'? 'TImage.AutoSize'?実際にScrollBoxのサイズを正しく変更していないように思えます。そのため、コンテンツ領域は期待通りに縮小していません。 –

+0

ScrollBox1.AutoScroll = true; ScrollBox1.AutoSize:= false; image1.AutoSize:= True;私はこの問題を解決したかもしれない。明日これを検証するだろう。 –

+0

@JosephPoirier、あなたの最新の編集をロールバックし、別の答えを入れてください。 –

答えて

0

根本原因:だから、画像がビットマップが解放されたときにイメージがTScrollBoxに位置していた場所の中央にその左上隅を動かすことが表示されます。

解像度:スクロールバーをオフにして画像を解放した後、先頭に画像を移動しますが、画像オブジェクトに新しいイメージをロードする前に。

コードサンプル..

try 
    // Reset existing images 
    if assigned(Image1.Picture.Bitmap) then 
    Image1.Picture.Bitmap.FreeImage; // using .Free eventually caused memory issues 
    // .Free should only be in Finally code section for process objects 
    // or on Destroy event for program objects 

    Image1.Picture.Graphic := TBitmap.Create; 
    Image1.Picture.Bitmap := TBitmap.Create; 

    // reset Bitmap 
    if assigned(bitmap123) then 
    bitmap123.FreeImage; 

    bitmap123 := TBitmap.Create; 

finally 
    ScrollBox1.HorzScrollBar.Visible := false; 
    ScrollBox1.VertScrollBar.Visible := false; 
    Image1.Top := 0; Image1.Left := 0; 
    Image1.Refresh; 
    Application.ProcessMessages; 

    ScrollBox1.HorzScrollBar.Visible := true; 
    ScrollBox1.VertScrollBar.Visible := true; 
    ScrollBox1.Refresh; 

end; 
// now images can be loaded 
// and they will appear in the top-left corner of the scrollbox every time. 
0

は、私はあなたの事がどのように見えるかわからないが、ここで私はあなたが見てい示唆するものである:

  • くださいScrollBox1.AutoSize:
  • 水平のRangeプロパティを確認/ = TRUEを垂直スクロールバー。
  • ScrollBoxに実際に何かが存在しないことを確認してください。

また、スクロールバー全体を再作成することもできますが、これはあなたがしたいことではないと思います。

関連する問題