Delphi 试着画出一幅图画

Delphi 试着画出一幅图画,delphi,timage,Delphi,Timage,我用DelphiXe7编写了一个简单的程序;它有一个TImage和一个部分位于TImage上方的TPaintBox。在FormPaint过程中,我调用BringToFront,然后绘制一个填充矩形。矩形显示在图像下方 procedure TForm1.FormPaint(Sender: TObject); begin with paintbox1 do begin BringToFront; canvas.Rectangle(0,0,width-1,height-1)

我用DelphiXe7编写了一个简单的程序;它有一个TImage和一个部分位于TImage上方的TPaintBox。在FormPaint过程中,我调用BringToFront,然后绘制一个填充矩形。矩形显示在图像下方

procedure TForm1.FormPaint(Sender: TObject);
begin
 with paintbox1 do
   begin
     BringToFront;
     canvas.Rectangle(0,0,width-1,height-1);
   end;
end;
这是程序窗口的图像:

我希望矩形在图像上方。
我做错了什么

您没有正确使用PaintBox。PaintBox有自己的绘图事件。您应该使用TPaintBox.OnPaint而不是TForm.OnPaint,结果将与您编写的一样

你也可以直接在这幅画上画画。在本例中,使用了事件TForm.OnPaint

您也可以在图片更改后(例如加载后)直接在图像上绘制。如果使用TBitmap图形,它会起作用

procedure TForm1.button1click(Sender: TObject);
begin
  image1.LoadFromFile('c:\temp\1.bmp')
  image1.canvas.Rectangle(0,0,100,100);
end;

您没有正确使用PaintBox。PaintBox有自己的绘图事件。您应该使用TPaintBox.OnPaint而不是TForm.OnPaint,结果将与您编写的一样

你也可以直接在这幅画上画画。在本例中,使用了事件TForm.OnPaint

您也可以在图片更改后(例如加载后)直接在图像上绘制。如果使用TBitmap图形,它会起作用

procedure TForm1.button1click(Sender: TObject);
begin
  image1.LoadFromFile('c:\temp\1.bmp')
  image1.canvas.Rectangle(0,0,100,100);
end;

非常感谢!愚蠢的错误TForm.OnPaint事件也是在TImage上绘制的错误位置。TImage持有一张TPicture并处理自己的绘图事件来渲染该图片。我同意使用TForm.OnPaint是错误的。但TImage和TPicture没有绘画事件。我的答案是正确的。非常感谢!愚蠢的错误TForm.OnPaint事件也是在TImage上绘制的错误位置。TImage持有一张TPicture并处理自己的绘图事件来渲染该图片。我同意使用TForm.OnPaint是错误的。但TImage和TPicture没有绘画事件。我的回答是正确的。