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 :

Aide pour l'instruction rechercher


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 175
    Points : 82
    Points
    82
    Par défaut Aide pour l'instruction rechercher
    bien le bonjour à vous;
    je viens cette fois aussi our soliciter votre aide concernant le EDI Delphi,
    moi j'utilise pour l'instant delphi 5, j'ai pas trouver mon cd delphi 7 ...........
    ben, mon problème c que j'ai créer j'utilise le composant listbox, je l'ai remplit bien sur, un bouton rechercher, un edit qui sert a définir le mot que je veut rechercher,
    bien sur j'ai etablis un petit prog de recher qui quand il trouve le mot à rechercher dans la listbox, ce dernier va etre sélectionner, (comme la fonction rechercher dans le word ou dans l'acrobat rader),alors j'ai employé ce petit prog:

    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
    var x:string;
    y:integer;
    trouv:boolean;
    begin
    x:=edit1.text;
    y:=listbox1.items.count;
    for i:=0 to y do
    begin
    if listbox1.items[i]=x then
    trouv=true;
    end;
    if trouv=true then
    listbox1.selected[i]:=true
    else
    label1.caption:='ce mot n''existe pas dans la list, veuillez taper un autre mot';
    end.
    je sais trés bien qu'il y'a une faute, mais dés fois mon cerveau arrete de marcher.
    merci pour votre aide et mes respects.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    même si effectivement votre code va parvenir à trouver l'item dans la liste (trouv = true) la boucle for va continuer à se dérouler jusqu'à atteindre la fin (même pas car en vérité vous allez sortir du tableau vu que vous ne faites pas Count - 1).

    Le bon algorithme est le suivant :

    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
    var
      Trouve: Boolean;
      Cpt: Integer;
    begin
      Trouve = False;
      Cpt := 0;
     
      while not Trouve and ( Cpt <= listbox1.Items.Count - 1 )
        if listbox1.Items[Cpt] = edit1.Text then
         Trouve = True
        else
         Inc( Cpt );
     
      if Trouve then
        listbox1.Items[Cpt].Selected := True;
     
    end;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 175
    Points : 82
    Points
    82
    Par défaut
    tous dabord, je vous remerci, c'est vrai, j'ai oblier c'est comme l'indice d'un tableau, juste une question s'il vous plait, si
    on met pas else , que sera le resultat....? moi en rélité j'utilise beaucoup la boucle for , je pense avec while il faut l'incrémentation de l'index, mais avec for c pas la peine d'ajouter le else,
    en réalité j'amierai bien aprendre de votre experience qunad il faut mettre le else et quand il ne le faut pas le mettre.
    excusez moi, je pose trop de question, je vous assure je lis beaucoup ce qui concerne l'informatique et d'autre aussi, mais jusqu'a maintenant j'ai pas trouver de réponse.
    mes respects

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    as tu essayé avec la méthode IndexOf de la propriété Items du Listbox ?
    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      i :Integer;
    begin
      i := ListBox1.Items.IndexOf(Edit1.Text); //renvoie -1 si aucune occurence, sinon l'index de l'élément dans la liste
      if i > -1 then
        ListBox1.ItemIndex := i; //sélectionne l'élément
      else
        ShowMessage('élément non trouvé');
    end;
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
      ListBox1.ItemIndex := ListBox1.Items.IndexOf(Edit1.Text); //ne sélectionne rien dans la liste si aucune occurence, sinon sélectionne le premier élément dont le texte correspond à Edit1.Text
    end;
    pour plus de précisions, voir l'aide en ligne de delphi.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bien un peu de code va mieux parler qu'un cours théorique alors je vais reprendre le raisonnement.

    Voici une boucle qui va itérer de 0 à 9 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for Cpt := 0 to 9 do
    begin
      // code
    end;
    Comme tu l'as dis, cette boucle va incrémenter Cpt de 0 à 9 automatiquement et donc exécuter 10 fois le code contenu dans la boucle for.

    Je peux maintenant traduire cette boucle for en boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Cpt := 0;
    while Cpt <= 9 do
    begin
      // code
      Inc( Cpt );
    end;
    une boucle while exécute le contenu à l'intérieur jusqu'à ce que la condition d'arrêt soit remplie. Ici la condition d'arrêt est que Cpt devienne supérieure à 9. Notez que j'incrémente explicitement Cpt à la fin de la boucle pour itérer (ce inc étant implicite dans une boucle for), si je ne le rajoutais pas alors Cpt garderais toujours la même valeur qu'à l'initialisation (0) et on aboutirait à une boucle infinie.

    Dans notre cas je dois trouver l'index dans la liste dont la valeur corresponde à celle recherchée. Je vais donc représenter si l'élément recherché est trouvé par le booléen Trouve, initialisé à False. Je dois également m'assurer que ma recherche ne m'emmène pas au-delà du nombre d'éléments présents, c'est la condition ( Cpt <= listbox1.Items.Count - 1 ).

    Lors d'un tour de boucle je teste si l'élément en cours correspond à ma valeur recherchée. Si c'est le cas alors Cpt est bien l'index qui m'intéresse, dans ce cas je passe Trouve à True et au tour de boucle suivant la condition d'arrêt est remplie, je sors de la boucle avec Cpt contenant le bon index. Si l'élément en cours n'est pas celui recherchée alors j'incrémente Cpt pour passer à l'item suivant dans la liste (ou bien sortir si on a vérifier tout les éléments de la liste).

    Après la boucle je peux tester si j'ai bien retrouvé mon index grâce au booléen Trouve et si c'est le cas alors je sais que Cpt est mon index à sélectionner.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 175
    Points : 82
    Points
    82
    Par défaut
    salam (dans ma langue le salam veut dire la paix, c'est l'un des noms de dieu)
    mes remerciments pour le cours, vous savez des fois je désespère quand je ne trouve pas la solution de mon problème même chose pour mes ereures, c'est pour ças je quitte la programmation des jours.........
    merci aussi a vous pour la methode IndexOf , enchanter je ne la connait pas vaut mieux que je cherche ses détails pour mieux comprendre.
    mes respects

Discussions similaires

  1. Aide pour la fonction recherche et dictionnaire de variable
    Par Esmax dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/09/2010, 21h47
  2. [XL-2003] Aide pour un code recherche
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/05/2009, 16h31
  3. Aide pour Requete SQL - recherche de critères
    Par AuroreBezu dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/01/2009, 07h54
  4. Réponses: 4
    Dernier message: 02/09/2008, 21h57

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