home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 22 / dataitem / dataitem.pas
Encoding:
Pascal/Delphi Source File  |  1991-01-04  |  6.7 KB  |  267 lines

  1. (* ----------------------------------------------------- *)
  2. (*                      DATAITEM.PAS                     *)
  3. (*                                                       *)
  4. (* Demonstriert, wie kleine Objekte in einer Datenbank   *)
  5. (* angewendet werden könnten. Erhebt keinerlei Anspruch  *)
  6. (* auf Vollständigkeit !                                 *)
  7. (*                                                       *)
  8. (*           (c) '91 by R.Reichert & toolbox             *)
  9. (* ----------------------------------------------------- *)
  10. PROGRAM DataItemObjects;
  11.  
  12. USES Crt, Printer;
  13.  
  14. CONST
  15.   IdDataItem   = -1;
  16.   IdStringItem =  1;
  17.   IdNumberItem = -2;
  18.   IdIntItem    =  2;
  19.  
  20. TYPE
  21.   TBasePtr = ^TBase;
  22.   TBase = OBJECT
  23.     CONSTRUCTOR Init;
  24.     DESTRUCTOR Done;                               VIRTUAL;
  25.   END;
  26.  
  27.   TDataItemPtr = ^TDataItem;
  28.   TDataItem = OBJECT (TBase)
  29.  
  30.     Id, x, y : INTEGER;
  31.     Col,
  32.     ItLen,
  33.     EdX, EdY : BYTE;
  34.  
  35.     CONSTRUCTOR Init (NewX, NewY : INTEGER;
  36.                       NewCol, NewItLen,
  37.                       NewEdX, NewEdY : BYTE);
  38.     PROCEDURE Display;                             VIRTUAL;
  39.     PROCEDURE Print;                               VIRTUAL;
  40.     (*   PROCEDURE Save;
  41.          PROCEDURE Load;   *)
  42.     PROCEDURE Edit;                                VIRTUAL;
  43.     PROCEDURE SetXY (NewX, NewY : INTEGER);        VIRTUAL;
  44.     PROCEDURE SetItLen (NewItLen : BYTE);          VIRTUAL;
  45.     PROCEDURE SetEdXY (NewEdX, NewEdY : BYTE);     VIRTUAL;
  46.  
  47.     FUNCTION GetId : INTEGER;                      VIRTUAL;
  48.     FUNCTION GetX : INTEGER;                       VIRTUAL;
  49.     FUNCTION GetY : INTEGER;                       VIRTUAL;
  50.     FUNCTION GetCol : BYTE;                        VIRTUAL;
  51.     FUNCTION GetItLen : BYTE;                      VIRTUAL;
  52.     FUNCTION GetEdX : BYTE;                        VIRTUAL;
  53.     FUNCTION GetEdY : BYTE;                        VIRTUAL;
  54.     FUNCTION Get : POINTER;                        VIRTUAL;
  55.   END;
  56.  
  57.   TStringItemPtr = ^TStringItem;
  58.   TStringItem = OBJECT (TDataItem)
  59.  
  60.     Str : STRING;
  61.  
  62.     CONSTRUCTOR Init (NewX, NewY : INTEGER;
  63.                       NewCol, NewItLen,
  64.                       NewEdX, NewEdY : BYTE);
  65.     PROCEDURE Display;                             VIRTUAL;
  66.     PROCEDURE Print;                               VIRTUAL;
  67.     PROCEDURE Edit;                                VIRTUAL;
  68.     FUNCTION Get : POINTER;                        VIRTUAL;
  69.   END;
  70.  
  71.  
  72. (* ----------------------------------------------------- *)
  73.  
  74. CONSTRUCTOR TBase.Init;
  75.   VAR p : POINTER;
  76. BEGIN
  77.   P := Ptr (Seg (Self), Ofs (Self)+2);
  78.  
  79.   { Da TBase keine Daten enthält, wohl aber eine virtuelle
  80.     Methode (Done), speichern die ersten 2 Bytes der
  81.     Objektinstanze das Offset der VMT (virtuellen Methoden-
  82.     tabelle). Deshalb muss 2 zu dem Offset von "Self"
  83.     addiert werden.                                       }
  84.  
  85.   FillChar (p^, SizeOf (Self)-2, 0);
  86.       { initialisiert alle Objektvariablen mit dem Wert 0 }
  87. END;
  88.  
  89. DESTRUCTOR TBase.Done;
  90. BEGIN
  91. END;
  92.  
  93. (* ----------------------------------------------------- *)
  94.  
  95. CONSTRUCTOR TDataItem.Init (NewX, NewY : INTEGER;
  96.                             NewCol, NewItLen,
  97.                             NewEdX, NewEdY : BYTE);
  98. BEGIN
  99.   TBase.Init;
  100.   Id := IdDataItem;
  101.   x  := NewX;    y     := NewY;
  102.   Col:= NewCol;  ItLen := NewItLen;
  103.   EdX:= NewEdX;  EdY   := NewEdY;
  104. END;
  105.  
  106. PROCEDURE TDataItem.Display;
  107. BEGIN
  108. END;
  109.  
  110. PROCEDURE TDataItem.Print;
  111. BEGIN
  112. END;
  113.  
  114. PROCEDURE TDataItem.Edit;
  115. BEGIN
  116. END;
  117.  
  118. PROCEDURE TDataItem.SetXY (NewX, NewY : INTEGER);
  119. BEGIN
  120.   x := NewX;  y := NewY;
  121. END;
  122.  
  123. PROCEDURE TDataItem.SetItLen (NewItLen : BYTE);
  124. BEGIN
  125.   ItLen := NewItLen;
  126.   Display;
  127. END;
  128.  
  129. PROCEDURE TDataItem.SetEdXY (NewEdX, NewEdY : BYTE);
  130. BEGIN
  131.   EdX := NewEdX;  EdY := NewEdY;
  132. END;
  133.  
  134. FUNCTION TDataItem.GetId : INTEGER;
  135. BEGIN
  136.   GetId := Id;
  137. END;
  138.  
  139. FUNCTION TDataItem.GetX : INTEGER;
  140. BEGIN
  141.   GetX := x;
  142. END;
  143.  
  144. FUNCTION TDataItem.GetY : INTEGER;
  145. BEGIN
  146.   GetY := y;
  147. END;
  148.  
  149. FUNCTION TDataItem.GetCol : BYTE;
  150. BEGIN
  151.   GetCol := Col;
  152. END;
  153.  
  154. FUNCTION TDataItem.GetItLen : BYTE;
  155. BEGIN
  156.   GetItLen := ItLen;
  157. END;
  158.  
  159. FUNCTION TDataItem.GetEdX : BYTE;
  160. BEGIN
  161.   GetEdX := EdX;
  162. END;
  163.  
  164. FUNCTION TDataItem.GetEdY : BYTE;
  165. BEGIN
  166.   GetEdY := EdY;
  167. END;
  168.  
  169. FUNCTION TDataItem.Get : POINTER;
  170. BEGIN
  171.   Get := NIL;
  172. END;
  173.  
  174. (* ----------------------------------------------------- *)
  175.  
  176. CONSTRUCTOR TStringItem.Init (NewX, NewY : INTEGER;
  177.                               NewCol, NewItLen,
  178.                               NewEdX, NewEdY : BYTE);
  179. BEGIN
  180.   TDataItem.Init (NewX, NewY, NewCol,
  181.                   NewItLen, NewEdX, NewEdY);
  182.   Id := IdStringItem;
  183. END;
  184.  
  185. PROCEDURE TStringItem.Display;
  186. BEGIN
  187.   TextAttr := Col;
  188.   GotoXY (x, y);
  189.   Write (Copy (Str, 1, ItLen));
  190. END;
  191.  
  192. PROCEDURE TStringItem.Print;
  193. BEGIN
  194.   Write (Lst, Str);
  195. END;
  196.  
  197. PROCEDURE TStringItem.Edit;
  198. BEGIN
  199.   TextAttr := $07;
  200.   GotoXY (EdX, EdY);  ClrEoL;
  201.   Readln (Str);
  202.   GotoXY (EdX, EdY);  ClrEoL;
  203.   Display;
  204. END;
  205.  
  206. FUNCTION TStringItem.Get : POINTER;
  207. BEGIN
  208.   Get := @Str;
  209. END;
  210.  
  211. TYPE
  212.   TDataFieldPtr = ^TDataField;
  213.   TDataField    = ARRAY [1..10, 1..8] OF TDataItemPtr;
  214.  
  215. VAR
  216.   SpreadSheet : TDataFieldPtr;
  217.   i, j        : INTEGER;
  218.  
  219. BEGIN
  220.   TextAttr := $70;   ClrScr;
  221.   TextAttr := $7F;   GotoXY (27, 1);
  222.   Write (' Miniatur-"Datenbank"-Demo ');
  223.   GotoXY (1, 2);     FOR i := 1 TO 80 DO Write ('═');
  224.   GotoXY (1, 24);    FOR i := 1 TO 80 DO Write ('═');
  225.   GotoXY (24, 25);
  226.   Write (' (c) ''91 by R.Reichert & toolbox ');
  227.   TextAttr := $70;   GotoXY (1, 23);
  228.   Write ('Die einzelnen Felder mit Werten belegen, ',
  229.          'bitte Eingabe machen.');
  230.  
  231.   New (SpreadSheet);
  232.   FOR i := 1 TO 10 DO
  233.     FOR j := 1 TO 8 DO
  234.       SpreadSheet^[i, j] := New (TStringItemPtr,
  235.                                  Init ((j-1)*10+1, i+6,
  236.                                        $70, 8,
  237.                                        1, 4));
  238.   FOR i := 1 TO 10 DO
  239.     FOR j := 1 TO 2 DO
  240.       SpreadSheet^[i, j]^.Edit;
  241.   TextAttr := $70;   GotoXY (1, 23);   ClrEoL;
  242.   Write ('Das "Spreadsheet" wird gedruckt;',
  243.          ' Drucker bitte anschalten.');
  244.   Delay (1000);
  245.   FOR i := 1 TO 10 DO BEGIN
  246.     FOR j := 1 TO 8 DO BEGIN
  247.       SpreadSheet^[i, j]^.Print;
  248.       Write (Lst, '  ');
  249.     END;
  250.     Writeln (Lst);
  251.   END;
  252.  
  253.   TextAttr := $70;   GotoXY (1, 23);   ClrEoL;
  254.   Write ('<ENTER> zum Beenden drücken.');
  255.   ReadLn;
  256.  
  257.   FOR i := 1 TO 10 DO
  258.     FOR j := 1 TO 8 DO
  259.       Dispose (SpreadSheet^[i, j], Done);
  260.   Dispose (SpreadSheet);
  261.   TextAttr := $07;
  262.   ClrScr;
  263. END.
  264.  
  265. (* ----------------------------------------------------- *)
  266. (*                Ende von DATAITEM.PAS                  *)
  267. (* ----------------------------------------------------- *)