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 :

Récupérer les valeurs d’une TCheckListEdit dans une TadvStringGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 55
    Points
    55
    Par défaut Récupérer les valeurs d’une TCheckListEdit dans une TadvStringGrid
    Bonjour,

    J'ai mis en place dans une cellule d'une TadvStringGrid une TCheckListEdit.
    Je ne sais pas comment récupérer les valeurs sous une forme exploitable.

    Actuellement j'utilise l'événement "OnCellValidate", mais le problème c'est qu'il me donne les valeurs sous la forme d'une chaine de caractère séparés par des virgules.

    Y aurait-il un moyen d'avoir ces données sous une autre forme.

    Merci de votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Tu peux utiliser extractstrings pour mettre les éléments de ta string dans une tstringlist (tableau de strings).
    Dans extractstrings tu mets comme élément séparateur le char ','.

    A +,

    Fred

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 55
    Points
    55
    Par défaut
    Merci AlfredKr,

    Mais le problème c'est que si un élément n'est pas coché, il ne va pas mettre "" entre deux virgules. il construit la chaine qu'avec les éléments cochés.

    Et je ne peux pas faire une recherche sur les libellés car mon application et multilingue. En réalité je pourrais le faire en fonction des différentes langues mais ça serait long et pas très propre comme solution.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Une TStringList et CommaText feront très bien l'affaire, c'est surement conçu pour cela !
    Penser à mettre StrictDelimiter à true

    Je ne connais pas le TCheckListEdit, est une sorte de ComboBox avancé ?
    normalement la Propriété Items est une TStrings et donc gère CommaText et StrictDelimiter

    Qui génère la chaine avec des virgules ?
    Contient-elle les libellés ?
    Si c'est des libellés, tu es obligé de la parcourir et d'utiliser IndexOf sur les Libellés (peu importe le multilangue, tout l'appli étant dans la bonne langue ça ne pose pas de problème, ou alors tu parlais de libellé en dur dans le code ce qui est évidemment inconcevable en multilangue)

    Au lieu d'utiliser une chaine avec des virgules, j'utiliserais Data et Objects[] pour mémoriser les valeurs cochées

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    "TCheckListEdit" est en effet une liste de "Checkbox" que l'on déroule comme une "comboBox".

    la chaine de caractère est généré par l'évenement "OnCellValidate" du "TadvStringGrid".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    procedure AdvStringGrid1CellValidate(Sender: TObject; ACol, ARow: Integer;
          var Value: string; var Valid: Boolean);
    Je pense que l'on peux récupérer directement le contenu du "TCheckListEdit" mais je ne sais pas comment ?

    Pour le multi-language, ça pose un souci car je récupère les libellés.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Je ne vois pas en quoi le Multilangue pose problème, tu dois juste toujours manipuler des libellés traduits, tu as bien générer la liste des Items, tu peux donc bien recherche dedans un libellé traduit !

    Qu'utilises-tu pour le Multilangue ?
    Perso, j'ai utilise MultiLizer mais j'ai surtout utilisé des outils développés en interne (utilisant Ini, XML ou DB), un IndexOf sur une TStrings contenant des libellés traduits fonctionne si l'on recherche un libelle traduit, il faut bannir toute constante texte et les remplacer par des Ressources ou faire son propre système de numérotation de message

    Cherche le InplaceEditor, avec un peu de chance c'est ton TCheckListEdit
    Regarde aussi le TEditLink

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 55
    Points
    55
    Par défaut
    J'utilise depuis peu l'outil de langage de Delphi, avant j'étais sur TsiLang mais il est payant et j'ai migré mon application de D2007 à D2010.

    Je dois coder autant de fois que j'ai de langage car je dois rechercher dans la chaine de caractères les éléments qui ont été sélectionnés.

    Mais je vais voir du coté InplaceEditor.

    Merci pour votre participation.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Citation Envoyé par curt25 Voir le message
    Je dois coder autant de fois que j'ai de langage car je dois rechercher dans la chaine de caractères les éléments qui ont été sélectionnés.
    Mais que racontes-tu ?
    Tu écrit le code dans la langue native, français ou anglais, tes libellés en dur tu les traduits à la volée et tu les recherche !

    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 OnValidate(...);
    var 
      CommaChecked: TStringList;
    begin
      CommaChecked := TStringList.Create(); 
      try
        CommaChecked.CommaText := Value;
     
        if CommaChecked.IndexOf(Translate('Matin')) >= 0 then ...
        if CommaChecked.IndexOf(Translate('Midi')) >= 0 then ...
        if CommaChecked.IndexOf(Translate('Soir')) >= 0 then ...
     
      finally
        CommaChecked.Free();
      end;
    end;
    Cela n'est qu'une solution parmis d'autre, tu pourais avoir une fonction ReverseTranslate qui retrouve un ID ou la langue par défaut à partir d'un libellé étranger !

    Tu pourrais aussi afficher un combo contenant
    Matin [1]
    Midi [2]
    Soir [3]

    ou

    Evening [3]
    Morning [1]
    Noon [2]

    Ainsi tu embarque dans ta CommaText un code facilement exploitable, tant pis l'utilisateur le voit, cela ne va pas le tuer !


    Mais bon, je n'aime pas travailler avec les libellés, et je pense que EditLink devrait t'aider !


    J'utilisais un autre composant ComboCheckListBox maison , il permettait d'afficher deux colonnes, une colonne contenant un code et une autre un libellé
    le code restant fixe et le libellé pouvant être modifié selon l'humeur de l'utilisateur !
    Il y avait un gestion de Thésaurus\Dictionnaire dans cette application

    Sache qu'avec AdvStringGrid tu peux faire des propres Editor !
    Regarde l'exemple sur le site de TMS !

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 55
    Points
    55
    Par défaut
    J'ai trouvé la solution la plus adaptée.
    J'ai chercher du coté "TCheckListEdit".
    Voici la solution pour connaitre si un élément est coché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TfrmPreferences.AdvStringGrid1CellValidate(Sender: TObject;
      ACol, ARow: Integer; var Value: string; var Valid: Boolean);
    begin
       with (AdvStringGrid1.EditLink.GetEditControl as TCheckListEdit) do
       begin
         ShowMessage(BoolToStr(Checked[0]));
         ShowMessage(BoolToStr(Checked[1]));
         ...
       end;
    end;
    Merci pour votre aide

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Ah, EditLink ! Cool !
    Cela m'aurait semblé impensable que l'on ne puisse pas y accéder !
    N'ayant pas TMS, je me suis fié au Exemple de leur site !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/02/2008, 10h49
  2. Réponses: 2
    Dernier message: 15/10/2007, 13h28
  3. [MySQL] récupérer les dimensions des images dans une boucle while
    Par Navyel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/08/2007, 11h09
  4. DOS - Récupérer la valeur de hostname dans une variable
    Par f1vincent dans le forum Développement
    Réponses: 2
    Dernier message: 18/10/2006, 15h43
  5. Comment récupérer la valeur de Expr1 dans une requête ?
    Par Tchupacabra dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 15h16

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