Opendilog et fichier typé

Résolu
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006 - 9 mars 2005 à 18:37
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 9 mars 2005 à 22:03
bonjour

encore un probleme...

je ne sais pas trop comment marche l opendialog et je voudrai
sauvegarder une liste de point dans un fichier typé avec cet outil.



voici ce que j ai fai:



procedure TF_Courbe_de_Bezier.Enregistrer1Click(Sender: TObject);

var

NomFichier: String;

Ext: string;

fic :T_save;



begin

//F_enregistrement.Show;

if savedialog1.execute

then

NomFichier:= SaveDialog1.FileName; //loadcourbe(opendialog1.filename);

if NomFichier[Length(NomFichier) - Length(Ext) + 1] <> '.'

then

begin

NomFichier:= NomFichier + Ext;

assignfile(fic,NomFichier);

if FileExists(NomFichier)

then

begin

{$I-}

Reset(fic);

{$I+}

SAUVEGARDE(pdebpc, fic);

end

else

showmessage('le fichier n''existe pas');

end;





end;

---------------------------------------------------------------------------------------



procedure SAUVEGARDE(pdebpc:T_ptr_pc; var fac :T_save);

//sauvegarde de la liste de points de controle dans un fichier typé

//Pe: pdeb: pointeur pointant sur le premier élément de la liste des points de controle

//PS: fac: fichier typé contenant la liste sauvegardée



var

paux: T_ptr_pc; //pointeur auxiliaire

info: T_fic; //article du fichier typé



begin

if pdebpc=nil

then //la liste est vide

ShowMessage('la liste est vide.Sauvegarde impossible')

else //la liste est non vide

begin

rewrite(fac);

paux:=pdebpc;

//tant que l'on a pas atteint la fin de la liste

while paux<>nil do

begin

info.x:=paux^.x;

info.y:=paux^.y;

info.pond:=paux^.pond;

info.pos:=paux^.pos;

write (fac,info);

paux:=paux^.psuiv;

end;

end;

end;





-------------------------------------------------------------------------------------------



T_fic= record

x: integer;

y: integer;

pond: integer;

pos: integer;

end;

T_save = file of T_fic;

_-------------------------------------------------------------------------------------------

Le module SAUVEGARDE doit etre bon, le probleme est dans:

procedure TF_Courbe_de_Bezier.Enregistrer1Click(Sender: TObject);



si vous avez une autre solution pour enregistré un fichier typé ou si vous voyez ce qui ne va pas, faite moi en part

merci

killerdam

2 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
9 mars 2005 à 22:03
Hello,



N'oublie pas le CloseFile(Fic);

procedure TF_Courbe_de_Bezier.Enregistrer1Click(Sender: TObject);


var

NomFichier,Ext : String;

fic : T_save;



begin

//F_enregistrement.Show;
If SaveDialog1.Execute then

begin

NomFichier:= SaveDialog1.FileName;



If NomFichier[Length(NomFichier) - Length(Ext) + 1] <> '.' then

begin

NomFichier:= NomFichier + Ext;

Assignfile(fic,NomFichier);



Try

{$I-}

Reset(fic);

{$I+}

Sauvegarde(pdebpc, fic);

Finally

CloseFile(Fic);

end;

end;

end
else

ShowMessage('Vous avez appuyé sur annuler');

end;




Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006
9 mars 2005 à 18:51
j ai changer un peu la procedure :

procedure TF_Courbe_de_Bezier.Enregistrer1Click(Sender: TObject);

var

NomFichier: String;

Ext: string;

fic :T_save;



begin

//F_enregistrement.Show;

if savedialog1.execute

then

begin

NomFichier:= SaveDialog1.FileName;

if NomFichier[Length(NomFichier) - Length(Ext) + 1] <> '.'

then

begin

NomFichier:= NomFichier + Ext;

assignfile(fic,NomFichier);

{$I-}

Reset(fic);

{$I+}

SAUVEGARDE(pdebpc, fic);

end;

end

else

showmessage('vous avez appuyer sur annulé');

end;
0
Rejoignez-nous