ReadComponentResFile [Résolu]

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

Votre réponse

7 réponses

Meilleure réponse
Utilisateur anonyme - 19 déc. 2007 à 23:42
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 .

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 18 déc. 2007 à 21:20
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
djiki 27 Messages postés dimanche 9 janvier 2005Date d'inscription 19 décembre 2007 Dernière intervention - 19 déc. 2007 à 07:04
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
Utilisateur anonyme - 19 déc. 2007 à 09:21
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
Caribensila 2679 Messages postés jeudi 15 janvier 2004Date d'inscription 19 juillet 2018 Dernière intervention - 19 déc. 2007 à 14:33
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
djiki 27 Messages postés dimanche 9 janvier 2005Date d'inscription 19 décembre 2007 Dernière intervention - 19 déc. 2007 à 19:55
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
djiki 27 Messages postés dimanche 9 janvier 2005Date d'inscription 19 décembre 2007 Dernière intervention - 19 déc. 2007 à 22:09
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.