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也无效,有什么方法吗? 展开
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也无效,有什么方法吗? 展开
2个回答
展开全部
在用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
做绘图工具,应该是当前绘图层,背景层,挺麻烦的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询