ReadComponentResFile

Résolu
djiki Messages postés 27 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 19 décembre 2007 - 18 déc. 2007 à 19:35
 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;

7 réponses

Utilisateur anonyme
19 déc. 2007 à 23:42
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 .
3
Utilisateur anonyme
18 déc. 2007 à 21:20
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
0
djiki Messages postés 27 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 19 décembre 2007
19 déc. 2007 à 07:04
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!
0
Utilisateur anonyme
19 déc. 2007 à 09:21
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 déc. 2007 à 14:33
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.
0
djiki Messages postés 27 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 19 décembre 2007
19 déc. 2007 à 19:55
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 ?
0
djiki Messages postés 27 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 19 décembre 2007
19 déc. 2007 à 22:09
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.
0
Rejoignez-nous