Как сбросить прокрутку после удаления изображений в TScrollBox?
У меня есть форма Delphi с TScrollBox и некоторыми компонентами TImage, и поле прокрутки формы не сбрасывается, когда оно очищается... оно увеличивается каждый раз, когда новое изображение выбрасывается в поле.
Я хотел бы сбросить диапазон / размер прокрутки до размера поля прокрутки после удаления изображения перед загрузкой следующего. Есть способ сделать это?
Я попытался установить полосы прокрутки невидимыми и включить их снова после загрузки следующего файла, и это, похоже, не работает. Любая помощь с благодарностью.
Основная причина. Получается, что при перемещении растрового изображения изображение перемещается в верхнем левом углу к центру, в котором оно находилось в TScrollBox.
2 ответа
Основная причина. Получается, что при перемещении растрового изображения изображение перемещается в верхнем левом углу к центру, в котором оно находилось в 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.
Я не уверен, как ваши вещи выглядят, но вот что я предлагаю вам посмотреть:
- Сделайте ScrollBox1.AutoSize:= TRUE
- Проверьте свойство Range горизонтальной / вертикальной полосы прокрутки.
- Убедитесь, что на ScrollBox нет никаких причин, вызывающих это.
В качестве альтернативы вы можете просто воссоздать всю полосу прокрутки, но я не думаю, что это то, что вы хотите сделать.