我编写了一个从 TLabel 派生的新自定义组件。该组件向组件添加了一些自定义绘图,但没有别的。绘制组件后,一切正常。但是当需要重绘时(比如在组件上拖动另一个窗口),“标签部分”可以正常工作,但我的自定义绘图没有正确更新。我基本上是在重写的 Paint 方法中直接绘制到画布上,当需要重绘时,我的代码绘制的画布部分被涂成黑色。似乎没有调用paint方法。我应该怎么做才能得到正确的重绘?
该组件基本上是:
TMyComponent = class(TCustomLabel, IMyInterface)
..
protected
procedure Paint; override;
..
procedure TMyComponent.Paint;
begin
inherited;
MyCustomPaint;
end;
更新,绘画程序:
Position := Point(0,0);
Radius := 15;
FillColor := clBlue;
BorderColor := clBlack;
Canvas.Pen.Color := BorderColor;
Canvas.Pen.Width := 1;
Canvas.Brush.Color := BorderColor;
Canvas.Ellipse(Position.X, Position.Y, Position.X + Radius, Position.Y + Radius);
Canvas.Brush.Color := FillColor;
Canvas.FloodFill(Position.X + Radius div 2,
Position.Y + Radius div 2, BorderColor, fsSurface);
解决了:
问题是(冗余)使用 FloodFill。如果 Canvas 不完全可见,floodfill 会导致伪影。我删除了洪水填充,现在它可以根据需要工作。