Evènement onDrawCell d'un StringGrid

Résolu
madcap Messages postés 77 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 22 février 2011 - 28 oct. 2009 à 13:03
madcap Messages postés 77 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 22 février 2011 - 29 oct. 2009 à 17:21
Bonjour tous le monde,

J'ai créé un panel qui contient différents éléments, StringGrid, boutons, label, etc... Ce panel je le crée à l'exécution, il y n'y a donc pas de Form et tout est créé et détruit dans le code.

J'ai différents évènements pour le StringGrid, dont l'évènement onDrawCell. J'utilise cet évènement pour dessiner un bouton dans une des colonnes du StringGrid dans chaque cellule.

Bizarrement, en debuguant je me suis rendu compte qu'il ne passe jamais dans l'évènement onDrawCell.

Pourtant lors de l'initialisation du StringGrid je fais bien :
  with StringGridTraitement do begin
    Parent := self;
    Width := 940;
    Height := 200;
    Left := 0;
    Top := 30;
    Visible := true;
    WordWrap := true;
    ScrollBars := ssnone;
    InitializeParameters(parametres_initialisation);

    Options := [goRowSelect, goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect];
    OnDrawCell := StringGridTraitementDrawCell
  end;


Et mon évènement onDrawCell ressemble à ça :
procedure TPlaieTraitementPanel.StringGridTraitementDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  btn : TJvImgBtn;
  R: TRect;
begin
  //On dessine le bouton
  if (ACol = 3) then begin
    btn := TJvImgBtn.Create(self);
    R := StringGridTraitement.CellRect(ACol, ARow);
    R.Left := R.Left + StringGridTraitement.Left;
    R.Right := R.Right + StringGridTraitement.Left;
    R.Top := R.Top + StringGridTraitement.Top;
    R.Bottom := R.Bottom + StringGridTraitement.Top;
    btn.Left := R.Left + 1;
    btn.Top := R.Top + 1;
    btn.Width := (R.Right + 1) - R.Left;
    btn.Height := (R.Bottom + 1) - R.Top;
    btn.Visible := True;
  end;
end;


Est-ce que c'est faux comme je surcharge l'évènement du StringGrid ?
Est-ce normale qu'il ne passe jamais dans l'évènement onDrawCell ?

Merci d'avance de votre aide !
A voir également:

10 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
29 oct. 2009 à 14:50
inherited fait appel a la methode de la classe mere:
TPere = class
  procedure methode1; virtual;
  procedure methode2;
end;

TFils = class(TPere)
  procedure methode1; override;
  procedure methode2;
  procedure methode3;
end;
...
procedure TFils.methode1; 
begin
  inherited; // appel de TPere.methode1;
  inherited methode2; // appel de TPere.methode2;
  methode2; //appel de Self.methode2;
end;
//attention, TFils.methode2 n'est pas override (car TPere.methode2 pas virtual). on aura le comprtement suivant:
var
  p: TPere;
  f: TFils;
begin
  f := TFils.Create;
  p := f; //p contient un instance de TFils
  f.methode2; //appel de TFils.methode2
  p.methode2; //appel de TPere.methode2, meme si p est un TFils
//par contre, p.methode1 et f.methode1 appelent tous les 2 TFils.methode1
3
Rejoignez-nous