Ciao Nicola.
Nella form2:
Tforminserimento = class(TForm)
provincia: TEdit;
Label1: TLabel;
procedure Label1Click(Sender: TObject);
procedure provinciaChange(Sender: TObject);
private
fRecordDati : RecordDati;
public
public recordDaPassare: recordati read fRecordDati write fRecordDati;
end;
procedure Tforminserimento.provinciaChange(Sender: TObject);
begin
FRecordDati.provincia := 'Quella che vuoi";
write(fdati,FRecordDati);
showmessage ('Scritto record');
end;
cmq, a me non piace molto la soluzione che ti ho proposto prima.
unit Pinserimento;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
TRecorDati=record
provincia:string[20];
settore:string[30];
pagina:longint
end;
{ Tforminserimento }
Tforminserimento = class(TForm)
provincia: TEdit;
Label1: TLabel;
procedure Label1Click(Sender: TObject);
procedure provinciaChange(Sender: TObject);
private
fdati : File of RecordDati;
public
{ public declarations }
end;
var
forminserimento: Tforminserimento;
implementation
{$R *.lfm}
{ Tforminserimento }
{$J+}
const
NomeFile : String= '/home/nicola/Scrivania/WorkingDocs/ProveLazarus/File/filedati.dat';
{$J-}
procedure TFormInserimento.apriFile;
Begin
assign (fdati,NomeFile);
if fileexists (NomeFile) then
begin
reset(fdati);
showmessage ('file già esistente')
end
else
begin
rewrite (fdati);
showmessage ('file creato')
end;
end;
procedure TFormInserimento.chiudiFile;
Begin
fClose(fdati);
end;
procedure Tforminserimento.Label1Click(Sender: TObject);
begin
end;
procedure Tforminserimento.provinciaChange(Sender: TObject);
begin
Try
ApriFile;
showmessage ('e qua mi fermo!!!')
ChiudiFile;
Except
on E: Exception do
ShowMessage("Errore nella manipolazione del file:"+E.Message);
end;
end;
end.
Questo ha il solo vantaggio che, in caso di errore il programma non entra in uno stato inconsistente.
Hai la tua bella eccezione che scatta e viene gestita all'interno del metodo. In modo atomico.
Se, per qualche motivo, in fase di boostrap, l'applicazione non collassa e non non ti apre i file, poi ti trovi gli handle sballati.
Stilgar
questo è il codice "incriminato"
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
const
nomefile=('/home/nicola/Scrivania/WorkingDocs/ProveLazarus/prova file e label/movimenti.dat');
type
fileprova=record
citta:string[20];
indirizzo:string [30];
numero:longint;
end;
{ TForm2 }
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit3Change(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form2: TForm2;
movimentoform:fileprova;
filemovimentoform:file of fileprova;
dimensione:longint;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.Edit1Change(Sender: TObject);
begin
movimentoform.citta:=edit1.text;
end;
procedure TForm2.Button1Click(Sender: TObject);
var mvf:fileprova;
begin
reset(filemovimentoform);
while not eof (filemovimentoform)
do begin
read(filemovimentoform,mvf)
end;
write (filemovimentoform,movimentoform);
closefile(filemovimentoform)
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
edit1.text:='';
edit2.text:='';
edit3.text:='';
end;
procedure TForm2.Edit2Change(Sender: TObject);
begin
movimentoform.indirizzo:=edit2.text;
end;
procedure TForm2.Edit3Change(Sender: TObject);
begin
movimentoform.numero:=strtoint(edit3.text);
end;
{$I-}
begin
movimentoform.citta:='';
movimentoform.indirizzo:='';
movimentoform.numero:=0;
assign(filemovimentoform,nomefile);
end.
però la soluzione "sporca" suggerita da cliff direi che proprio cosi' sporca non è tant'è che
avrei risolto il problema