Aber könntest du mir noch sagen, wie und als was für ne sdatei
ich die UNIT´s abspeichern muss und mit welchen BEfehlen etc.
ich sie dann aufrufr, also wie ich sie bei USES deklarieren
muss?!
Hallo Christoph,
die Antwort wird jetzt ein wenig länger ausfallen.
UNITs sind als Sourcecode normale „.pas“-Dateien. Wenn Du sie umwandelst (Empfehlung: permanent auf Platte ablegen), entstehen „.tpl“-Dateien.
UNITs sind wie folgt aufgebaut:
UNIT ; {dieser Name muß in der USES des HP auftauchen}
INTERFACE {in diesem Bereich stehen alle Anweisungen, die auch dem rufenden Programm bekannt sein sollen}
USES …; {alle UNITs, die die Routine selber benötigt; das können wiederum eigene Routinen sein}
CONST …;
TYPE …;
VAR …; {diese Dinge, wie gehabt / global verfügbar}
{ab jetzt kommen die Procedure- und Functionköpfe; z.B.}
PROCEDURE WriteChristoph;
bei Arbeit mit Parametern, müssen diese in den Köpfen mit angegeben werden}
IMPLEMANTATION {dieser Bereich ist für das rufende Programm „unsichtbar“, enthält aber alle Statements}
CONST …;
TYPE …;
VAR …; {UNIT-lokale Vereinbarungen}
{ab jetzt kommen die eigentlichen Routinen, bei unserem Bsp}
PROCEDURE WriteChristoph;
BEGIN
WriteLn(‚Hallo Christoph‘);
END;
{im letzten Bereich folgen Anweisungen, die immer zu Beginn der UNIT ausgeführt werden sollen. Falls nicht benötigt, ist END dennoch zwingend}
BEGIN
ClrScr;
END.
==========================
Praxisbeispiel für eine UNIT:
unit dateien;
interface
uses Crt,Dos;
type
STRING100 = STRING[100];
STRING50 = STRING[50];
STRING20 = STRING[20];
STRING4 = STRING[4];
inst = Record
INr : BYTE;
InstitutName : STRING100;
InstitutStr : STRING50;
InstitutOrt : STRING50;
InstitutPlz : LongInt;
InstitutGeschl : STRING4;
InstitutPartner : STRING50;
END;
hof = Record
FNr : BYTE;
FriedhofName : STRING50;
END;
bes = Record
BesuchArt : STRING50;
BesuchPreis : REAL;
END;
muse = Record
MusikPreis : REAL;
END;
rdn = Record
RedeArt : STRING50;
RedePreis : REAL;
END;
rdnSftl = Record
SchriftlichPreis : REAL;
END;
einn = Record
EinnahmeMonat : WORD;
EinnahmeJahr : WORD;
END;
rech = Record
RechnungNummer : LongInt;
InstitutNummer : BYTE;
RedeTag : WORD;
RedeMonat : WORD;
RedeJahr : WORD;
VerstorbenerV : STRING50;
VerstorbenerN : STRING50;
HB : BYTE;
M : CHAR;
ArtRede : BYTE;
Preis : REAL;
RHaken : CHAR;
END;
ann = Record
NummerInstitut : BYTE;
Friedhofnummer : BYTE;
Name : STRING50;
Vorname : STRING50;
AngehoerigerN : STRING50;
AngehoerigerV : STRING50;
Str : STRING50;
Plz : LongInt;
Ort : STRING50;
Telefon : STRING20;
Besuch : BYTE;
BesuchTag : WORD;
BesuchMonat : WORD;
BesuchJahr : WORD;
BesuchStunde : WORD;
BesuchMinute : WORD;
GrabTag : WORD;
GrabMonat : WORD;
GrabJahr : WORD;
GrabStunde : WORD;
GrabMinute : WORD;
Rede : BYTE;
RedeSchriftlich : CHAR;
Music : CHAR;
VHaken : CHAR;
END;
VAR
pfad : STRING;
f0 : FILE OF BYTE;
f1 : FILE OF inst;
f2 : FILE OF hof;
f3 : FILE OF bes;
f4 : FILE OF muse;
f5 : FILE OF rdn;
f6 : FILE OF einn;
f7 : FILE OF rech;
f8 : FILE OF ann;
f9 : FILE OF rdnSftl;
institut : inst;
friedhof : hof;
besuch : bes;
musik : muse;
reden : rdn;
einnahme : einn;
rechnung : rech;
annahme : ann;
schriftl : rdnSftl;
Procedure DateiOeffnen(laufwerk:CHAR);
PROCEDURE abbruch;
Implementation
Procedure DateiOeffnen(laufwerk:CHAR);
begin
pfad := laufwerk + ‚:\REDNER\INSTITUT.DAT‘;
Assign(f1,pfad);
{$I-}
Reset(f1);
{$I+}
IF IOResult 0 THEN
Rewrite(f1);
pfad := laufwerk + ‚:\REDNER\FRIEDHOF.DAT‘;
Assign(f2,pfad);
{$I-}
Reset(f2);
{$I+}
IF IOResult 0 THEN
Rewrite(f2);
pfad := laufwerk + ‚:\REDNER\BESUCH.DAT‘;
Assign(f3,pfad);
{$I-}
Reset(f3);
{$I+}
IF IOResult 0 THEN
Rewrite(f3);
pfad := laufwerk + ‚:\REDNER\MUSIK.DAT‘;
Assign(f4,pfad);
{$I-}
Reset(f4);
{$I+}
IF IOResult 0 THEN
Rewrite(f4);
pfad := laufwerk + ‚:\REDNER\REDE.DAT‘;
Assign(f5,pfad);
{$I-}
Reset(f5);
{$I+}
IF IOResult 0 THEN
Rewrite(f5);
pfad := laufwerk + ‚:\REDNER\EINNAHME.DAT‘;
Assign(f6,pfad);
{$I-}
Reset(f6);
{$I+}
IF IOResult 0 THEN
Rewrite(f6);
pfad := laufwerk + ‚:\REDNER\RECHNUNG.DAT‘;
Assign(f7,pfad);
{$I-}
Reset(f7);
{$I+}
IF IOResult 0 THEN
Rewrite(f7);
pfad := laufwerk + ‚:\REDNER\ANNAHME.DAT‘;
Assign(f8,pfad);
{$I-}
Reset(f8);
{$I+}
IF IOResult 0 THEN
Rewrite(f8);
pfad := laufwerk + ‚:\REDNER\SCHRIFT.DAT‘;
Assign(f9,pfad);
{$I-}
Reset(f9);
{$I+}
IF IOResult 0 THEN
Rewrite(f9);
CLOSE(f1);
CLOSE(f2);
CLOSE(f3);
CLOSE(f4);
CLOSE(f5);
CLOSE(f6);
CLOSE(f7);
CLOSE(f8);
CLOSE(f9);
SetFAttr(f3,HIDDEN);
SetFAttr(f4,HIDDEN);
SetFAttr(f5,HIDDEN);
SetFAttr(f6,HIDDEN);
SetFAttr(f7,HIDDEN);
SetFAttr(f8,HIDDEN);
SetFAttr(f9,HIDDEN);
end;
PROCEDURE abbruch;
VAR
f0 : FILE OF BYTE;
eins : BYTE;
BEGIN
ASSIGN(f0,‚abbruch.dat‘);
{$I-}
RESET(f0);
{$I+}
IF IOResult 0 THEN
Rewrite(f0);
Write(f0,eins);
Close(f0);
END;
end.
==========================
Praxisbeispiel für den Aufruf einer UNIT:
Program Steuerung;
uses Crt, dateien
VAR
taste : CHAR;
i : WORD;
BEGIN
TextBackground(white);
ClrScr;
dateioeffnen(‚c‘); { dateien.tpu }
END.
========================
Uffz, das war jetzt sicher ‚ne ganze Menge und ich hoffe, in der Schnelle sind nicht zuviele Fehler unterlaufen.
Versuch‘ es einfach mal und viel Glück damit.
Gruß RaRo