ReadComponentResFile [Résolu]

Messages postés
27
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
19 décembre 2007
- - Dernière réponse :  Utilisateur anonyme - 19 déc. 2007 à 23:42
bonjour,
je voudrais charger un TCheckListBox, tel que je l'ai enregistré en quitant mon application avec la méthode WriteComponentResFile, mais j'obtiens toujours un message d'erreur "indice hors limite(0)"
j'ai fait un essai avec un TMemo et tout se passe bien, quelqu'un peut il m'expliquer le problème ?

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClasses([TCheckListBox]);
  If fileExists('MPB.dat') then
   begin
    MCLB.Items.Clear;
     Readcomponentresfile('MPB.dat',MCLB);
    end;
Afficher la suite 
A voir également:

7 réponses

Meilleure réponse
3
Merci
Suivant les versions de Delphi il y a des beugs : par exemple sous D6, il y a souvent une dll qui fait des siennes.

Cependant je ne pense pas que ton problème vienne de là  : je pencherai plutot pour un fichier .dat éronné.

Comme les bouts de code que l'on t'a passé fonctionne  : oublie pas de valider les réponses. Ca pourrait aider quelqu'un dans le futur .

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
0
Merci
Salut

Tu as oublié de créer ton compo :

procedure TForm1.FormCreate(Sender: TObject);
Var
MCLB:TCheckListBox;
begin
RegisterClasses([TCheckListBox]);
  If fileExists('MPB.dat') then
   begin
    MCLB:=TCheckListBox.Create(Self);
    MCLB.Items.Clear;
    Readcomponentresfile('MPB.dat',MCLB);
    end;
 End;

Oublie pas de supprimer les composants prédéfinis : comme ils sont dans le fichier aussi ca risque de beuguer sinon
Commenter la réponse de Utilisateur anonyme
Messages postés
27
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
19 décembre 2007
0
Merci
Cela ne fonctionne pas => message "composant MCLB déja existant"

par  Oublie pas de supprimer les composants prédéfinis : comme ils sont dans le fichier aussi ca risque de beuguer sinon.
tu veux dire  MCLB.destroy dans Form1.destroy ? C'est pas mieux!
Commenter la réponse de djiki
0
Merci
Salut

procedure TForm1.FormCreate(Sender: TObject);
Var
MCLB:TCheckListBox;
begin
RegisterClasses([TCheckListBox]);
  If fileExists('MPB.dat') then
   begin
    MCLB:=TCheckListBox.Create(Self);
    MCLB.Items.Clear;
    Readcomponentresfile('MPB.dat',MCLB);
    end;
 End;

Ca fonctionne : j'ai testé avant de poster ce bout de code. Maintenant si ton TCheckListBox est déja présent sur ta forme, effectivement ca beugue dans la mesure ou tu recrée ta TCheckListBox dynamiquement. Mais vu que tu le précises pas : j'ai pris l'option de le gérer dynamiquement.

Non je veux dire libérer c'est à dire Free ou FreeAndNil.
Commenter la réponse de Utilisateur anonyme
Messages postés
2526
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
12
0
Merci
Salut,

@ djiki

C'est zarbi, je ne parviens pas à avoir la même erreur que toi...
Avec un TCheckListBox qui existe à la conception, il n'y a pas de problème.



procedure TForm1.FormCreate(Sender: TObject);
  begin
  If fileExists('MPB.dat') then
  //RegisterClasses([TCheckListBox]); --> inutile si existe déjà.
  Readcomponentresfile('MPB.dat',MCLB);
end;



procedure TForm1.FormDestroy(Sender: TObject);
  begin
  WriteComponentResFile('MPB.dat',MCLB);
end;



Le seul problème, c'est que les cases cochées ne sont pas sauvegardées car seules les propriétés publiées sont mises automatiquement dans le flux. Il faut donc les mémoriser à la main.

-------------------------------------


Ou alors, tu crées ton TCheckListBox dynamiquement et c'est l'option de Francky qui est la bonne.
Commenter la réponse de Caribensila
Messages postés
27
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
19 décembre 2007
0
Merci
Salut,
Effectivement leTCheckListBox est  déja  présent .
je suis d'accord que le registerclasses est inutile ,mais j'avais essayer de faire MCLB.free avant de lire lefichier.dat et dans ce cas y en besoin

j'ai le même code que toi Caribensila, une précision tout de même je suis en D7 édition perso, ça peut jouer ?
Commenter la réponse de djiki
Messages postés
27
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
19 décembre 2007
0
Merci
Rebonjour,
J'ai tout effacer et tout recommencer à zéro;
Maintenant ça fonctionne......Vous avez dit bizarre ???

Merci quand même de vous être penché sur le problème.
Commenter la réponse de djiki