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の(冗長な)使用です。キャンバスが完全に表示されていない場合、塗りつぶしによってアーティファクトが発生します。塗りつぶしを削除しましたが、必要に応じて機能するようになりました。