IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Gérer l'affichage dans TDbCtrlGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut Gérer l'affichage dans TDbCtrlGrid
    Bonjour à tous,

    J'ai un composant Tdbctrlgrid contenant des champs Tdbtext et Tdbedit et je voudrais gérer la couleur d'affichage des champs Tdbtext selon la valeur du champ correspondant. En effet, j'ai des champs qui peuvent avoir des valeurs positives ou négatives et selon la valeur je change la couleur.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Dans OnPaintPanel tu peux en profiter pour changer les couleurs des Controles.
    Je l'ai fait il y a très longtemps, dans un projet récent j'ai juste changer la couleur de sélection en mode thème
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    le problème avec onpaintpanel c'est que il change toutes les couleurs des autres lignes(enregistrements).

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est parce qu'il faut rétablir la couleur à chaque OnPaintPanel, mettre à clWindow ou clRed selon la situation via des fonctions de dessin (DrawRect par exemple) mais pas modifier les propriétés des contrôles
    C'est valable si tu dessines dans le panel un indicateur pour montrer le négatif

    Sinon, autant redéfinir le WMPaint du TDBEdit directement
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Franchement j'ai pas compris votre réponse.
    Sinon, autant redéfinir le WMPaint du TDBEdit directement
    Il ya pas que Tdbedit, il ya aussi des Tlabel, dont la couleur de la font est relative à la valeur d'un champs donné.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pour les TLabel, ils utilisent la couleur de fond du Panel, donc dessiner le fond durant OnPaintPanel semble opportun
    En tout cas, cela fonctionnait dans un module (abandonné)



    Nom : Sans titre.jpg
Affichages : 1119
Taille : 121,3 Ko
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    J'ai bricolé cela dans mon application à bordel,
    Tu devrais t'en faire une pour ce genre d'essai isolé, il faut chercher, triturer, comme tu peux voir, il n'y a rien de compliqué

    Code dfm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    object btnFillDBCtrlGrid: TBitBtn
      Left = 32
      Top = 16
      Width = 75
      Height = 25
      Caption = 'Fill'
      TabOrder = 1
      OnClick = btnFillDBCtrlGridClick
    end
    object DBCtrlGridColor: TDBCtrlGrid
      Left = 0
      Top = 47
      Width = 414
      Height = 520
      Anchors = [akLeft, akTop, akBottom]
      DataSource = DataSourceCtrlGrid
      PanelHeight = 40
      PanelWidth = 397
      TabOrder = 0
      RowCount = 13
      OnPaintPanel = DBCtrlGridColorPaintPanel
      object lblCtrlGridValue: TLabel
        Left = 16
        Top = 16
        Width = 40
        Height = 13
        Caption = 'Valeur : '
      end
      object DBEditCtrlGridValue: TDBEdit
        Left = 62
        Top = 13
        Width = 107
        Height = 21
        DataField = 'VALUE'
        DataSource = DataSourceCtrlGrid
        TabOrder = 0
      end
    end
    Code dfm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    object ClientDataSetCtrlGrid: TClientDataSet
      Aggregates = <>
      Params = <>
      Left = 140
      Top = 80
      object ClientDataSetCtrlGridVALUE: TIntegerField
        FieldName = 'VALUE'
      end
    end
    object DataSourceCtrlGrid: TDataSource
      DataSet = ClientDataSetCtrlGrid
      Left = 200
      Top = 120
    end

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      private
        FDBEditCtrlGridValueWindowProcOld: TWndMethod;
        procedure DBEditCtrlGridValueWindowProcNew(var Message: TMessage);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    procedure TZooVCLControlExperimentForm.btnFillDBCtrlGridClick(Sender: TObject);
    var
      I: Integer;
    begin
      if not Assigned(FDBEditCtrlGridValueWindowProcOld) then
      begin
        FDBEditCtrlGridValueWindowProcOld := DBEditCtrlGridValue.WindowProc;
        DBEditCtrlGridValue.WindowProc := DBEditCtrlGridValueWindowProcNew;
      end;
     
      if not ClientDataSetCtrlGrid.Active then
        ClientDataSetCtrlGrid.CreateDataSet();
      for I := 0 to 9 do
      begin
        ClientDataSetCtrlGrid.Append();
        ClientDataSetCtrlGridVALUE.AsInteger := ClientDataSetCtrlGrid.RecordCount + 1;
        ClientDataSetCtrlGrid.Post();
      end;
    end;
     
    procedure TZooVCLControlExperimentForm.DBEditCtrlGridValueWindowProcNew(var Message: TMessage);
    begin
      if Message.Msg = WM_PAINT then
      begin
        if ClientDataSetCtrlGridVALUE.AsInteger < 10 then
        begin
          if Odd(ClientDataSetCtrlGridVALUE.AsInteger) then
            DBEditCtrlGridValue.Color := clWindow
          else
            DBEditCtrlGridValue.Color := clWebLavenderBlush;
        end
        else
        begin
          if Odd(ClientDataSetCtrlGridVALUE.AsInteger) then
            DBEditCtrlGridValue.Color := clWebAliceBlue
          else
            DBEditCtrlGridValue.Color := clWebPeachPuff;
        end;
      end;
     
      FDBEditCtrlGridValueWindowProcOld(Message);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure TZooVCLControlExperimentForm.DBCtrlGridColorPaintPanel(DBCtrlGrid: TDBCtrlGrid; Index: Integer);
    var
      LRect: TRect;
      Brush: HBrush;
    begin
      if Odd(ClientDataSetCtrlGridVALUE.AsInteger) then
      begin
        Brush := CreateSolidBrush(ColorToRGB(clMoneyGreen));
        try
          LRect := Rect(0, 0, DBCtrlGrid.PanelWidth, DBCtrlGrid.PanelHeight);
          FillRect(DBCtrlGrid.Canvas.Handle, LRect, Brush);
        finally
          DeleteObject(Brush);
        end;
      end;
    end;
    Nom : Sans titre.jpg
Affichages : 849
Taille : 59,3 Ko
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    ça Marche merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure Tform1.Mybtnwnd(var message:Tmessage);
    begin
              If message.msg=WM_PAINT then
              begin
                           if pos('CLASSE',TABLECHAMP.asstring)>0 then dbtext1.font.color:=clred 
                           else  dbtext1.font.color:=clwhite;
              end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment gérer l'affichage d'une reponse ajax dans un tableau de tableau(html)
    Par satanluimm dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/03/2012, 15h14
  2. Réponses: 4
    Dernier message: 16/07/2011, 17h54
  3. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21
  4. affichage dans le front buffers ne marche pas!
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2003, 19h14
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo