Enregistrement et chargement d'un TComponent dans un fichier
cs_pichu
Messages postés28Date d'inscriptiondimanche 9 mars 2003StatutMembreDernière intervention 8 juin 2005
-
7 mai 2004 à 10:45
cs_pichu
Messages postés28Date d'inscriptiondimanche 9 mars 2003StatutMembreDernière intervention 8 juin 2005
-
27 mai 2004 à 14:55
bonjour
je n'arrive pas a trouver comment enregistrer (serialiser) et relire un TComponent (comme un TButton) dans un fichier
En fait j'arrive à enregistrer le Tbutton dans le fichier mais a la lecture j'ai des erreurs..
sur internet je n'arrive pas a trouver un code simple expliquant comment faire
Merci de votre aide
Pour enregistrer je fais:
procedure TForm1.Enregistre(Sender: TObject);
var
F: TextFile;
s : string;
begin
OpenDialog1.Execute();
s := OpenDialog1.FileName;
AssignFile(F, s);
Rewrite(F);
Writeln(F, ComponentToString(Button2));
CloseFile(F);
end;
et pour lire :
procedure TForm1.Chargement(Sender: TObject);
var
F: TextFile;
s,re : string;
T : TButton;
begin
OpenDialog1.Execute();
s := OpenDialog1.FileName;
AssignFile(F, s);
Reset(F);
Readln(F, re);
T := TButton.Create(Panel3);
T := TButton(StringToComponent(re));
CloseFile(F);
end;
Les fonctions ComponentToString et StringToComponent sont celles données dans l'aide, cad :
function StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 7 mai 2004 à 12:10
Il ya bien plus simple que celà : voir WriteComponentResFile et son homologue ReadComponentResFile.
Démonstration à l'appui sur le site de Nono40.
May Delphi be with you
cs_pichu
Messages postés28Date d'inscriptiondimanche 9 mars 2003StatutMembreDernière intervention 8 juin 2005 11 mai 2004 à 12:11
il existerai pas une fonction qui sauve aussi les enfants des enfants .. du composant?
car WriteComponentResFile sauve que les enfants mais pas les petits enfants du composant...comme par exemple un panel qui contient un autre panel.. et un autre...
sinon il faut le faire de facon recursive je pense