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

Langage Delphi Discussion :

pb tstrings insoluble


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut pb tstrings insoluble
    Bonjour à tou(te)s
    Je dois gérer une liste de 39000 lignes
    L'aide D6 indique, pour l'utilisation d'une TStringList
    unit Unit1;
    interface
    public
    { Déclarations publiques }
    ClickList: TStrings;
    end;
    var
    Form1: TForm1;
    implementation
    {$R *.DFM}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ClickList := TStringList.Create;
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    ClickList.Free;
    end;
    J'ai respecté scrupuleusement cette structure... mais je me heurte à un os et de taille!
    Sans que je sache pourquoi,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClickList.add('chaîne');
    ne fonctionne que dans la procédure TForm1.FormCreate
    Dans une autre procédure, la compile plante...
    [Erreur] pal1.pas(110): Identificateur non déclaré : 'ClickList'
    et si je cherche à initialiser mes 39000 lignes dans TForm1.FormCreate,
    [Erreur] partage.pas(38962): Trop de constantes locales. Utilisez des procédures plus courtes.
    C'est à devenir fou...
    Y'aurait pas un bon psychiatre Delphi dans l'coin

    ?????????????????

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Par défaut
    [Erreur] pal1.pas(110): Identificateur non déclaré : 'ClickList'
    Le problème est que tu fait référence à ClickList dans l'unité Pal1 qui n'a peut être pas en uses le Unit1.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Par défaut
    Est ce que tu utilises ClickList dans une méthode de TForm1 ? sinon c'est normal que cela ne soit pas visible

    Une unité de 39 000 ça fait beaucoup et cela ne doit pas être facile à maintenir. Qu'est ce qu'il y a dans tes 39 000 lignes.

    Attention dans certains cas Dephi (tous les langages basé sur la syntaxe Pascal) est incapable de trouver la ligne exacte contenant l'erreur de syntaxe et renvoie un message d'erreur des dizaines ou des centaines de ligne plus loin.

  4. #4
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    Pour jenesuispasunrobot
    Les noms d'unités (copiés) depuis l'aide ne sont pas corrects... c'est tout!
    Pour cpdump
    Tout se trouve sur la même unité
    Mes 39000 lignes sont les communes de France
    J'ai fait un essai avec une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClickList.add('chaîne');
    ne fonctionne pas en-dehors de la procédure TForm1.FormCreate

    PIN-PON!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  5. #5
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Citation Envoyé par OutOfRange
    ne fonctionne pas en-dehors de la procédure TForm1.FormCreate
    C'est à dire ? Ou ca en particulier ?

    Mettre 39000 ligne de Add(''), c'est heu... pas terrible. Tu mets un fichier texte avec la liste et tu le charges avec CleckList.LoadFromFile()
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  6. #6
    bjl
    bjl est déconnecté
    Membre chevronné Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Par défaut
    bonjour,

    une petite question car ce n'est pas clair.

    ClickList est bien dans les déclarations publiques de TForm1 ?


    si oui, dans une autre unit après y avoir déclaré unit1 dans les uses, il faudrait utiliser Form1.clicklist

    de plus, CLiscklist étant de type Tstrings, tu dévrais récupérer des erreurs de type abstract.

    j'aurais plutôt déclarer ClickList en Tstringlist. sinon, il va falloir écrire
    Tstringlist(Form1.clicklist).add(....) pour éviter les ereurs abstraites.

    dernier point, avant ClickList.free, j'aurais fait CLicklist.clear;

  7. #7
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    OK, je n'ai pas été super clair
    Ce code est compilé sans pb
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      listcp:TStrings;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      listcp:=TStringList.Create;
      listcp.Add('chaine');
    end;
     
    end.
    alors que celui-ci plante à la compile
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      listcp:TStrings;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      listcp:=TStringList.Create;
    end;
     
    procedure crealist;
    begin
      listcp.Add('chaine');
    end;
     
    end.
    La seule différence est l'emplacement de la ligne
    Pour répondre à NONO40, je voulais éviter de devoit trimbaler un fichier en appendice à mon .exe...

    AÏE AÏE AÏE

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Par défaut
    normal car la procedure Crealist n'a pas accès à ta form. sois tu déclare la procédure comme une procédure privée de ta form soit tu fais référence à ta form en mettant Form1.listcp.Add('chaine');

  9. #9
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    OK je commence à comprendre
    En fait listcp est objet de Form1, même si cet objet est non graphique
    OULALA... Y'a encore des progrès à faire
    Merci

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 947
    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 947
    Billets dans le blog
    6
    Par défaut
    ou tu déclares dans les variables de l'Unit1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var 
      Form1: TForm1;
      listcp:TStringList;
    (ou dans une section var de la partie implémentation si listcp n'a pas besoin d'être accessible en dehors de l'Unit1)
    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 !

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

Discussions similaires

  1. Affectation d'un champs blob dans une var de type TStrings
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/03/2005, 19h26
  2. Convertir un TStrings en char
    Par syphicoque dans le forum C++Builder
    Réponses: 11
    Dernier message: 04/04/2004, 23h59
  3. problème insoluble avec CHECK
    Par NiBicUs dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 25/03/2004, 18h13
  4. Concaténer TStrings
    Par Tuxxy dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/03/2003, 13h30
  5. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 12h47

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