J'ai écrit un nouveau composant personnalisé dérivé de TLabel. Le composant ajoute un dessin personnalisé au composant, mais rien d'autre. Lorsque le composant est peint, tout fonctionne bien. Mais lorsque le redessin est nécessaire (comme faire glisser une autre fenêtre sur le composant), "label part" fonctionne correctement mais mon dessin personnalisé n'est pas correctement mis à jour. Je dessine directement sur le canevas dans une méthode Paint surchargée, et lorsque le redessin est requis, les parties de canevas où mon code a dessiné quelque chose sont peintes en noir. Il semble que la méthode de peinture ne soit pas appelée. Qu'est-ce que je devrais faire pour obtenir un redessin approprié?Problème de rafraîchissement de composant personnalisé avec Delphi
Le composant est essentiellement:
TMyComponent = class(TCustomLabel, IMyInterface)
..
protected
procedure Paint; override;
..
procedure TMyComponent.Paint;
begin
inherited;
MyCustomPaint;
end;
mise à jour, la routine de la peinture:
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);
RESOLU:
Le problème est (redondant) l'utilisation de FloodFill. Si le canevas n'est pas entièrement visible, le remplissage provoque des artefacts. J'ai enlevé l'inondation et maintenant cela fonctionne comme nécessaire.
C'est fondamentalement la même chose, j'utilise juste l'ellipse et l'inondation. Je dois essayer de réduire un peu le composant pour voir s'il y a quelque chose qui interfère. – Harriv