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) '91 by R.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) ''91 by 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 *)
- (* ----------------------------------------------------- *)