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