在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))@我小时候的一位老师科比克说,有时候你会认为你是对的,但只有当比你更有经验的人来的时候,你才知道;在这种情况下,我认为更有经验的人是你。我将删除该部分