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 :

Petite question de prog


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut Petite question de prog
    Bonjour,

    Je charge une liste de code options dans une TListBox .

    Si un de ces codes est du type 'toto' je met un flag à 'true'.

    L'utilisateur peut ajouter et supprimer à sa guise les options dans la liste à partir de boutons ajouter/supprimer.
    Donc si on ajoute ou supprime l'option "toto" le flag passe de 'true' à 'false' et inversement.

    J'ai créé une fonction commune aux 2 boutons. Le problème c'est que le code est lourd : il faut à chaque fois tester si le code ajouté est 'toto'. D'après vos expériences, y aurait il un moyen plus simple de gérer ce cas.

    Merci d'avance.

  2. #2
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Bonjour!

    Je suis désolé j'aimerais beaucoup t'aider mais je ne comprends pas ta question .

    Est-ce qu'il te serait possible de la reformuler avec la terminologie de Delphi stp ?

    Par exemple est-ce que "code" c'est un Item de ta TListBox ? À quoi correspond le "flag" au juste ? Une case à cocher dans la list box ? Une variable globale ? Un tableau de variables globales ?

    Aussi, si tu pouvais décrire en gros ce que tu cherches à faire non seulement nous serons en mesure de te conseiller sur ton problème précis mais peut-être aussi pourrons-nous te suggérer des techniques générales qui nous semblerons plus efficaces.

    Merci !

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 942
    Billets dans le blog
    6
    Par défaut
    je suppose que le mieux est de détecter la présence ou absence de l'item dans le OnChange de la TListBox, pour mettre le flag à jour à chaque modif, qu'elle soit en plus ou en moins
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    Désolé j'avais voulu faire vite et simple...

    isCodeSpecifique est déclaré comme variable booleen dans Ma TForm.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Type
      TForm1 : class(TForm)
      ds : TClientDataSet;  
      dsCode : TStringField;
      {...}
    Var 
      isCodeSpecifique : boolean;
      insertiondansliste :boolean;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    {Corps du programme} 
    //Exécuté une seule fois ! 
    for j := 0 to NbItemsDansMaliste - 1 do begin
        ds.Insert;
        dsCode.Value    := Maliste.Items[j] ;
        if ( Maliste.Items.Strings[i] = 'toto' ) or 
           ( Maliste.Items.Strings[i] = 'tata' ) then
           isCodeSpecifique := true;
        ds.Post;
    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
    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
     
    procedure TForm1.dsAfterInsert(DataSet: TDataSet);
    Begin
        insertiondansliste := True;
    End;
     
    procedure TForm1.dsAfterPost(DataSet: TDataSet);
    var
      i      : integer;
      bool : Boolean;
    begin
        if insertiondansliste then begin
          NbItemsDansMaliste := NbItemsDansMaliste + 1;
          insertiondansliste := False;
        end;
        bool:= False;
        for i := 0 to NbItemsDansMaliste - 1 do begin
          if ( Copy(Maliste.Items.Strings[i],0,10) = dsCode.Value ) then begin
            bool := True;
            break;
          end;
        end;
        if ( bool = False ) then
          i := NbItemsDansMaliste - 1;
        Maliste.Items.Strings[i] := dsCode.Value;
        if ( Maliste.Items.Strings[i] = 'toto' ) or 
           (  Maliste.Items.Strings[i]= 'tata' ) then
           isCodeSpecifique := true;
    end;
     
    procedure TForm1.dsBeforeDelete(DataSet: TDataSet);
    var
      i : integer;
      bool : boolean;
    Begin
      bool := false;
      for i := 0 to NbItemsDansMaliste - 1 do begin
        if ( copy(Maliste.Items.Strings[i],0,10) = dsCode.Value ) then begin
         	if ( Maliste.Items.Strings[i] = 'toto' ) or 
           	   (  Maliste.Items.Strings[i]= 'tata' ) then
           isCodeSpecifique := False;
          bool := true;
          break;
        end;
      end;
    {...}
    End;
    J'espère avoir été plus clair!

  5. #5
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Regarde si tes items ne possèderaient pas une propriété libre comme Tag ou Hint ou quelque chose d'autre qui pourrait te permettre de stocker ce flag... car en effet, si tu dois à chaque fois parcourir la totalité des items, ça risque d'être lourd lorsque tu auras beaucoups d'items. Sinon, la solution sera de créer une propriété suplémentaire à l'objet.
    [EDIT] Malgré tout, si tu veux effectuer une action à l'ensemble des items, tu seras bien obligé de parcourir la liste...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    Merci à tous.
    Ce qui me pose le plus de problème c'est la répétition du test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( Maliste.Items.Strings[i] = 'toto' ) or 
      ( Maliste.Items.Strings[i] = 'tata' ) then
      isCodeSpecifique := ...
    En effet je dois rajouter un nouveau test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( Maliste.Items.Strings[i] = 'titi' ) then
      isCodeSpecif2 := true;
    Tous ces tests en dur polluent le code. Peut-être faudrait-il que je crée une table pour chaque spécificité. Mais est-ce malin de créer une table pour 2 codes?? Sinon j'avais pensé à une classe dédiée qui traite les codes spécifiques mais ça me paraît un peu dur à monter dans mon cas.

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

Discussions similaires

  1. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 15h41
  2. [CR8.5] petite question ..
    Par mcrocher dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 13/09/2004, 16h04
  3. Une petite question
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/08/2004, 17h19
  4. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 17h35
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 14h49

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