Я написал новый пользовательский компонент, полученный из TLabel. Компонент добавляет некоторый пользовательский рисунок к компоненту, но ничего больше. Когда компонент окрашен, все работает нормально. Но когда требуется перерисовка (например, перетаскивание другого окна поверх компонента), «часть надписи» работает нормально, но мой пользовательский чертеж не обновляется должным образом. Я в основном рисую прямо на холст в переопределенном методе 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. Если холст не виден полностью, затопление вызывает появление артефактов. Я удалил флуд, и теперь он работает как надо.