home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DATAITEM.PAS *)
- (* Demonstriert, wie kleine Objekte in einer Datenbank *)
- (* angewendet werden könnten. Erhebt keinerlei Anspruch *)
- (* auf Vollständigkeit. *)
- (* (c) 1991 Raimond Reichert & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM DataItemObjects;
-
- USES Crt, Printer;
-
- CONST
- IdDataItem = -1;
- IdStringItem = 1;
- IdNumberItem = -2;
- IdIntItem = 2;
-
- TYPE
- TBasePtr = ^TBase;
- TBase = OBJECT
- CONSTRUCTOR Init;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- TDataItemPtr = ^TDataItem;
- TDataItem = OBJECT (TBase)
- Id, x, y : INTEGER;
- Col,
- ItLen,
- EdX, EdY : BYTE;
-
- CONSTRUCTOR Init(NewX, NewY : INTEGER;
- NewCol, NewItLen,
- NewEdX, NewEdY : BYTE);
- PROCEDURE Display; VIRTUAL;
- PROCEDURE Print; VIRTUAL;
- (* PROCEDURE Save;
- PROCEDURE Load; *)
- PROCEDURE Edit; VIRTUAL;
- PROCEDURE SetXY(NewX, NewY : INTEGER); VIRTUAL;
- PROCEDURE SetItLen(NewItLen : BYTE); VIRTUAL;
- PROCEDURE SetEdXY(NewEdX, NewEdY : BYTE); VIRTUAL;
-
- FUNCTION GetId : INTEGER; VIRTUAL;
- FUNCTION GetX : INTEGER; VIRTUAL;
- FUNCTION GetY : INTEGER; VIRTUAL;
- FUNCTION GetCol : BYTE; VIRTUAL;
- FUNCTION GetItLen : BYTE; VIRTUAL;
- FUNCTION GetEdX : BYTE; VIRTUAL;
- FUNCTION GetEdY : BYTE; VIRTUAL;
- FUNCTION Get : Pointer; VIRTUAL;
- END;
-
-
- TStringItemPtr = ^TStringItem;
- TStringItem = OBJECT (TDataItem)
-
- Str : STRING;
-
- CONSTRUCTOR Init(NewX, NewY : INTEGER;
- NewCol, NewItLen,
- NewEdX, NewEdY : BYTE);
- PROCEDURE Display; VIRTUAL;
- PROCEDURE Print; VIRTUAL;
- PROCEDURE Edit; VIRTUAL;
- FUNCTION Get : Pointer; VIRTUAL;
- END;
-
-
- CONSTRUCTOR TBase.Init;
- VAR
- p : Pointer;
- BEGIN
- p := Ptr(Seg(Self), Ofs(Self)+2);
-
- { Da TBase keine Daten enthält, wohl aber eine virtuelle
- Methode (Done), speichern die ersten 2 Bytes der
- Objektinstanze das Offset der VMT (virtuellen Methoden-
- tabelle). Deshalb muss 2 zu dem Offset von "Self"
- addiert werden. }
-
- FillChar(p^, SizeOf(Self)-2, 0);
- { initialisiert alle Objektvariablen mit dem Wert 0 }
- END;
-
- DESTRUCTOR TBase.Done;
- BEGIN
- END;
-
- CONSTRUCTOR TDataItem.Init(NewX, NewY : INTEGER;
- NewCol, NewItLen,
- NewEdX, NewEdY : BYTE);
- BEGIN
- TBase.Init;
- Id := IdDataItem;
- x := NewX; y := NewY;
- Col := NewCol; ItLen := NewItLen;
- EdX := NewEdX; EdY := NewEdY;
- END;
-
- PROCEDURE TDataItem.Display;
- BEGIN
- END;
-
- PROCEDURE TDataItem.Print;
- BEGIN
- END;
-
- PROCEDURE TDataItem.Edit;
- BEGIN
- END;
-
- PROCEDURE TDataItem.SetXY(NewX, NewY : INTEGER);
- BEGIN
- x := NewX; y := NewY;
- END;
-
- PROCEDURE TDataItem.SetItLen(NewItLen : BYTE);
- BEGIN
- ItLen := NewItLen;
- Display;
- END;
-
- PROCEDURE TDataItem.SetEdXY(NewEdX, NewEdY : BYTE);
- BEGIN
- EdX := NewEdX; EdY := NewEdY;
- END;
-
- FUNCTION TDataItem.GetId : INTEGER;
- BEGIN
- GetId := Id;
- END;
-
- FUNCTION TDataItem.GetX : INTEGER;
- BEGIN
- GetX := x;
- END;
-
- FUNCTION TDataItem.GetY : INTEGER;
- BEGIN
- GetY := y;
- END;
-
- FUNCTION TDataItem.GetCol : BYTE;
- BEGIN
- GetCol := Col;
- END;
-
- FUNCTION TDataItem.GetItLen : BYTE;
- BEGIN
- GetItLen := ItLen;
- END;
-
- FUNCTION TDataItem.GetEdX : BYTE;
- BEGIN
- GetEdX := EdX;
- END;
-
- FUNCTION TDataItem.GetEdY : BYTE;
- BEGIN
- GetEdY := EdY;
- END;
-
- FUNCTION TDataItem.Get : Pointer;
- BEGIN
- Get := NIL;
- END;
-
- CONSTRUCTOR TStringItem.Init(NewX, NewY : INTEGER;
- NewCol, NewItLen,
- NewEdX, NewEdY : BYTE);
- BEGIN
- TDataItem.Init(NewX, NewY, NewCol,
- NewItLen, NewEdX, NewEdY);
- Id := IdStringItem;
- END;
-
- PROCEDURE TStringItem.Display;
- BEGIN
- TextAttr := Col;
- GotoXY(x, y);
- Write(Copy(Str, 1, ItLen));
- END;
-
- PROCEDURE TStringItem.Print;
- BEGIN
- Write(Lst, Str);
- END;
-
- PROCEDURE TStringItem.Edit;
- BEGIN
- TextAttr := $07;
- GotoXY(EdX, EdY); ClrEol;
- ReadLn(Str);
- GotoXY(EdX, EdY); ClrEol;
- Display;
- END;
-
- FUNCTION TStringItem.Get : Pointer;
- BEGIN
- Get := @Str;
- END;
-
- TYPE
- TDataFieldPtr = ^TDataField;
- TDataField = ARRAY [1..10, 1..8] OF TDataItemPtr;
-
- VAR
- SpreadSheet : TDataFieldPtr;
- i, j : INTEGER;
-
- BEGIN
- TextAttr := $70; ClrScr;
- TextAttr := $7F; GotoXY(27, 1);
- Write(' Miniatur-"Datenbank"-Demo ');
- GotoXY( 1, 2); FOR i := 1 TO 80 DO Write ('═');
- GotoXY( 1, 24); FOR i := 1 TO 80 DO Write ('═');
- GotoXY(24, 25);
- Write(' (c) 1991 R.Reichert & TOOLBOX ');
- TextAttr := $70; GotoXY(1, 23);
- Write('Die einzelnen Felder mit Werten belegen, ',
- 'bitte Eingabe machen.');
-
- New(SpreadSheet);
- FOR i := 1 TO 10 DO
- FOR j := 1 TO 8 DO
- SpreadSheet^[i,j] :=
- New(TStringItemPtr,
- Init((j-1)*10+1, i+6, $70, 8, 1, 4));
- FOR i := 1 TO 10 DO
- FOR j := 1 TO 2 DO
- SpreadSheet^[i,j]^.Edit;
- TextAttr := $70; GotoXY (1,23); ClrEol;
- Write('Das "Spreadsheet" wird gedruckt;',
- ' Drucker bitte anschalten.');
- Delay(1000);
- FOR i := 1 TO 10 DO BEGIN
- FOR j := 1 TO 8 DO BEGIN
- SpreadSheet^[i,j]^.Print;
- Write(Lst, ' ');
- END;
- WriteLn(Lst);
- END;
- TextAttr := $70; GotoXY (1,23); ClrEol;
- Write('<ENTER> zum Beenden drücken.');
- ReadLn;
- FOR i := 1 TO 10 DO
- FOR j := 1 TO 8 DO
- Dispose(SpreadSheet^[i,j], Done);
- Dispose(SpreadSheet);
- TextAttr := $07;
- ClrScr;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DATAITEM.PAS *)
-