djiki
Messages postés27Date d'inscriptiondimanche 9 janvier 2005StatutMembreDernière intervention19 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;
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
djiki
Messages postés27Date d'inscriptiondimanche 9 janvier 2005StatutMembreDernière intervention19 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!
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 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.
djiki
Messages postés27Date d'inscriptiondimanche 9 janvier 2005StatutMembreDernière intervention19 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 ?