【问题标题】:trying to draw over a timage试图在图像上绘制
【发布时间】:2020-08-01 14:56:10
【问题描述】:

我写了一个简单的程序(使用Delphi XE7);它有一个 TImage 和一个 TPaintBox(部分在 Timage 上)。在 FormPaint 过程中,我调用“BringToFront”,然后绘制一个(填充的)矩形。矩形出现在图像的下方

procedure TForm1.FormPaint(Sender: TObject);
begin
 with paintbox1 do
   begin
     BringToFront;
     canvas.Rectangle(0,0,width-1,height-1);
   end;
end;

这是程序窗口的图像:

我希望矩形在图像之上。 我究竟做错了什么? :)

【问题讨论】:

    标签: delphi timage


    【解决方案1】:

    您没有正确使用 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是错误的。但是TImageTPicture 没有绘制事件。我正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2012-11-24
    相关资源
    最近更新 更多