2010-07-13 59 views
0

我有问题,调整大小TPaintBox并在其上绘制:德尔福 - TPaintBox - 调整

在我的表格(命名FMain)我放弃了TPaintBox(名为DisplayImage),其中我试图调整为表被调整大小。

要做到这一点,我写了FMain的onResize受到()方法(我证实,它被称为正确),其中我尝试调整DisplayImage:

procedure TFMain.FormResize(Sender: TObject); 
begin 
    DisplayImage.Width := FMain.ClientWidth; 
    DisplayImage.Height := FMain.ClientHeight; 

    DisplayImage.Canvas.Brush.Color := clGreen; 
    DisplayImage.Canvas.Brush.Style := bsSolid; 
    DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height); 
end; 

恕我直言,过去的代码应该画一个全在整个图像上呈现绿色矩形,使其始终呈绿色。相反,我得到一个灰色的图像(就像德尔福的标准bg颜色),每隔一段时间,在调整大小的瞬间,绿色图像闪烁起来。

我错过了什么,是否有一些隐藏的组件我需要更改大小后更新?

谢谢你在前进,

暴雪

回答

7

首先,而不是做

DisplayImage.Width := FMain.ClientWidth; 
DisplayImage.Height := FMain.ClientHeight; 
每个调整

,只需将颜料盒的Align := alClient

其次,提请颜料盒,使用OnPaint事件油漆盒:

procedure TFMain.DisplayImagePaint(Sender: TObject); 
begin 
    DisplayImage.Canvas.Brush.Color := clGreen; 
    DisplayImage.Canvas.Brush.Style := bsSolid; 
    DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height) 
end; 
+0

谢谢,工作就像一个魅力:) 但无论如何,应该可以借鉴的画布,或者OnPaint事件是否会覆盖我的绘图? – 2010-07-13 21:21:11

+1

您*正在绘制到画布上。你不需要*做'OnPaint'(即使这是个好主意) - 你可以在Button1Click或类似的东西上做。然而,调整形式是一个相当微妙的时间做绘画。可能有一个'WM_ERASEBKGND'或类似的东西来解除你的绘画。 – 2010-07-13 21:27:59

+0

@ThE - (除了Andreas的评论)这样想:OnPaint在PaintBox需要绘画时被调用,但如果你不在OnPaint中绘制,你的绘图将被f.i.当你在窗体前放置另一个窗口时。文档中有一个显示不同之处的示例:http://docwiki.embarcadero.com/CodeSamples/en/OnPaint_%28Delphi%29 – 2010-07-14 00:37:56