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

Signaler
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
-
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
-
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...

5 réponses

Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
5
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.
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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+
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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+
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Ou alors pour la cellule seleccionnée mais sans focus:
if (gdSelected in State) then
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
5
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