在delphi 7中清除timage.canvas
如何在更改输入大小时清除在delphi 7中清除timage.canvas,delphi,delphi-7,Delphi,Delphi 7,如何在更改输入大小时清除timagecanvas以避免重复图像?为什么nil命令不起作用? 这是我的密码 begin image1.Canvas := nil; image1.Canvas.Pen.Color := clRed; image1.Canvas.Brush.Color := clBlue; image1.canvas.rectangle(10,10,vwpj,vwlb); end; 您不能将Nil或任何值指定给Canvas,Canvas是只读属
timage
canvas以避免重复图像?为什么nil命令不起作用?
这是我的密码
begin
image1.Canvas := nil;
image1.Canvas.Pen.Color := clRed;
image1.Canvas.Brush.Color := clBlue;
image1.canvas.rectangle(10,10,vwpj,vwlb);
end;
您不能将
Nil
或任何值指定给Canvas
,Canvas
是只读属性,因此需要删除第一行,然后在TImage
画布上绘制:
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clBlue;
Image1.canvas.rectangle(0,0,Image1.Height,Image1.Width);
编辑:
每次在画布上绘制图像时,必须将图像设置为默认值:
程序:
Procedure TForm1.Default(Image: TImage);
begin
Image.Canvas.Pen.Color := clBtnFace;
Image.Canvas.Brush.Color := clBtnFace;
Image.Canvas.FillRect(Rect(0,0,Image.Height,Image.Width));
end;
然后称之为:
procedure TForm1.Button1Click(Sender: TObject);
begin
Default(Image1);
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clBlue;
Image1.canvas.rectangle(0,0,Image1.Height,Image1.Width);
end;
根据您在之前的多次编辑中所写并试图解释的内容。 这是解决你问题的可能办法 要求:
var
Xorigin,Yorigin,vwpj,vwlb:integer;
....
begin
vwpj := strtoint(vwpjEdit.text);
vwlb := strtoint(vwlbEdit.text);
Xorigin := strtoint(XoriginEdit.Text);
Yorigin := strtoint(YoriginEdit.Text);
// You have to wipe the canvas with a base color,
image1.Canvas.Brush.Color := clwhite;
image1.Canvas.FillRect(rect(0,0,image1.Width,image1.height));
image1.Canvas.Pen.Color := clRed;
image1.Canvas.Brush.Color := clBlue;
image1.Canvas.rectangle(Xorigin,Yorigin,vwlb,vwpj);
end;
TEdit
组件t按钮
TImage
var
Xorigin,Yorigin,vwpj,vwlb:integer;
....
begin
vwpj := strtoint(vwpjEdit.text);
vwlb := strtoint(vwlbEdit.text);
Xorigin := strtoint(XoriginEdit.Text);
Yorigin := strtoint(YoriginEdit.Text);
// You have to wipe the canvas with a base color,
image1.Canvas.Brush.Color := clwhite;
image1.Canvas.FillRect(rect(0,0,image1.Width,image1.height));
image1.Canvas.Pen.Color := clRed;
image1.Canvas.Brush.Color := clBlue;
image1.Canvas.rectangle(Xorigin,Yorigin,vwlb,vwpj);
end;
说明:我知道您想在TImage
的Canvas
属性上绘制一个矩形。每次调整矩形大小时,您都希望清除画布
(您通过将nil
指定给画布来暗示这一点,考虑到画布
是只读属性,这是错误的)
现在,上面的代码通过使用Fillrect()
方法将画布填充为基色(我选择了clwhite
)
因此,您需要了解,没有清除图像这样的事情,或者您删除它(使用您所说的free
命令),它将消失,如果您想再次在它上绘制,您需要创建它。
第二个选项是用背景色(我选择的基色clwhite
)填充它,或者作为第三个选项,也可以调整图像的大小
重要的是,只要图像还在画布上,你在画布上画的东西就会保留下来
上述代码的结果
图像总是包含某些内容。如果您希望填充背景色。这样做。不要把你的全部代码都推给我们。正是我们需要看到的。当大小改变时,将在画布上的旧矩形后面创建新矩形。求你了,我必须写多少正确的代码?@nas他没有改变任何东西的大小。他在特定的坐标处画了一个矩形。@rendra我很惊讶这个能编译出来。您应该无法分配到画布。删除该代码。这是编辑image1之前的我的代码。Canvas:=nil;image1.Canvas.Pen.Color:=clRed;image1.Canvas.Brush.Color:=clBlue;图像1.画布.矩形(10,10,vwpj,vwlb);当使用tedit更改矩形的宽度或高度时,为什么要在旧矩形后面创建新矩形,而不仅仅是先创建一个矩形的宽度和高度?@rendra您必须先将其设置为默认值(clBtnFace)@伦德拉:你能定义一下清除图像是什么意思吗?我想你刚刚颠倒了干净部分的高度和宽度。Image.Canvas.FillRect(Rect(0,0,Image.Height,Image.Width));必须是Image.Canvas.FillRect(Rect(0,0,Image.Width,Image.Height))@我小时候的一位老师科比克说,有时候你会认为你是对的,但只有当比你更有经验的人来的时候,你才知道;在这种情况下,我认为更有经验的人是你。我将删除该部分