Zapis StringGrid

0

Do zapisu i odczytu wartości ze StrinGrid znalazłem taki kod:

Zapis:

var
plik:TFileStream;
begin
plik:=TFileStream.Create('nazwapliku',fmCreate);
plik.WriteComponent(StringGrid1);

Odczyt:

var
plik:TFileStream;
begin
plik:=TFileStream.Create('nazwapliku',fmOpenRead);
plik.ReadComponent(StringGrid1);

Tylko, ze jak odczytuje przy np uruchomieniu programu a potem chce zapisc przy zamknieciu programu to wywala mi komunikat ze plik jest uzywany i nie mozna zapisac... jak to poprawić?

0

plik.Free; po odczycie.

0

No to teraz kolejny problem... Zapisuje mi sie jedynie ilośc kolumn wierszy, rozmia itp. ale nie zapisuje mi się treść w tych komórkach... Czemu? jak to naprawić :) ?

0

na formatke dajesz savedialog i opendialog(wtedy wyswietli sie okno z podaniem nazwy do plilku)
a zapisz jest taki:

var
f:textfile;
x,y:integer;

begin

if SaveDialog.Execute then
begin



assignfile (f,savedialog.filename);
rewrite (f);
writeln (f,stringgrid1.colcount);
writeln (f,stringgrid1.rowcount);
For X:=0 to stringgrid1.colcount-1 do
For y:=0 to stringgrid1.rowcount-1 do
writeln (F, stringgrid1.cells[x,y]);

closefile (f);

end;

a na odczyt:

var
f:textfile;
temp,x,y:integer;
tempstr:string;
begin
if openDialog.Execute then
begin
nazwapliku:=opendialog.filename;
if FileExists(openDialog.FileName) then
assignfile (f,opendialog.filename);
reset (f);
readln (f,temp);
stringgrid1.colcount:=temp;
readln (f,temp);
stringgrid1.rowcount:=temp;
For X:=0 to stringgrid1.colcount-1 do
For y:=0 to stringgrid1.rowcount-1 do begin
readln (F, tempstr);
stringgrid1.cells[x,y]:=tempstr;
end;
closefile (f);
end;

a jesli nie chesz zeby sie wybierało plik to po prostu dajesz zamiast savedialog dajesz

'plik.txt'

i tak samo z opendialog

przykład z tym open i save dialog:
podaje stronke do mojego progsa gdzie to wykorzystałem:

http://members.lycos.co.uk/noro/

1 użytkowników online, w tym zalogowanych: 0, gości: 1