ReadComponentResFile [Résolu]

Messages postés
27
Date d'inscription
dimanche 9 janvier 2005
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:

Votre réponse

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 a aidé 99 internautes 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
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
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
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
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
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.