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

Delphi Discussion :

Affichage d'articles encodés


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 71
    Points : 33
    Points
    33
    Par défaut Affichage d'articles encodés
    Bonjour,

    Ça fait des années que je n'ai pas touché au code; et là je me trouve à modifier du code; et je souhaite de l'aide SVP.

    Lors de l'ajout d'un nouvel article, je dois lui affecter 4 informations :
    2 Famille
    4 Sous-Famille
    6 Détails
    8 Sous-Détails

    champ Famille : doit m'afficher toutes les familles avec deux caractères, ex : 'B2'
    champ Sous-Famille : doit m'afficher que les sous-familles qui débutent avec 'B2..' (4 caractères) ex : 'B2C1'
    champ Détails : doit m'afficher que les détails qui débutent avec 'B2C1..' (6 caractères) ex : 'B2C1D3'
    champ Sous-Détails : doit m'afficher que les sous-détails qui débutent avec 'B2C1D3..' (8 caractères) ex : 'B2C1D3E6'

    Et donc mon article sera affecté à la famille 'B2C1D3E6'

    Merci d'avance pour votre aide.

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    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 : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Si j'ai bien compris, quand tu veux ajouter un nouvel article, tu as 4 champs (4 listes déroulantes ?) à renseigner. Lorsque tu sélectionnes un code famille dans la liste déroulante des codes "famille", tu veux que la liste déroulante des codes "sous famille" n'affiche que les codes "sous famille" correspondants à la famille sélectionnée et ainsi de suite pour les autres champs à saisir ?

    Si c'est ça, voici un moyen très simple en Delphi (exemple avec seulement 2 combobox : une qui contient la liste des codes "famille", l'autre la liste des codes "sous famille") :
    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
     
    [...]
      listeSousFamille : TListeFiltree;
    [...]
    // Se produit lorsque le focus sort de la combobox des codes "famille"
    procedure TForm1.cbFamilleExit(Sender: TObject);
    begin
      // on va filtrer notre objet TListeFiltree en foction de la famille sélectionnée dans la combobox des codes "famille" et on rajoute .* pour prendre le reste de l'élément
      listeSousFamille.Filtre := cbFamille.text+'.*';
      // on alimente les éléments de la combobox code "sous famille" avec la liste filtrée de l'objet TListeFiltree
      cbSousFamille.Items.text := listeSousFamille.ListeFiltree.Text;
    end;
     
    // Se produit à la création de la fiche
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      // Intanciation d'un objet de type TListeFiltree pour alimentée la combobox des codes "sous famille"
      listeSousFamille := TListeFiltree.create;
     
      // Alimentation des sous familles avec les valeurs saisies en conception directement dans la combobox (=> il s'agit d'un exemple)
      listeSousFamille.ListeComplete.Text := cbSousFamille.items.text;
    end;
    et le code définissant la classe TListeFiltree :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    TListeFiltree = class
        FListeComplete : TStringList;
        FListeFiltree  : TStringList;
        FFiltre : string;
     
      private
     
        function getFiltre: string;
        function getListeComplete: TStringList;
        function getListeFiltree: TStringList;
        procedure SetFiltre(const Value: string);
        procedure SetListeComplete(const Value: TStringList);
        procedure filtrer;
     
      public
        constructor create;
        destructor destroy;
     
        property ListeComplete : TStringList read getListeComplete write SetListeComplete;
        property ListeFiltree  : TStringList read getListeFiltree;
        property Filtre        : string read getFiltre write SetFiltre;
      end;
     
     
    implementation
     
    constructor TListeFiltree.create;
    begin
      FListeComplete := TStringList.create;
      FListeFiltree := TStringList.create;
      FFiltre := '';
    end;
     
    destructor TListeFiltree.destroy;
    begin
      FListeComplete.Free;
      FListeFiltree.free;
    end;
     
    procedure TListeFiltree.filtrer;
    var
      expr: TRegEx;
      collection: TMatchCollection;
      i : integer;
    begin
      if FFiltre <> '' then
      begin
        // création de l'expression régulière à partir du filtre renseigné
        expr.Create(FFiltre);
        // collection contiendra toutes les chaines de caractères ayant "matchées" avec le filtre dans la liste complète
        collection := expr.Matches(FListeComplete.text);
        // On vide la liste filtrée
        FListeFiltree.Clear;
        // On alimente la liste filtrée pour chauqe occurrence trouvée
        for i := 0 to collection.Count - 1 do
           FListeFiltree.add(collection[i].Value);
      end;
    end;
     
    function TListeFiltree.getFiltre: string;
    begin
      result := FFiltre;
    end;
     
    function TListeFiltree.getListeComplete: TStringList;
    begin
      result := FListeComplete;
    end;
     
    function TListeFiltree.getListeFiltree: TStringList;
    begin
      result := FListeFiltree;
    end;
     
    procedure TListeFiltree.SetFiltre(const Value: string);
    begin
      if value <> FFiltre then
      begin
        FFiltre := value;
        filtrer;
      end;
    end;
     
    procedure TListeFiltree.SetListeComplete(const Value: TStringList);
    begin
      FListeComplete.text :=  Value.text;
    end;
    Mais bon, je ne vois pas l'intérêt d'avoir repris les valeurs de la donnée "parente" aux valeurs de la donnée "enfant" . Le jour où cette valeur change sur la donnée "parente", il faut impacter toutes les valeurs des données "enfants"...

    PS : une petite relecture du message avant de poster permettrait, j'en suis persuadé, d'éviter certaines fautes d'orthographe
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    comme on n'a aucune indication sur une quelconque BDD (si toutefois il y en a une) difficile de se faire une opinion. Néanmoins une chose est sûre si c'est le code famille qui est affecté à l'article, il y a de fortes possibilités de problèmes futurs.
    L'approche objet de gbegreg est
    Toutefois, vu le code indiqué dans un autre post (basculé depuis en Pascal https://www.developpez.net/forums/d1...ode-lie-champ/) je doute que l'utilisation des expressions régulières soit possible
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Aide sur un code pour un site
    Par PoppyGuy dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/07/2016, 09h03
  2. aide sur un code Mysql+
    Par flo1084 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 24/10/2006, 09h54
  3. [C# 1.1] Aide sur un code C# 2005
    Par Filipegomes dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/10/2006, 14h33
  4. [MSDN]Aide sur un exemple pour les boutons
    Par NicolasJolet dans le forum Windows
    Réponses: 4
    Dernier message: 01/08/2006, 10h41
  5. [VB6] Aide sur un code
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/05/2006, 14h54

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