Jak ten kod przerobić z Delphi do FreePascala?
unit RR_;
interface
uses
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Shapes, StdCtrls, slowniezl, Menus, ImgList;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure ReadData(NumberOfRec: Byte);
procedure WriteDate;
procedure RefreshRec;
end;
TDaneDostawcow = packed record
Nazwa: string[50];
Adres: string[50];
NIP: string[13];
Seria: string[2];
NrSerii: string[7];
WydanyDnia: string[10];
Przez: string[100];
end;
TFileDaneDostawcow = file of TDaneDostawcow; // wskazanie na rekord [ nowy typ ]
var
Form1: TForm1;
implementation
uses DodajDane_, O_autorze_;
var
FileName: string;
{$R *.dfm}
procedure TForm1.WriteDate;
var
VFile: TFileDaneDostawcow; // zmienna wskazuje na nowy typ plikow
VRec: TDaneDostawcow; // zmianna wskazuje na rekord
FSize: Integer; // ilosc danych znajdujacych sie w pliku...
begin
AssignFile(VFile, FileName); // skojarz nazwe pliku ze zmienna...
if not FileExists(FileName) then // jezeli plik nie istnieje...
Rewrite(VFile) else //... stworz go, a jezeli istnieje...
Reset(VFile); //... tylko otworz
try
FSize := FileSize(VFile); // pobierz rozmiar ( ilosc danych )
if FSize > 0 then // Czy plik nie jest pusty?
Seek(VFile, FSize); // ustaw na samym koncu pliku
{
Dodaj do rekordu dane wziete z kontrolek tekstowych znajdujacych
sie na formie.
}
{Tu wiem jak przekształcić pobieranie danych zwykłe readln}
with VRec do
begin
Nazwa := Form2.NazwaDodaj.text;
Adres := Form2.AdresDodaj.text;
NIP := Form2.NipDodaj.text;
Seria := UpperCase(Form2.SeriaDodaj.text);
NrSerii := Form2.NrDodaj.text;
WydanyDnia := Form2.WydanyDodaj.text;
Przez := Form2.PrzezDodaj.text;
end;
Write(VFile, VRec); // zapisz rekord do pliku
finally
CloseFile(VFile); // zamknij plik
RefreshRec; // wywolaj procedure ( patrz: linia 140 )
end;
end;
procedure TForm1.ReadData(NumberOfRec: Byte);
var
VFile: TFileDaneDostawcow; // zmienna wskazuje na nowy typ plikow
VRec: TDaneDostawcow; // zmianna wskazuje na rekord
begin
{
Ta procedura odczytuje rekord. Jako parametr tej procedury podawany
jest numer rekordu, ktory ma byc odczytany.
}
try
AssignFile(VFile, FileName);
Reset(VFile);
try
Seek(VFile, NumberOfRec); // ustaw na danym rekordzie....
Read(VFile, VRec); // odczytaj rekord
{ Teraz dane znajduja sie w rekordzie i nalezy je przypisac do kontrolek }
with VRec do
begin
LabelNazwa.Caption := Nazwa;
LabelAdres.Caption := 'Adres: ' + Adres;
LabelNip.Caption := 'NIP lub Pesel: ' + Nip;
LabelSeria.Caption := 'Seria: ' + Seria;
LabelNumerSerii.Caption := 'Nr ' + NrSerii;
LabelWydanyDnia.Caption := 'Wydany dnia: ' + WydanyDnia;
LabelWydanyPrzez.Caption := 'przez ' + Przez;
end;
finally
CloseFile(VFile); // zamknij plik
end;
except
on EInOutError do
Application.MessageBox('Nie mogę otworzyć pliku Dostawcy.dat
. Sprawdź czy plik istnieje.', 'Brak pliku', 16);
end;
end;
procedure TForm1.RefreshRec;
var
VFile: TFileDaneDostawcow;
VRec: TDaneDostawcow;
I: Integer;
n: string;
begin
{
Ta procedura ma za zadanie odswiezyc liste rekordow znajdujacych
sie w danym pliku. Zawartosc komponentu najpierw zostaje czyszczona,
a pozniej nastepuje odczytanie wszystkich rekordow i dodanie ich do listy.
}
AssignFile(VFile, FileName);
if not FileExists(FileName) then // Jezeli plik nie istnieje - nie rob nic
Exit else
Reset(VFile);
ComboNazwa.Items.Clear; // czysc liste danych w komponencie
{
Ponizsza petla ma za zadanie dodawanie kolejnych pozycji do listy.
"FileSize" zawiera informacje o ilosci rekordow znajdujacych sie
w pliku.
}
for I := 0 to FileSize(VFile) - 1 do begin
Seek(VFile, i); // ustaw na danym rekordzie....
Read(VFile, VRec);
ComboNazwa.Items.Add(VRec.Nazwa);
//ComboNazwa.Items.Add('Rekord nr: ' + IntToStr(i));
end;
CloseFile(VFile);
end;
end.
Z góry dzięki
Wachcio