我有一个带有 TScrollBox 和一些 TImage 组件的 Delphi 表单,并且表单的滚动框在清空时不会重置......每次在框中抛出新图像时它似乎都在增长。
我想在删除图像后,在加载下一个图像之前将滚动范围/大小重置为滚动框大小。有没有办法做到这一点?
我尝试将滚动条设置为不可见,并在下一个文件加载后重新打开它们,但这似乎不起作用。非常感谢任何帮助。
根本原因:因此,当位图被释放时,图像似乎将其左上角移动到图像在 TScrollBox 中所在位置的中心。
我有一个带有 TScrollBox 和一些 TImage 组件的 Delphi 表单,并且表单的滚动框在清空时不会重置......每次在框中抛出新图像时它似乎都在增长。
我想在删除图像后,在加载下一个图像之前将滚动范围/大小重置为滚动框大小。有没有办法做到这一点?
我尝试将滚动条设置为不可见,并在下一个文件加载后重新打开它们,但这似乎不起作用。非常感谢任何帮助。
根本原因:因此,当位图被释放时,图像似乎将其左上角移动到图像在 TScrollBox 中所在位置的中心。
根本原因:因此,当释放位图时,图像的左上角似乎移动到了图像在 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.
我不确定你的东西看起来如何,但我建议你看看:
或者,您也可以重新创建整个滚动条,但我认为这不是您想要做的。