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 :

Message d'erreur avec TreeView1.LoadFromFile(NomFichier) ?


Sujet :

Langage Delphi

  1. #1
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut Message d'erreur avec TreeView1.LoadFromFile(NomFichier) ?
    Bonjour,

    J'ai le message d'erreur suivant :
    Le projet Treeview.exe a provoqué une classe d'exception ETreeViewError avec le message 'Niveau incorrect (6) pour l'élément "Test.tpe". Processus stoppé. Utiliser Pas-à-pas ...


    Et le compilo pointe la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try TreeView1.LoadFromFile(NomFichier);
    ... alors qu'il s'agit d'un fichier créé au préalable avec TreeView1.SaveToFile(NomFichier);
    ... et comme je n'ai pas accès au code du TTreeView.LoadFromFile() impossible d'y utiliser le "Pas-à-pas".
    ... l'erreur se produit avec le fichier créé à partir du Disque D:\ mais ne se produit pas avec un fichier créé à partir du dique C:\

    Quelqu'un pourrait-il me mettre sur la piste de ce bug ???

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Delphi Perso, tu n'a pas les sources, diffcile de debugguer !
    Si tu as un Delphi Pro ou plus, active les DCU de Débogage, tu pourras descendre dans le code !

    Delphi combien d'ailleurs ?
    Tu n'as pas mis d'espace au début d'un libellé ? ni un retour charriot d'ailleurs ! Il n'y a aucune protection la dessus !
    Ton fichier n'est pas tronqué ?
    Normalement, ton erreur ne peut se produire que si tu passe directement du niveau 4 au niveau 6
    Le même fichier sur C et sur D, le premier fonctionne et le second échoue, c'est fort !

    Peux tu donner un extrait du fichier, là ou se trouve "Test.tpe"

    normalement tu peux avoir (. = tab)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .....Parent
    ......Test.tpe
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ......Frère
    ......Test.tpe
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    .....Parent
    ......Frère
    .......Petit-Fils
    ........Arrière-Petit-Fils
    ......Test.tpe
    Je n'ai jamais utilisé le SaveToFile d'un TTreeView, je n'ai jamais eu besoin de ça, en général mes Tree était généré par DB
    Mais j'ai aidé dans ce sujet :

    Gestion complète d'une TreeView: ajout de noeuds, records et sauvegarde du tout

    Le but était de sauvegarde Node et Data !
    Méthode brutale en utilisant le système de Flux (~DFM)
    Je ne l'ai jamais utilisé moi même, je ne sais pas si petitprince, l'a finalement utilisé dans son appli et si cela a tenu depuis sans soucis de décalage des Data !

    EDIT
    J'ai lu le code de SaveTreeToStream de la VCL, c'est limite honteux !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NodeStr := '';
    for i := 0 to ANode.Level - 1 do NodeStr := NodeStr + TabChar;
    Nettement plus rapide et en plus en utilisant des fonctions standards ! c'est un stagiaire de Borland qui fait ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ANode.Level > 0 then
      NodeStr := StringOfChar(TabChar, ANode.Level)
    else
      NodeStr := '';
    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

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par Gilbert Geyer Voir le message
    ... l'erreur se produit avec le fichier créé à partir du Disque D:\ mais ne se produit pas avec un fichier créé à partir du disque C:\
    Je ne saisi pas bien cette remarque !
    Si tu fais des SaveToFile/LoadFromFile vers/depuis C:\ c'est OK, et à l'inverse ça plante avec D:\.

    C'est ça ?

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Merci pour ces pistes.

    A ShaiLeTroll
    Delphi combien d'ailleurs ?
    ... J'ai uniquement Delphi-5 Standard.

    Tu n'as pas mis d'espace au début d'un libellé ? ni un retour charriot d'ailleurs ! Il n'y a aucune protection la dessus !
    ... les libellés sont directement copiés sur le disque avec SearchRec.Name ... mais du coup je vais essayer avec Trim(SearchRec.Name)

    Ton fichier n'est pas tronqué ?
    ... je ne sais pas et comment le savoir ?

    Normalement, ton erreur ne peut se produire que si tu passe directement du niveau 4 au niveau 6 ...
    normalement tu peux avoir (. = tab)
    ... ceci me donne envie d'essayer d'ouvrir le fichier dans un RichEdit par exemple ... si c'est faisable.
    ... et je vais aussi vérifier que les SearchRec.Name ne contiennent pas un caractère Tab qui fait passer du

    Le but était de sauvegarder Node et Data !
    ... dans mon appli j'utilise uniquement TreeView1.SaveToFile et TreeView1.LoadFromFile pour sauver/récupérer les libellés des items dans un premier fichier. Et comme les images sont déjà stockées dans un TImageList je sauvegarde uniquement les indices de correspondance dans un deuxième fichier . Cet ensemble est nettement plus rapide que l'utilisation de ReadComponentResFile(NomFichier, TreeView1) et de WriteComponentResFile(,)

    A Cl@udius
    Je ne saisis pas bien cette remarque !
    Si tu fais des SaveToFile/LoadFromFile vers/depuis C:\ c'est OK, et à l'inverse ça plante avec D:\.
    ... exactement, et comme les libellés du D:\ sont différents de ceux du C:\ il y a probablement sur le D:\ un caractère parasite qui est accepté par le saveToFile mais qui provoque un bug lors du LoadFromFile.


    Je vais donc faire les essais évoqués, et vous tiendrai au courant.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bonjour,

    Résultats des essais :

    1) Ouverture avec RichEdit1.LoadFromFile d'un fichier créé avec TreeView1.SaveToFile :
    Cela marche : on affiche toute l'arborescence. Mais vu la longueur du texte c'est difficile d'y dénicher à l'oeil la présence d'un caractère parasite.

    2) Remplacement de SearchRec.Name par Trim(SearchRec.Name) lors du scan du disque qui crée le treeView : le treeView ainsi crée puis sauvé avec SaveToFile s'ouvre maintenant avec LoadFromFile sans déclencher de bug : Ouf ! c'était donc bien une histoire de caractère parasite évoquée par ShaiLeTroll.
    Par contre cela m'intrigue que les SearchRec.Name puissent contenir en début ou en fin des caratères parasites éliminés par Trim ?

    En tous cas mille fois merci : problème résolu.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. message d'erreur avec mysql
    Par ulysse031 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 07/02/2007, 19h23
  2. les messages d'erreurs avec "yacc/bison"
    Par minirop dans le forum C
    Réponses: 6
    Dernier message: 20/12/2006, 18h17
  3. message d'erreur avec le Run Time Access 2003
    Par barbu44 dans le forum Runtime
    Réponses: 3
    Dernier message: 10/12/2006, 14h03
  4. message d'erreur avec borland c++
    Par sally042 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 06/12/2006, 15h41
  5. Message d'erreur avec Bulk Insert
    Par Shivas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 12h03

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