Colorier une cellule lorque l'on clique dessus [Résolu]

Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- - Dernière réponse : grandyaka54
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- 28 févr. 2008 à 17:26
Bonjour,

J'ai un DBGrid relié a un DataSource lui meme relié à un IBQuery et IBUpdateSql.

Malgrès les nombreux exemples sur ce forum je n'arrive pas a colorier la cellule que je sélectionne avec la souris et qui reste en couleur pendant la saisie.

Merci de l'aide...
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
3
Merci
Merci pour l'aide mais malheureusement, ça n'a pas fonctionné malgres  DBGrid.defaultDrawing = False.

Par contre, j'ai écrit qui marche puisque au moment où la cellule perd le focus (Touche tab ou entrée), il met le contenu saisie en rouge si elle ne respecte pas les conditions et reste en noir dans le cas contraire.

-----------------------------------------------------------------------------------------------------------------

  //Le contenu de la colonne [9] en rouge si condition non respecter
  if not (gdFocused in State) then
  begin


    if Column.Index = 9 then  
    with DBGrid do
    begin


      if (Length(TField(Column.Field).AsString) <> 8) and (Length(TField(Column.Field).AsString) <> 11)  then
      begin
        Canvas.Font.Color := clRed;
        Canvas.Font.Style := [fsBold];
        Canvas.Font.Size := 10;
      end;
    end;
  end;

  //On applique les modifications.
  DBGrid.DefaultDrawColumnCell(Rect,DataCol, Column, State);

-------------------------------------------------------------------------------------------------------------------

Merci pour l'aide.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 128 internautes nous ont dit merci ce mois-ci

Commenter la réponse de grandyaka54
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
0
Merci
Bonjour,

// Désactiver le coloriage par défaut :
NomDBGrid.defaultDrawing à false!!!

Ensuite, dans le OnDrawColumnCell de ta DBGrid fais comme ceci:

procedure TFrmPrin.NomDBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin  If (State [gdSelected]) Or (State [gdSelected, gdFocused])
  Then NomDBGrid.Canvas.Brush.Color  := clGreen;

  // Appel de la fonction par défaut :
  NomDBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Voilá
A+
Commenter la réponse de cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
0
Merci
A mon avis c' est ici qui a un problème : 
if not (gdFocused in State) then

tu dois faire :
if (gdFocused in State) then


A+
Commenter la réponse de cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
0
Merci
Ou alors pour la cellule seleccionnée mais sans focus:
if (gdSelected in State) then
Commenter la réponse de cs_MAURICIO
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
Alors avec :
  if (gdFocused in State) then
ou alors
  if (gdSelected in State) then
ou encore
  if not (gdSelected in State) then

avec DBGrid.defaultDrawing = False ou True, je n'ai aucun changement.

Mais ça marche seulement comme dans mon exemple : 
   if not (gdFocused in State) then
Commenter la réponse de grandyaka54