home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / tvision / ide / asciitab.pas next >
Encoding:
Pascal/Delphi Source File  |  1993-03-25  |  5.3 KB  |  203 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     ASCIITAB.PAS                       *)
  3. (* Ascii table viewer. See TVDEMO.PAS for an example      *)
  4. (* program that uses this unit.                           *)
  5. (*                                                        *)
  6. (*                 Turbo Vision Demo                      *)
  7. (*     Copyright (c) 1990 by Borland International        *)
  8. (* ------------------------------------------------------ *)
  9. UNIT ASCIITab;
  10.  
  11. {$F+,O+,X+,S-,D-}
  12.  
  13. INTERFACE
  14.  
  15. USES Objects, App, Views, Drivers;
  16.  
  17. TYPE
  18.   pTable = ^tTable;
  19.   tTable = OBJECT (tView)
  20.     PROCEDURE Draw;                             VIRTUAL;
  21.     PROCEDURE HandleEvent(VAR Event : tEvent);  VIRTUAL;
  22.   END;
  23.  
  24.   pReport = ^tReport;
  25.   tReport = OBJECT (tView)
  26.     ASCIIChar      : LongInt;
  27.  
  28.     CONSTRUCTOR Load(VAR S : tStream);
  29.     PROCEDURE   Draw;                             VIRTUAL;
  30.     PROCEDURE   HandleEvent(VAR Event : tEvent);  VIRTUAL;
  31.     PROCEDURE   Store(VAR S : tStream);
  32.   END;
  33.  
  34.   pASCIIChart = ^tASCIIChart;
  35.   tASCIIChart = OBJECT (tWindow)
  36.     CONSTRUCTOR Init;
  37.   END;
  38.  
  39. CONST
  40.   AsciiTableCommandBase : WORD = 910;
  41.  
  42.   rTable : tStreamRec = (
  43.     ObjType : 10030;
  44.     VmtLink : Ofs(TypeOf(tTable)^);
  45.     Load    : @tTable.Load;
  46.     Store   : @tTable.Store);
  47.  
  48.   rReport : tStreamRec = (
  49.     ObjType : 10031;
  50.     VmtLink : Ofs(TypeOf(tReport)^);
  51.     Load    : @tReport.Load;
  52.     Store   : @tReport.Store);
  53.  
  54.   rASCIIChart : tStreamRec = (
  55.     ObjType : 10032;
  56.     VmtLink : Ofs(TypeOf(tASCIIChart)^);
  57.     Load    : @tASCIIChart.Load;
  58.     Store   : @tASCIIChart.Store);
  59.  
  60.   PROCEDURE RegisterASCIITab;
  61.  
  62. (* ------------------------------------------------------ *)
  63.  
  64. IMPLEMENTATION
  65.  
  66. CONST
  67.   cmCharacterFocused = 0;
  68.  
  69.   PROCEDURE tTable.Draw;
  70.   VAR
  71.     Buf   : tDrawBuffer;
  72.     x, y  : INTEGER;
  73.     Color : BYTE;
  74.   BEGIN
  75.     Color := GetColor(6);
  76.     FOR y := 0 TO Size.Y - 1 DO BEGIN
  77.       MoveChar(Buf, ' ', Color, Size.X);
  78.       FOR x := 0 TO Size.X - 1 DO
  79.         MoveChar(Buf[X], Chr(32 * y + x), Color, 1);
  80.       WriteLine(0, Y, Size.X, 1, Buf);
  81.     END;
  82.     ShowCursor;
  83.   END;
  84.  
  85.   PROCEDURE tTable.HandleEvent(VAR Event : tEvent);
  86.   VAR
  87.     CurrentSpot : tPoint;
  88.  
  89.     PROCEDURE CharFocused;
  90.     BEGIN
  91.       Message(Owner, evBroadcast,
  92.               AsciiTableCommandBase + cmCharacterFocused,
  93.               Pointer(Cursor.X + 32 * Cursor.Y));
  94.     END;
  95.  
  96.   BEGIN
  97.     inherited HandleEvent(Event);
  98.     IF Event.What = evMouseDown THEN BEGIN
  99.       REPEAT
  100.         IF MouseInView(Event.Where) THEN BEGIN
  101.           MakeLocal(Event.Where, CurrentSpot);
  102.           SetCursor(CurrentSpot.X, CurrentSpot.Y);
  103.           CharFocused;
  104.         END;
  105.       UNTIL NOT MouseEvent(Event, evMouseMove);
  106.       ClearEvent(Event);
  107.     END ELSE IF Event.What = evKeyDown THEN
  108.       WITH Cursor DO BEGIN
  109.         CASE Event.KeyCode OF
  110.           kbHome  : SetCursor(0, 0);
  111.           kbEnd   : SetCursor(Size.X - 1, Size.Y - 1);
  112.           kbUp    : IF Y > 0 THEN SetCursor(X, Y - 1);
  113.           kbDown  : IF Y < Size.Y - 1 THEN SetCursor(X, Y + 1);
  114.           kbLeft  : IF X > 0 THEN SetCursor(X - 1, Y);
  115.           kbRight : IF X < Size.X - 1 THEN SetCursor(X + 1, Y);
  116.         ELSE
  117.           SetCursor(Ord(Event.CharCode) MOD 32, Ord(Event.CharCode) DIV 32);
  118.         END;
  119.         CharFocused;
  120.         ClearEvent(Event);
  121.       END;
  122.   END;
  123.  
  124.   { --- tReport ------------------------------------------ }
  125.  
  126.   CONSTRUCTOR tReport.Load(VAR S : tStream);
  127.   BEGIN
  128.     inherited Load(S);
  129.     S.Read(ASCIIChar, SizeOf(ASCIIChar));
  130.   END;
  131.  
  132.   PROCEDURE tReport.Draw;
  133.   VAR
  134.     Ch      : LongInt;
  135.     Color   : BYTE;
  136.     Buf     : tDrawBuffer;
  137.     TempStr : STRING;
  138.   BEGIN
  139.     FormatStr(TempStr, '  Char: %c Decimal: %0#%3d Hex: %0#%02x  ', ASCIIChar);
  140.     WriteStr(0, 0, TempStr, 6);
  141.   END;
  142.  
  143.   PROCEDURE tReport.HandleEvent(VAR Event : tEvent);
  144.   VAR
  145.     Table : pTable;
  146.   BEGIN
  147.     inherited HandleEvent(Event);
  148.     IF Event.What = evBroadcast THEN
  149.       IF Event.Command =
  150.          AsciiTableCommandBase + cmCharacterFocused THEN BEGIN
  151.         ASCIIChar := Event.InfoLong;
  152.         DrawView;
  153.       END;
  154.   END;
  155.  
  156.   PROCEDURE tReport.Store(VAR S : tStream);
  157.   BEGIN
  158.     inherited Store(S);
  159.     S.Write(ASCIIChar, SizeOf(ASCIIChar));
  160.   END;
  161.  
  162.   CONSTRUCTOR tASCIIChart.Init;
  163.   VAR
  164.     R       : tRect;
  165.     Control : pView;
  166.   BEGIN
  167.     R.Assign(0, 0, 34, 12);
  168.     tWindow.Init(R, 'ASCII Chart', wnNoNumber);
  169.     Flags   := Flags AND NOT(wfGrow + wfZoom);
  170.     Palette := wpGrayWindow;
  171.  
  172.     R.Grow(- 1, - 1);
  173.     R.A.Y := R.B.Y - 1;
  174.     Control := New(pReport, Init(R));
  175.     WITH Control^ DO BEGIN
  176.       Options   := Options OR ofFramed;
  177.       EventMask := EventMask OR evBroadcast;
  178.     END;
  179.     Insert(Control);
  180.  
  181.     GetExtent(R);
  182.     R.Grow(- 1, - 1);
  183.     R.B.Y := R.B.Y - 2;
  184.     Control := New(PTable, Init(R));
  185.     WITH Control^ DO BEGIN
  186.       Options := Options OR ofFramed;
  187.       BlockCursor;
  188.     END;
  189.     Insert(Control);
  190.     Control^.Select;
  191.   END;
  192.  
  193.   PROCEDURE RegisterASCIITab;
  194.   BEGIN
  195.     RegisterType(rTable);
  196.     RegisterType(rReport);
  197.     RegisterType(rASCIIChart);
  198.   END;
  199.  
  200. END.
  201. (* ------------------------------------------------------ *)
  202. (*                Ende von ASCIITAB.PAS                   *)
  203.