home *** CD-ROM | disk | FTP | other *** search
- {************************************************}
- { }
- { Turbo Pascal 6.0 }
- { Turbo Vision Demo }
- { Copyright (c) 1990 by Borland International }
- { }
- {************************************************}
-
- unit ASCIITab;
-
- {$F+,O+,X+,S-,D-}
-
- { Ascii table viewer. See TVDEMO.PAS for an example program
- that uses this unit.
- }
-
- interface
-
- uses Objects, App, Views, Drivers;
-
- type
- PTable = ^TTable;
- TTable = object(TView)
- procedure Draw; virtual;
- procedure HandleEvent(var Event:TEvent); virtual;
- end;
-
- PReport = ^TReport;
- TReport = object(TView)
- ASCIIChar: LongInt;
- constructor Load(var S: TStream);
- procedure Draw; virtual;
- procedure HandleEvent(var Event:TEvent); virtual;
- procedure Store(var S: TStream);
- end;
-
- PASCIIChart = ^TASCIIChart;
- TASCIIChart = object(TWindow)
- constructor Init;
- end;
-
- const
- AsciiTableCommandBase: Word = 910;
-
- RTable: TStreamRec = (
- ObjType: 10030;
- VmtLink: Ofs(TypeOf(TTable)^);
- Load: @TTable.Load;
- Store: @TTable.Store
- );
- RReport: TStreamRec = (
- ObjType: 10031;
- VmtLink: Ofs(TypeOf(TReport)^);
- Load: @TReport.Load;
- Store: @TReport.Store
- );
- RASCIIChart: TStreamRec = (
- ObjType: 10032;
- VmtLink: Ofs(TypeOf(TASCIIChart)^);
- Load: @TASCIIChart.Load;
- Store: @TASCIIChart.Store
- );
-
- procedure RegisterASCIITab;
-
- implementation
-
- const
- cmCharacterFocused = 0;
-
- procedure TTable.Draw;
- var
- Buf: TDrawBuffer;
- X, Y: Integer;
- Color: Byte;
- begin
- Color := GetColor(6);
- for Y := 0 to Size.Y - 1 do
- begin
- MoveChar(Buf, ' ', Color, Size.X);
- for X := 0 to Size.X - 1 do
- MoveChar(Buf[x], Chr(32 * y + x), Color, 1);
- WriteLine(0, y, Size.X, 1, Buf);
- end;
- ShowCursor;
- end;
-
- procedure TTable.HandleEvent(var Event:TEvent);
- var
- CurrentSpot: TPoint;
-
- procedure CharFocused;
- begin
- Message(Owner, evBroadcast, AsciiTableCommandBase + cmCharacterFocused,
- Pointer(Cursor.X + 32 * Cursor.Y));
- end;
-
- begin
- TView.HandleEvent(Event);
- if Event.What = evMouseDown then
- begin
- repeat
- if MouseInView(Event.Where) then
- begin
- MakeLocal(Event.Where, CurrentSpot);
- SetCursor(CurrentSpot.X, CurrentSpot.Y);
- CharFocused;
- end;
- until not MouseEvent(Event, evMouseMove);
- ClearEvent(Event);
- end
- else if Event.What = evKeyDown then
- with Cursor do begin
- case Event.KeyCode of
- kbHome: SetCursor(0,0);
- kbEnd: SetCursor(Size.X - 1, Size.Y - 1);
- kbUp: if Y > 0 then SetCursor(X, Y - 1);
- kbDown: if Y < Size.Y - 1 then SetCursor(X, Y + 1);
- kbLeft: if X > 0 then SetCursor(X - 1, Y);
- kbRight: if X < Size.X - 1 then SetCursor(X + 1, Y);
- else
- SetCursor(ord(Event.CharCode) mod 32, ord(Event.CharCode) div 32);
- end;
- CharFocused;
- ClearEvent(Event);
- end;
- end;
-
- { TReport }
-
- constructor TReport.Load(var S: TStream);
- begin
- TView.Load(S);
- S.Read(ASCIIChar, SizeOf(ASCIIChar));
- end;
-
- procedure TReport.Draw;
- var
- Ch: LongInt;
- Color: Byte;
- Buf: TDrawBuffer;
- TempStr: string;
- begin
- FormatStr(TempStr, ' Char: %c Decimal: %0#%3d Hex: %0#%02x ', ASCIIChar);
- WriteStr(0, 0, TempStr, 6);
- end;
-
- procedure TReport.HandleEvent(var Event: TEvent);
- var
- Table: PTable;
- begin
- TView.HandleEvent(Event);
- if Event.What = evBroadcast then
- if Event.Command = AsciiTableCommandBase + cmCharacterFocused then
- begin
- ASCIIChar := Event.InfoLong;
- DrawView;
- end;
- end;
-
- procedure TReport.Store(var S: TStream);
- begin
- TView.Store(S);
- S.Write(ASCIIChar, SizeOf(ASCIIChar));
- end;
-
- constructor TASCIIChart.Init;
- var
- R: TRect;
- Control: PVIew;
- begin
- R.Assign(0, 0, 34, 12);
- TWindow.Init(R, 'ASCII Chart', wnNoNumber);
- Flags := Flags and not (wfGrow + wfZoom);
- Palette := wpGrayWindow;
-
- R.Grow(-1,-1);
- R.A.Y := R.B.Y - 1;
- Control := New(PReport, Init(R));
- with Control^ do
- begin
- Options := Options or ofFramed;
- EventMask := EventMask or evBroadcast;
- end;
- Insert(Control);
-
- GetExtent(R);
- R.Grow(-1,-1);
- R.B.Y := R.B.Y - 2;
- Control := New(PTable, Init(R));
- with Control^ do
- begin
- Options := Options or ofFramed;
- BlockCursor;
- end;
- Insert(Control);
- Control^.Select;
- end;
-
- procedure RegisterASCIITab;
- begin
- RegisterType(RTable);
- RegisterType(RReport);
- RegisterType(RASCIIChart);
- end;
-
- end.
-