gpt4 book ai didi

delphi - TImage和TScrollBox的问题

转载 作者:行者123 更新时间:2023-12-03 19:35:52 24 4
gpt4 key购买 nike

我正在与delphi合作。
我有一个滚动框,其中放置了TImage控件。现在,我想将渲染的图像缩放到TImage控件中。因此,我正在使用TCanvas的StretchDraw方法。我的代码是-

   if sbZoom.Down then begin
rct := imgmain.Picture.Bitmap.Canvas.ClipRect;
rct := Rect(rct.Left * 2,rct.Top * 2,rct.Right * 2,rct.Bottom * 2);
imgmain.Picture.Bitmap.Canvas.StretchDraw(rct,imgmain.Picture.Bitmap);
imgmain.Repaint;
end;


它正在正确缩放图像,我的问题是我还希望随图像缩放更改滚动框的大小。
Also explain me parameters of Canvas.StretchDraw method. I am little confused with it.
谢谢。

最佳答案

Uwe Raabe为您提供正确的方法。这就是您的方法行不通的原因:滚动框将显示滚动条并帮助您查看整个控件。在您的情况下,仅当TImage对象变得大于Scrollbox时,它才会显示滚动条。 Scrollbox可能无法了解TImage的内部,因此它并不关心TImage.Picture,而只关心控件。具有AutoSize = False的TImage并不关心它的图片,它的大小始终保持不变。

您的代码将基础位图重新绘制到其自身上。问题是,位图具有固定的Width和Height:如果在位图的区域之外绘画,则基本上会被忽略。当您通过StretchDraw将自己的位图“放大”时(我很惊讶它从一开始就起作用了!),您并没有使位图变大,而不合适的东西被悄悄地剪掉了。如果确实要更改内部位图的大小,则首先需要创建一个新的更大的位图,将放大的图像绘制到新的位图上,然后将该位图分配给TImage。如果这样做,请确保TImage.AutoSize = True。

关于delphi - TImage和TScrollBox的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com