home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* BROWSER.PAS *)
- (* Modifizierter File-Viewer *)
- (* Auszüge aus dem Turbo-Vision-Demoprogramm *)
- (* Portions Copyright (c) Borland International *)
- (* ------------------------------------------------- *)
- {$X+,S-}
-
- UNIT Browser;
-
- INTERFACE
-
- USES Dos, Objects, Drivers, Memory, Views, MsgBox, App;
-
- TYPE
- pLineCollection = ^tLineCollection;
- tLineCollection = OBJECT (tCollection)
- PROCEDURE FreeItem(P : Pointer); VIRTUAL;
- END;
-
- pFileViewer = ^tFileViewer;
- tFileViewer = OBJECT (tScroller)
- FileLines : pCollection;
- IsValid : BOOLEAN;
-
- CONSTRUCTOR Init(VAR Bounds : tRect;
- aHScrollBar,
- aVScrollBar : pScrollBar;
- VAR FileName : PathStr);
- DESTRUCTOR Done; VIRTUAL;
- PROCEDURE Draw; VIRTUAL;
- FUNCTION Valid(Command : WORD) : BOOLEAN;
- VIRTUAL;
- END;
-
- pFileWindow = ^tFileWindow;
- tFileWindow = OBJECT (tWindow)
- CONSTRUCTOR Init( Bounds : tRect;
- VAR FileName : PathStr);
- END;
-
- IMPLEMENTATION
-
- PROCEDURE tLineCollection.FreeItem(P : Pointer);
- BEGIN
- DisposeStr(P);
- END;
-
- CONSTRUCTOR tFileViewer.Init(VAR Bounds : tRect;
- aHScrollBar,
- aVScrollBar: pScrollBar;
- VAR FileName : PathStr);
- VAR
- FileToView : TEXT;
- Line : STRING;
- MaxWidth : INTEGER;
- BEGIN
- tScroller.Init(Bounds, aHScrollBar, aVScrollBar);
- IsValid := TRUE;
- FileLines := New(pLineCollection, Init(5, 5));
- {$I-}
- Assign(FileToView, FileName);
- Reset(FileToView);
- IF IOResult <> 0 THEN BEGIN
- MessageBox('Cannot open file ' + FileName + '.',
- NIL, mfError + mfOkButton);
- IsValid := FALSE;
- END ELSE BEGIN
- MaxWidth := 0;
- WHILE NOT EoF(FileToView) AND
- NOT LowMemory DO BEGIN
- ReadLn(FileToView, Line);
- IF Length(Line) > MaxWidth THEN
- MaxWidth := Length(Line);
- FileLines^.Insert(NewStr(Line));
- END;
- Close(FileToView);
- END;
- {$I+}
- SetLimit(MaxWidth, FileLines^.Count);
- END;
-
- DESTRUCTOR tFileViewer.Done;
- BEGIN
- Dispose(FileLines, Done);
- tScroller.Done;
- END;
-
- PROCEDURE tFileViewer.Draw;
- VAR
- B : tDrawBuffer;
- C : BYTE;
- I : INTEGER;
- S : STRING;
- P : pString;
- BEGIN
- C := GetColor(1);
- FOR i := 0 TO Size.Y - 1 DO BEGIN
- MoveChar(B, ' ', C, Size.X);
- IF Delta.Y + i < FileLines^.Count THEN BEGIN
- P := FileLines^.At(Delta.Y + i);
- IF P <> NIL THEN
- S := Copy(P^, Delta.X + 1, Size.X)
- ELSE
- S := '';
- MoveStr(B, S, C);
- END;
- WriteLine(0, i, Size.X, 1, B);
- END;
- END;
-
- FUNCTION tFileViewer.Valid(Command : WORD) : BOOLEAN;
- BEGIN
- Valid := IsValid;
- END;
-
- CONSTRUCTOR tFileWindow.Init(Bounds : tRect;
- VAR FileName : PathStr);
- VAR
- R : tRect;
- BEGIN
- tWindow.Init(Bounds, FileName, wnNoNumber);
- Options := Options OR ofTileable;
- GetExtent(R);
- R.Grow(-1,-1);
- Insert(New(pFileViewer, Init(R,
- StandardScrollBar(sbHorizontal + sbHandleKeyboard),
- StandardScrollBar(sbVertical + sbHandleKeyboard),
- FileName)));
- END;
-
- END.
- (* ------------------------------------------------- *)
- (* Ende von BROWSER.PAS *)
-