Bonjour,
Je suis en train de créer un composant dérivé de TCustomGrid. Comme je veux qu'il ait un aspect différent, je suis en train de dériver la méthode DrawCell.
Par défaut, la méthode DrawCell limite le dessin à la case en cours. C'est a dire que, si on fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part procedure DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
... et que l'on invalide seulement une cellule, seule celle ci sera bleue, alors que le code dessine sur tout le canvas. Si on récupere la valeur de Canvas.ClipRect, elle correspond a la cellule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TMyGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); begin Canvas.Brush.Color:=clBlue; Canvas.FillRect(Rect(0,0,500,500)); end;
Ma question est : Comment faire pour dessiner hors de la case concernée par le DrawCell ?
Je pense qu'il faut modifier le ClipRect, mais je n'y parviens pas. Dans l'aide Delphi, il est marqué :
http://docwiki.embarcadero.com/Libra...anvas.ClipRectEnvoyé par docwiki.embarcadero.com
Malheureusement, ce code ne fonctionne pas non plus comme souhaité :
Avec ce code, en invalidant les cellules 1,1 et 3,3, on obtient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 V:=CreateEllipticRgn(0,0,500,500); SelectClipRgn(Canvas.Handle,V); Canvas.Brush.Color:=clBlue; if (ACol=1) and (ARow=1) then Canvas.FillRect(Rect(0,0,500,500)); DeleteObject(V);
Avez vous des idées pour pouvoir dessiner sur les autres cellules ? Je sèche depuis plusieurs heures ...
Merci d'avance![]()
Partager