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 :

Capacité maximale d'une TListBox


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut Capacité maximale d'une TListBox
    Bonjour à tous

    Quelle est la capacité maximale (KB) d'une TListBox ?

    J'ai tenté de charger plus de 300000 mots dans la listbox sans succès.

    C'est marrant la TStringList charge les mots sans problème, la listbox est bien basée sur une TStrings


    Merci
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  2. #2
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    J'ai peut être une piste : MaxListSize

    Nom : IMG_2355.jpeg
Affichages : 123
Taille : 160,7 Ko
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  3. #3
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Après de nombreuses tentatives à essayer de faire rentrer une liste de mots (dictionnaire) 336529 mots) dans une TListBox sans succès.

    J'ai donc décidé d'opter pour une TStringGrid.

    Après, j'avais une autre solution : Travailler directement avec la TStringList pour faire une recherche avec la fonction (System.StrUtils.ContainsText) puis d'afficher les résultats trouvés dans la TListBox, même avec cela j'arrive avec des résultats à plus 200000 en fonction de la recherche. J'ai abandonné la TListBox !
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    je passe sur la joie de sélectionner un élément dans une liste de 300 000 éléments

    mais tu as essayé le style lbvirtual pour ta tlistbox ?

    cela existe depuis Delphi 6

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    Après de nombreuses tentatives à essayer de faire rentrer une liste de mots (dictionnaire) 336529 mots) dans une TListBox sans succès.

    J'ai donc décidé d'opter pour une TStringGrid.

    Après, j'avais une autre solution : Travailler directement avec la TStringList pour faire une recherche avec la fonction (System.StrUtils.ContainsText) puis d'afficher les résultats trouvés dans la TListBox, même avec cela j'arrive avec des résultats à plus 200000 en fonction de la recherche. J'ai abandonné la TListBox !
    Bonjour, sans garantie car je n'ai pas testé. Tu passe le parent à nil le temps de l'opération de chargement. J'ai été confronté au même problème il y a 20 ans et j'avais trouvé cette solution. C'était sous Delphi 7. Visible := false devrait marcher

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 700
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 700
    Points : 13 138
    Points
    13 138
    Par défaut
    Pour de grandes listes de mots, il serait préférable de passer par un stream pour le chargement.
    Et pour une recherche performante, une THashedStringList.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 877
    Points
    24 877
    Par défaut
    Autant travailler avec un TClientDataSet et profiter du fenêtre du TDBGrid pour ce genre de longue collection dont l'affichage semble fort difficile et peu pertinent

    Citation Envoyé par XeGregory Voir le message

    C'est marrant la TStringList charge les mots sans problème, la listbox est bien basée sur une TStrings
    i
    TStrings est abstraite TStringList est une implémentation Delphi pure, alors que pour la ListBox, c'est une implémentation via les API windows, le code n'a rien en commun hors de l'abstraction
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Voici ma fonction de chargement avec le composant TStringGrid

    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
    { LoadDico }
    function TFDictionary.LoadDico: Boolean;
    const
      RESDico = 'Dico';
    var
      ResFile: TResourceStream;
      Stream: TStringStream;
      List: TStringList;
      Row: Integer;
    begin
      if (FindResource(hInstance, PChar(RESDico), RT_RCDATA) <> 0) then
      begin
        try
          ResFile := TResourceStream.Create(hInstance, PChar(Dico_WinDoc), RT_RCDATA);
          ResFile.Position := 0;
          Stream := TStringStream.Create;
          ECLDecompressStream(ResFile, Stream, EmptyStr); // Easy Compression Library (componentace.com)
          Stream.Position := 0;
     
          List := TStringList.Create;
          List.LoadFromStream(Stream, TEncoding.UTF8);
     
          WordList.Perform(WM_SETREDRAW, 0, 0);
          WordList.RowCount := List.Count;
          TabSheetDico.Caption := IntToStr(WordList.RowCount) + ' Mots';
     
          for Row := 0 to List.Count - 1 do
            WordList.Cells[0, Row] := List.Strings[Row];
     
          WordList.Perform(WM_SETREDRAW, 1, 0);
          WordList.Invalidate;
     
          Result := True;
        except
          Result := False;
        end;
     
        FreeAndNil(ResFile);
        FreeAndNil(Stream);
        FreeAndNil(List);
      end
      else
        Result := False;
    end;
    Ma procedure de 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    { SearchWord }
    procedure TFDictionary.SearchWord(Word: String);
    var
      Row, RowCnt: Integer;
    begin
      PageControl.ActivePage := TabSheetDico;
     
      RowCnt := -1;
      WordFindList.Perform(WM_SETREDRAW, 0, 0);
      WordFindList.RowCount := 0;
      WordFindList.Cells[0, 0] := EmptyStr;
     
      for Row := 0 to WordList.RowCount - 1 do
      begin
        if ContainsText(UpperCase(WordList.Cells[0, Row]), UpperCase(Word)) then
        begin
          Inc(RowCnt);
          WordFindList.RowCount := RowCnt;
          WordFindList.Cells[0, RowCnt] := WordList.Cells[0, Row];
          Continue;
        end;
      end;
     
      WordFindList.Perform(WM_SETREDRAW, 1, 0);
      WordFindList.Invalidate;
     
      if RowCnt > 0 then
      begin
        PageControl.ActivePage := TabSheetFind;
        TabSheetFind.Caption := 'Mots contenant ( ' + IntToStr(WordFindList.RowCount) + ' )';
      end;
    end;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  9. #9
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Autant travailler avec un TClientDataSet et profiter du fenêtre du TDBGrid pour ce genre de longue collection dont l'affichage semble fort difficile et peu pertinent
    En effet, il avait également cette solution la.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  10. #10
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Malgré tout, le chargement dans la TStringGrid ne demande que 2 secondes max pour charger les plus de 300000 mots.
    En comparaison avec une TListBox qui demande un temps considérable a la création d'items, la TStringGrid est bien plus rapide je trouve.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 877
    Points
    24 877
    Par défaut
    TStrings est abstraite TStringList est une implémentation Delphi pure, alors que pour la ListBox, c'est une implémentation via les API windows, le code n'a rien en commun hors de l'abstraction
    la TStringGrid utilise encore une autre implémentation Delphi pour rendre compatible une matrice de chaine avec une vision Colonne par Colonne ou Ligne par Ligne.

    Ne jamais oublier les BeginUpdate et EndUpdate, encore plus sensible sur les versions APi Windows que les versions Delphi pure.

    Pour la TStringGrid, j'avais fait pour le forum une classe TStringGridCrossManager pour le sauvegarder et charger pour stockage plus compact qu'un CSV
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 877
    Points
    24 877
    Par défaut
    Citation Envoyé par exoseven Voir le message
    je passe sur la joie de sélectionner un élément dans une liste de 300 000 éléments

    mais tu as essayé le style lbvirtual pour ta tlistbox ?

    cela existe depuis Delphi 6
    C'est de loin une méthode bien plus performante, voir ce sujet sur une TListView en OwnerData qui est similaire au lbvirtual de la TListBox

    Cela fonctionne aussi par fenêtrage des données, cela n'affiche que les items visible et l'on peut mettre ce que l'on veut derrière pour gérer les données (tant que l'on peut gérer un index de 0 à n)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est de loin une méthode bien plus performante, voir ce sujet sur une TListView en OwnerData qui est similaire au lbvirtual de la TListBox

    Cela fonctionne aussi par fenêtrage des données, cela n'affiche que les items visible et l'on peut mettre ce que l'on veut derrière pour gérer les données (tant que l'on peut gérer un index de 0 à n)
    En effet, c'est la bonne approche : Le chargement de données dynamique.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  14. #14
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i1 : integer ;
    begin
     SL1 := TStringlist.Create ;
      for i1 := 1 to 300000 do
        sl1.Add('test '+i1.ToString) ;
      ListBox1.Items.Text := sl1.Text ;
    end;
    Moins de 3 secondes chez moi

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 877
    Points
    24 877
    Par défaut
    Ou encore plus rapide puisqu'il n'y a pas de sérialisation et désarialisation, mais ce temps est negligleable façon à la création de 300 000 items dans un TListBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.AddStrings(sl1) ;
    Ou même Assign

    Et lorsque l'on connaît le code de AddStrings ou SetDelimitedText, c'est grace à BeginUpdate et EndUpdate que les temps sont réduits, les temps sont équivalents à +/-10%, aucun des trois ne prend rééllement l'avantage sur une moyenne de 10 fois chaque lot de 300 000 insertions.
    Sans Update c'est 10x plus lent

    Et directement dans la TStringList, c'est 100x plus rapide que dans la TlistBox
    Soit 1000x plus rapide TlistBox Sans Update.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
      i1 : integer ;
      lbi: TStrings;
    begin
      lbi := ListBox1.Items;
      lbi.BeginUpdate();
      try
        for i1 := 1 to 300000 do
          lbi.Add('test '+i1.ToString) ;
      finally
        lbi.EndUpdate();
      end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i1 : integer ;
    begin
     SL1 := TStringlist.Create ;
      for i1 := 1 to 300000 do
        sl1.Add('test '+i1.ToString) ;
      ListBox1.Items.Text := sl1.Text ;
    end;
    Moins de 3 secondes chez moi
    Dico txt.zip
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 877
    Points
    24 877
    Par défaut
    cela fait juste 20% de plus que la boucle, le temps lié au disque et le fait le fichier fait 330 000 lignes, cela reste que 6,5s sur mon poste professionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.LoadFromFile('Dictionnaire.txt');

    La mauvaise idée serait de lire cela dans une TStringList, de la parcourir pour remplier manuellement la TListBox sans mettre BeginUpdate


    Quelle est la version de Delphi ?
    La VCL est basée sur les API Windows, la version des common controls peut aussi jouer sur les limites, par exemple en D7 sans XPManifest, cela peut être différent avec, c'est la version ANSI souvent très limité (bcp d'API ont des buffer max plus petit en ANSI qu'en WIDE)
    Etant en D10, c'est la même version normalement mais en version UNICODE ce qui peut changer le comportement

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>

    la documentation évoque une limite pour Windows 9x ... mais par pour NT, quel que soit la version

    Windows 95/Windows 98/Windows Millennium Edition (Windows Me) : The wParam parameter is limited to 16-bit values. This means list boxes cannot contain more than 32,767 items. Although the number of items is restricted, the total size in bytes of the items in a list box is limited only by available memory.

    EDIT :
    En relisant les codes fournies pour la StringGrid, on constate que c'est avec du TEncoding donc surement un Delphi récent et le temps même avec le décodage UTF8 est similaire autour de 6s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.LoadFromFile('Dictionnaire.txt', TEncoding.UTF8);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  18. #18
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Par défaut
    Même en chargeant ma liste de cette façon-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox.Items.LoadFromFile('Dictionnaire.txt');
    Je ne parviens même pas à obtenir le quart de la liste. Lors du déplacement vertical, ça bug.


    J'utilise une version Delphi 11
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  19. #19
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 877
    Points
    24 877
    Par défaut
    D'ailleurs, pourquoi remplir manuellement la TStringGrid ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      StringGrid1.Cols[0].LoadFromFile('Dictionnaire.txt', TEncoding.UTF8);
    Et c'est si depuis une ressource décompressé dans Stream et uniquement la première colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      StringGrid1.Cols[0].LoadFromStream(Stream, TEncoding.UTF8);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  20. #20
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 265
    Points : 171
    Points
    171
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Capacité maximale d'une base de données MySQL
    Par noakiss dans le forum Débuter
    Réponses: 4
    Dernier message: 26/05/2008, 16h15
  2. Limite maximale d'une table INTERBASE 7
    Par lio33 dans le forum InterBase
    Réponses: 4
    Dernier message: 26/08/2005, 14h04
  3. Ouvrir un fichier sur un double-clic dans une TListBox
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 4
    Dernier message: 09/08/2004, 17h22
  4. Comment griser une ligne dans une TListBox ?
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/06/2004, 09h15
  5. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39

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