delphi canvas 画布大小发生变化 制图不正确

procedureTForm1.BitBtn1Click(Sender:TObject);beginimage1.Height:=200;image1.Width:=20... procedure TForm1.BitBtn1Click(Sender: TObject);beginimage1.Height:=200; image1.Width :=200;image1.Canvas.Ellipse (10,10,image1.Width -10,image1.Height-10);end;
procedure TForm1.BitBtn2Click(Sender: TObject);begin image1.Height:=300; image1.Width :=300; image1.Canvas.Ellipse (10,10,image1.Width -10,image1.Height-10);end;
代码如上
先执行bitbtn1如图

先执行bitbtn2如图

执行bitbtn1后在执行bitbtn2如图

将image的stretch的属性设为TRUE 执行bitbtn1再执行bitbtn2 如图

从执行效果来看 当Image已经绘制过后,再改变其大小,绘图区域将只保留原绘图区域 如图三,若将stretch属性设为TRUE 其绘图也只是原画布的放大,我想要的效果是如图二那样,image变大后,画布也随之变大,repaint也无效,有什么方法吗?
展开
 我来答
zhenxin0603
2013-08-28 · TA获得超过600个赞
知道小有建树答主
回答量:600
采纳率:100%
帮助的人:452万
展开全部
在用Ellipse 前,先用 Fillrect 填充一个整体的白色矩形
更多追问追答
追问
fillrect无效,绘图区域没变化,执行bitbtn1后,再执行bitbtn2后只是抹除原绘图痕迹,效果类似图3
追答
Canvas.Brush.Color := clWhite;
Canvas.FillRect(R);

应该可以的啊,R为{0,0,Image1.Width,Image1.Height}

在绘制之前,先 fillrect
点btn1,则为 fillrect ->btn1里的Ellipse
点btn2时,按你说的,应该是 fillrect->btn1里的Ellipse-->btn2里的Ellipse
做绘图工具,应该是当前绘图层,背景层,挺麻烦的。
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
ea...e@163.com
2013-08-28
知道答主
回答量:3
采纳率:0%
帮助的人:4318
展开全部
软件人员梵蒂冈圣达菲
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式