【问题标题】:How do I reset the scrolling after removing images in TScrollBox?删除 TScrollBox 中的图像后如何重置滚动?
【发布时间】:2017-01-24 03:36:02
【问题描述】:

我有一个带有 TScrollBox 和一些 TImage 组件的 Delphi 表单,并且表单的滚动框在清空时不会重置...每次在框中抛出新图像时它似乎都在增长。

我想在删除图像后,在加载下一个图像之前将滚动范围/大小重置为滚动框大小。有没有办法做到这一点?

我尝试将滚动条设置为不可见,并在下一个文件加载后将其重新打开,但这似乎不起作用。非常感谢任何帮助。

根本原因:所以当位图被释放时,图像的左上角似乎移动到了图像在 TScrollBox 中的位置。

【问题讨论】:

  • 请提供Minimal, Complete, and Verifiable example。你的代码和 DFM 是什么样的?您是否将TForm.AutoSize 设置为真或假? TScrollBox.AutoSize? TImage.AutoSize?听起来您实际上并没有正确调整 ScrollBox 的大小,因此它的内容区域并没有像您期望的那样缩小。
  • ScrollBox1.AutoScroll = true; ScrollBox1.AutoSize := false; image1.AutoSize := 真;我可能已经解决了这个问题..明天会验证这一点。
  • @JosephPoirier,请回滚您的最新编辑并输入单独的答案。
  • 完成。答案贴在下面

标签: delphi resize timage tscrollbox


【解决方案1】:

根本原因:所以当位图被释放时,图像的左上角似乎移动到了图像在 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.

【讨论】:

    【解决方案2】:

    我不确定你的东西看起来如何,但我建议你看看:

    • 使 ScrollBox1.AutoSize := TRUE
    • 检查水平/垂直滚动条的 Range 属性。
    • 确保 ScrollBox 上实际上没有任何东西导致此问题。

    或者,您也可以重新创建整个滚动条,但我认为这不是您想要做的。

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 2014-04-11
      • 1970-01-01
      • 2020-02-17
      • 2021-03-01
      相关资源
      最近更新 更多