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

Langage Delphi Discussion :

Verification entier supérieur à Zéro dans listbox et affichage item couleur


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Verification entier supérieur à Zéro dans listbox et affichage item couleur
    Bonjour

    J'ai une listbox qui contient des 0 ou chiffres entiers sur plusieurs lignes et je cherche un moyen de vérifier si le chiffre d'une ligne n'est pas un "0", alors l'item en question changerait de couleur.

    pour l'instant j'ai bidouillé un bout de code (ci dessous) mais ça coince au niveau du ... (... value)>0
    et l'instruction après le then (est un indicateur avec un label) mais serait remplacé par le code pour changement de couleur par la suite

    Merci d'avance pour vos éclairages

    A vous lire
    Beauserge



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // test si valeur supérieur à zéro dans écart listbox (si oui alors la ligne est mise en surbrillance)
    procedure TfrmMain.Button2Click(Sender: TObject);
    var
    value:integer;
    begin
     if TryStrToInt(ListEcart.items[17],value)>0 then
     label4.Caption := 'écart'
     end;

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 664
    Points : 3 642
    Points
    3 642
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Atttention, TryStrToInt retourne un booléen... La valeur entière correspondant à la string est dans le second paramètre de la fonction TryStrToInt.
    Dans votre cas, il faudrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfrmMain.Button2Click(Sender: TObject);
    var
    value:integer;
    begin
     if TryStrToInt(ListEcart.items[17],value) then
     begin
       if value > 0 then label4.Caption := 'écart';
     end; 
    end;
    Une autre solution serait d'utiliser StrToIntDef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TfrmMain.Button2Click(Sender: TObject);
    var
    value:integer;
    begin
     if StrToIntDef(ListEcart.items[17],-1) <> -1 then
       label4.Caption := 'écart';
    end;
    StrToIntDef renvoie la valeur entière issue de la string, et si la string ne peut être convertie en integer, StrToIntDef renvoie la valeur par défaut (le second paramètre).

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonjour et Merci gbegreg

    J'ai opté pour la 1ere solution qui convient parfaitement.

    ça s'est réglé, par contre connais tu un code pour changer la couleur d'un item dans une listbox à l'exécution ?

    Beauserge

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 869
    Points : 11 346
    Points
    11 346
    Billets dans le blog
    6
    Par défaut
    La FAQ n'a pas réponse à tout, mais un bon réflexe est de s'y reporter pour trouver rapidement une réponse à ses questions !

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Tourlourou

    J'avais déjà trouvé dans la FAQ cette discussion et testé la procédure mais chez moi le code ne fonctionne pas .....

    Cordialement
    Beauserge

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 664
    Points : 3 642
    Points
    3 642
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Beauserge Voir le message
    J'avais déjà trouvé dans la FAQ cette discussion et testé la procédure mais chez moi le code ne fonctionne pas .....
    C'est curieux... Quelle version de Delphi utilisez vous ? Avez vous activé un thème à votre application ?

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Je code avec D7 edition personnelle

    J'ai réussi après ajustement à compiler ce code mais ce n'est pas ce que je recherche.
    Je vais essayer de trouver un autre moyen.

    Merci
    Beauserge

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 869
    Points : 11 346
    Points
    11 346
    Billets dans le blog
    6
    Par défaut
    Si le but demeure de colorier la fonte utilisée en fonction de la valeur de l'item du listbox, ce n'est pas l'index qu'il faut tester, mais la valeur de l'item à dessiner, dont l'index est passé en argument.
    Autrement dit, il suffit de remplacer dans le code de la FAQ if index = 1 then par if StrToIntDef(Items[index], 0) > 0) then.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    oui le but c'est cela .
    j'ai repris ton code en supprimant la dernière parenthèse inutile et l'ai adapté à ma listbox (voir mon code ci dessous) mais cela me colorie tous les items si zéro ou pas
    ce que je souhaite c'est uniquement colorier l'item si supérieur à zéro (pas ceux à zéro)

    Cordialement
    Beauserge

    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
    procedure TfrmMain.ListEcartDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
    with(Control as TListBox).Canvas do  // Le dessin se fait sur le canevas du contrôle, pas dans la fiche
        begin
        // On choisit les couleurs en fonction de l'index
        if StrToIntDef(ListDif.Items[index], 0) > 0 then
        begin
           Brush.Color:=clyellow;   // couleur du fond en jaune
           Font.Color:=clblack; // police de l'item en noir
        end;    FillRect(Rect); // Efface le rectangle
        // Dessin du texte
        TextOut(Rect.Left,Rect.Top,(Control as TListBox).Items[Index]);//affiche le texte
      end;
    end;

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 337
    Points
    13 337
    Par défaut
    Et quelles devraient être les couleurs si la valeur est <= 0 ?
    Ne va pas croire que les propriétés du canvas sont réinitialisées avant l'appel à DrawItem

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonjour Andnotor

    peu importe la couleur ... (c'est juste pour bien mettre en évidence les 0 des autres chiffres)

    exemple : pour chaque item égal à zéro = fond bleu
    et pour chaque item supérieur à zéro = fond jaune

    Sinon j'ai pas compris quand tu dis "Ne va pas croire que les propriétés du canvas sont réinitialisées avant l'appel" ?

    Beauserge

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 337
    Points
    13 337
    Par défaut
    Citation Envoyé par Beauserge Voir le message
    Sinon j'ai pas compris quand tu dis "Ne va pas croire que les propriétés du canvas sont réinitialisées avant l'appel" ?
    Tant que les valeurs sont toutes inférieures à zéro, ce sont les couleurs de base. Dès qu'une valeur est plus grande, tu passes définitivement en noir/jaune.
    Il faut traiter les deux cas (plus State si tu veux garder la surbrillance).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if StrToIntDef(ListDif.Items[index], 0) > 0 then
    begin
      Brush.Color:=clyellow;
      Font.Color:=clblack;
    end
    else
    begin
      Brush.Color:=clWindow;
      Font.Color:=clWindowText;
    end;

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    avec ton code, les valeurs ne s'affichent même plus et les couleurs ne changent pas !

    j'ai modulé le code (ci après) et ça fonctionne parfaitement !

    Merci Andnotor et tous ceux qui m'ont aidé sur ce sujet.
    Ce bout de code pourra peut être aider aussi d'autres utilisateurs Delphi ......

    Beauserge

    Nom : listbox couleur.jpg
Affichages : 116
Taille : 10,4 Ko

    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
    procedure TfrmMain.ListEcartDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
    with(Control as TListBox).Canvas do  // Le dessin se fait sur le canevas du contrôle, pas dans la fiche
       begin
        // On choisit les couleurs en fonction de l'index
        if StrToIntDef(ListEcart.Items[index], 0) > 0 then
        begin
           Brush.Color:=clyellow;   // couleur du fond en jaune
           Font.Color:=clblack // police de l'item en noir
     
        end;
        FillRect(Rect); // Efface le rectangle
        // Dessin du texte
        TextOut(Rect.Left,Rect.Top,(Control as TListBox).Items[Index]);//affiche le texte
      end;
    end;

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

Discussions similaires

  1. affichage - dans listbox
    Par shirya dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/08/2008, 22h07
  2. Mauvais affichage dans listBox
    Par moilou2 dans le forum IHM
    Réponses: 30
    Dernier message: 16/03/2008, 19h19
  3. Affichage des résultats d'une requête dans listbox
    Par Deallyra dans le forum VBA Access
    Réponses: 8
    Dernier message: 09/10/2007, 14h09
  4. [Débutant] Affichage tableau de données dans ListBox
    Par nitrosyle dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 01/08/2007, 11h06
  5. Erreur de syntaxe clause FROM affichage Tous dans Listbox
    Par Lou Pitchoun dans le forum Access
    Réponses: 9
    Dernier message: 21/09/2005, 10h40

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