尝试绘制图像
trying to draw over a timage
我写了一个简单的程序(使用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;
这是程序的图片window:
我希望矩形 在 图像上方。
我究竟做错了什么? :)
您没有正确使用 PaintBox。 PaintBox 有自己的绘图事件。您应该使用 TPaintBox.OnPaint
而不是 TForm.OnPaint
,结果将如您所写。
也可以直接在图片上画。在这种情况下,使用事件 TForm.OnPaint
.
您也可以在图像发生变化后(例如加载后)直接在图像上绘制。如果使用 TBitmap 图形,它可以工作。
procedure TForm1.button1click(Sender: TObject);
begin
image1.LoadFromFile('c:\temp.bmp')
image1.canvas.Rectangle(0,0,100,100);
end;
我写了一个简单的程序(使用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;
这是程序的图片window:
我希望矩形 在 图像上方。 我究竟做错了什么? :)
您没有正确使用 PaintBox。 PaintBox 有自己的绘图事件。您应该使用 TPaintBox.OnPaint
而不是 TForm.OnPaint
,结果将如您所写。
也可以直接在图片上画。在这种情况下,使用事件 .TForm.OnPaint
您也可以在图像发生变化后(例如加载后)直接在图像上绘制。如果使用 TBitmap 图形,它可以工作。
procedure TForm1.button1click(Sender: TObject);
begin
image1.LoadFromFile('c:\temp.bmp')
image1.canvas.Rectangle(0,0,100,100);
end;