ďťż

Ładny brzuch

Witam,
Chcialem stworzyc programik, ktory zapisywal by wypelnioną przez uzytkownika tabelę do pliku, a później po kolejnym uruchominiu aplikacji ladowalby ja spowrotem. Mam jednak mnostwo problemow z kodem, caly czas gdzies sa bledy...

To źródło (przepraszam ze bedzie dlugo ale coz)

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
procedure wypelnij_tabele(var s:TstringGrid);
var i:integer;
begin
with s do begin
Cells[0,0]:='przedmioty';
Cells[0,1]:='Polski';
Cells[0,2]:='Matematyka';
Cells[0,3]:='Angileski';
Cells[0,4]:='Informatyka';
Cells[0,5]:='Chemia';
Cells[0,6]:='Fizyka';
Cells[0,7]:='Biologia';
Cells[0,8]:='Muzyka';
Cells[0,9]:='WF';
for i:=1 to 9 do
cells[i,0]:='ocena';
end;
end;

procedure SaveGrid;
var f:textfile;
x,y:integer;
begin
assignfile (f,'C:tabela.txt');
rewrite (f);
writeln (f,StringGrid1.colcount);<------- Tu cos nie pasuje
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;

procedure LoadGrid;
var f:textfile;
temp,x,y:integer;
tempstr:string;
begin
assignfile (f,'C:tabela.txt');
reset (f);
readln (f,temp);
stringgrid.colcount:=temp;
readln (f,temp);
stringgrid.rowcount:=temp;
for X:=0 to stringgrid.colcount-1 do
for y:=0 to stringgrid.rowcount-1 do begin
readln (F, tempstr);
stringgrid.cells[x,y]:=tempstr;
end;
closefile (f);
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
wypelnij_tabele(StringGrid1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveGrid;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
LoadGrid;
end;

end.

begin
wypelnij_tabele(Stringgrid1);
end;

end.

I pewnie w wielu miejscach gdzie indziej... Pomozcie mi z tym bledem, a jezli kod jest zupelnie do d... to napiszcie co jest zle. Przyznam, ze nie pisalem go w calosci sam. O procedury zapisywania i ladownia poprosilem kolege, ktory wlasnie wyjechal...



No i wie ktoś. Proszę o pomoc

cytat:kubih napisał:
writeln (f,StringGrid1.colcount);<------- Tu cos nie pasuje

A co nie pasuje ?
Szanuj czas innych - i pisz od razu jaki wyskakuje Ci błąd...

Przy tej konstrukcji programu pewnie wyrzuca Ci błąd, że nie ma czegoś takiego jak StringGrid1. Jeśli nie chcesz przerabiać programu to możesz przed StringGrid1 dodać Form1. - czyli będzie to wyglądało tak : Form1.StringGrid1.colcount (analogicznie w kolejnych wystąpieniach StringGrid1).
Innym rozwiązaniem może być dodanie procedur odczytu i zapisu do Form1 - wtedy StringGrid1 będzie automatycznie widoczny w tych procedurach.

Ale w ogóle to są też inne błędy.

wypelnij_tabele(Stringgrid1) - to masz dopisane tak niewiadomo gdzie... jest begin i end - ale skąd i po co ?
Lepiej sobie to wrzuć pod jakieś zdażenie - np naciśnięcie buttona lub uruchomienie programu.

ICQ : 245-363-570

cytat:A co nie pasuje ?
Szanuj czas innych - i pisz od razu jaki wyskakuje Ci błąd...

Przepraszam, masz rację. Będę pamiętał...

cytat:
Przy tej konstrukcji programu pewnie wyrzuca Ci błąd, że nie ma czegoś takiego jak StringGrid1.

Jak nie ma jak jest :twisted:

cytat:Ale w ogóle to są też inne błędy.

Oj nie watpie :D

cytat:wypelnij_tabele(Stringgrid1) - to masz dopisane tak niewiadomo gdzie... jest begin i end - ale skąd i po co ?
Lepiej sobie to wrzuć pod jakieś zdażenie - np naciśnięcie buttona lub uruchomienie programu.

Tu sie akurat nie zgodze. To nie jest blad i OnCreate dla StrinGrid jest bardzo w moim prypadku użyteczna. Jak możesz zauważyć po otwarciu programu od razu wwypełniana jest pierwsza kolumna (z nazwami przedmiotow) i wiersz z (z napisem ocena).



cytat:kubih napisał:
Jak nie ma jak jest :twisted:
Ty to wiesz, ja to wiem - ale kompilator już nie 8)

cytat:Tu sie akurat nie zgodze. To nie jest blad i OnCreate dla StrinGrid jest bardzo w moim prypadku użyteczna. Jak możesz zauważyć po otwarciu programu od razu wwypełniana jest pierwsza kolumna (z nazwami przedmiotow) i wiersz z (z napisem ocena).

Chodziło mi właśnie o wrzucenie tej procedury do OnCreate (lub buttona). Nie zauważyłem, że już to zrobiłeś - a co do błędu to miałem na myśli to co poniżej zaznaczone na czerwono (to na niebiesko oczywiście jest OK).

cytat:
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
wypelnij_tabele(StringGrid1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveGrid;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
LoadGrid;
end;

end.

begin
wypelnij_tabele(Stringgrid1);
end;

end.

ICQ : 245-363-570

Faktycznie zonk :oops:
Ale dalej program sie nie odpala :frown:

cytat:kubih napisał:

Faktycznie zonk :oops:
Ale dalej program sie nie odpala :frown:

1. Znów nie podajesz jaki błąd Ci wyskakuje tylko liczysz na to, że zgadniemy...
2. Zrobiłes zmiany o których pisałem Ci w pierwszym poście ? Chyba nie...

Ale OK - jestem teraz w dobrym humorze więc przymknę oko ;)

Poniżej masz poprawiony kod - przekopiuj go sobie:

unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Grids; type  TForm1 = class(TForm)    StringGrid1: TStringGrid;    Button1: TButton;    Button2: TButton;    procedure FormCreate(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }    procedure wypelnij_tabele(var s:TstringGrid);    procedure SaveGrid;    procedure LoadGrid;  end; var  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.wypelnij_tabele(var s:TstringGrid); var i:integer; begin  with s do    begin      Cells[0,0]:='przedmioty';      Cells[0,1]:='Polski';      Cells[0,2]:='Matematyka';      Cells[0,3]:='Angileski';      Cells[0,4]:='Informatyka';      Cells[0,5]:='Chemia';      Cells[0,6]:='Fizyka';      Cells[0,7]:='Biologia';      Cells[0,8]:='Muzyka';      Cells[0,9]:='WF';      for i:=1 to 9 do cells[i,0]:='ocena';    end; end; procedure TForm1.SaveGrid; var f:textfile;    x,y:integer; begin  assignfile (f,'C:tabela.txt');  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; procedure TForm1.LoadGrid; var f:textfile;    temp,x,y:integer;    tempstr:string; begin  assignfile (f,'C:tabela.txt');  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; procedure TForm1.FormCreate(Sender: TObject); begin  wypelnij_tabele(StringGrid1); end; procedure TForm1.Button1Click(Sender: TObject); begin  SaveGrid; end; procedure TForm1.Button2Click(Sender: TObject); begin  LoadGrid; end; end.

ICQ : 245-363-570

Oxi wielkie dzieki :thx2:
Jestem Twoim dluznikiem
Jeszcze raz TNX 1.0E6 ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •