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 :

Charger une TListBox dans le résultat de Fonction


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut Charger une TListBox dans le résultat de Fonction
    Bonjour à tous

    Eternel débutant je suis!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         function ChargeListeNoms_ToListBox(NomPers: TNom): TListbox;
           var  N     : Tnom;
             Enreg : integer;
         begin
           result.Clear;
           ...
    Il me semble avoir déjà fait ça, mais je retrouve pas mon code et je n'ai pas trouvé sur la toile non plus...
    Le code plante sur la ligne en rouge ci-dessus dans la fonction de recherche qui est appelé de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LBNoms := ChargeListeNoms_ToListBox(aNom); // LBNoms est le nom de la TListBox qui reçoit un résultat de recherche...
    ça devrait marcher non?

    L'erreur est "violation d'accès...", je suis sur DX 10.3

    Merci pour votre aide
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    C'est normal que ça plante : la variable Result est déclarée automatiquement par le compilateur, en revanche c'est à nous de l'instancier.

    Il faut donc un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result := TListbox.Create(Self);
    ou équivalent si tu veux vraiment retourner une TListBox.

    En revanche, je ne suis pas persuadé que tu aies la bonne approche. Est-ce que tu veux remplir LBNoms ou la créer par l'intermédiaire de ta fonction ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    la TListBox résultat n'est pas créée donc il est logique qu'il y ait une erreur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result:=TListBox.Create(self);
    Mais je doute, j'ai l'impression que la TListBox existe déjà,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     procedure ChargeListeNoms_ToListBox(NomPers: TNom; AListBox : TListBox);
     begin
       AListBox.Items.Clear;
       ...
    en fait j'ai tellement pris l'habitude les LiveBindings que je ne sais plus vraiment comment procéder
    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

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    en complement de ce qui a deja etait dis
    plutot que la listBox utilise le TStrings il est aussi là pour ça

    Tu n'as pas besoin d'un objet visuel pour ton traitement c'est des données que tu repasseras a ta listbox
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut passer le TStrings en paramètres
    Bonjour


    L'avantage du Tstrings, est que tu pourra valoriser plein d'autre chose que ta tListBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function mafonction(maliste: TStrings): boolean
    et quand tu l'appelles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  mafonction(TListBox.Items) then...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  mafonction(mastringlist) then...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  mafonction(macombobox.items) then...
    etc.

    Cordialement

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Il vaudrait mieux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure ChargeListeNoms_ToListBox(NomPers: TNom; ListBox: TListbox);
    begin
     
      ...
    end;

  7. #7
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    merci à tous

    Vous avez répondu au delà de mes questions.
    effectivement, ça ne me plait pas de créer un TlisBox alors qu'il existe déjà sur une fiche... merci à pprem qui a relevé mon erreur. Je pensai que résult adoptait la structure TListBox automatiquement...
    Je crois qu'effectivement dans le passé, je devais passer ma TlisBox en paramètre var papyau lieu de la mettre en résultat de fonction.
    du coup, je pense qu'effectivement, je n'ai pas la bonne approche;

    J'adopte donc la création du stringlist préconisé par anapurna et alheuredudejeuner
    Je programme en Lazarus 3.2.2 sous windows 10 pro

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/03/2009, 15h32
  2. [javascript]charger une page dans une cellule
    Par Destampy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/05/2005, 17h21
  3. [PL/SQL] Charger une table dans une collection
    Par nosnoss dans le forum Oracle
    Réponses: 10
    Dernier message: 03/03/2005, 17h56
  4. charger une scene dans la memoire de la carte video
    Par Arnaudv6 dans le forum OpenGL
    Réponses: 10
    Dernier message: 11/09/2004, 01h44
  5. [ServletContext]Charger une ressource dans la servletContext
    Par lalou33 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 25/06/2004, 14h37

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