home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 06 / grdlagen / dataitem.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-03-05  |  6.5 KB  |  256 lines

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