home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* APPS.PAS *)
- (* Bildschirmschoner für Turbo Vision *)
- (* (c) 1993 Andres Cvitkovich & DMV-Verlag *)
- (* ------------------------------------------------------ *)
- UNIT AppS;
-
- {$F+,O+,S-,X+,D-}
-
- INTERFACE
-
- USES App, Objects, Drivers, Views;
-
- CONST
- cSavColor = #$07#$00#$00#$00;
- cSavBlackWhite = #$07#$00#$00#$00;
- cSavMonochrome = #$07#$00#$00#$00;
- cSColor = cColor + cSavColor;
- cSBlackWhite = cBlackWhite + cSavBlackWhite;
- cSMonochrome = cMonochrome + cSavMonochrome;
-
- TYPE
- pDarkView = ^tDarkView;
- tDarkView = OBJECT (tView)
- FUNCTION GetPalette : pPalette; VIRTUAL;
- PROCEDURE Draw; VIRTUAL;
- END;
-
- pApplicationS = ^tApplicationS;
- tApplicationS = OBJECT (tApplication)
- LastInputTime : LongInt;
- TimeOutTicks : LongInt;
- Dark : BOOLEAN;
- DarkenObject : pDarkView;
- LastSelected : pView;
-
- CONSTRUCTOR Init(TimeOut : WORD);
- FUNCTION GetPalette : pPalette; VIRTUAL;
- PROCEDURE GetEvent(VAR Event : tEvent); VIRTUAL;
- PROCEDURE Idle; VIRTUAL;
- PROCEDURE SetTimeOut(TimeOut : WORD); VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- (* Turbo Pascal 6.0:
- CONST
- Seg0040 = $0040;
- *)
-
- FUNCTION Timer : LongInt;
- BEGIN
- Timer := MemL[Seg0040:$006C];
- END;
-
- FUNCTION tDarkView.GetPalette : pPalette;
- CONST
- DarkColor : STRING = #64;
- BEGIN
- GetPalette := @DarkColor
- END;
-
- PROCEDURE tDarkView.Draw;
- VAR
- s : STRING;
- i : BYTE;
- BEGIN
- FillChar(s[1], Size.X, ' ');
- s[0] := Chr(Size.X);
- FOR i := 0 TO Size.Y-1 DO
- WriteStr(0, i, s, 1);
- END;
-
- CONSTRUCTOR tApplicationS.Init(TimeOut : WORD);
- BEGIN
- tApplication.Init;
- SetTimeOut(TimeOut);
- Dark := FALSE;
- END;
-
- FUNCTION tApplicationS.GetPalette : pPalette;
- CONST
- P : ARRAY [apColor..apMonochrome] OF
- STRING [Length(cSColor)] =
- (cSColor, cSBlackWhite, cSMonochrome);
- BEGIN
- GetPalette := @P[AppPalette];
- END;
-
- PROCEDURE tApplicationS.GetEvent(VAR Event : tEvent);
- BEGIN
- tApplication.GetEvent(Event);
- IF Event.What <> evNothing THEN BEGIN
- IF Dark THEN BEGIN
- ShowMouse;
- Delete(DarkenObject);
- Dark := FALSE;
- ClearEvent(Event);
- LastSelected^.Select;
- END;
- LastInputTime := Timer;
- END;
- END;
-
- PROCEDURE tApplicationS.Idle;
- VAR
- t : LongInt;
- R : tRect;
- BEGIN
- tApplication.Idle;
- IF (NOT Dark) AND (TimeOutTicks > 0) THEN BEGIN
- t := Timer;
- IF t < LastInputTime THEN
- t := t + 1573040;
- IF t > (LastInputTime + TimeOutTicks) THEN BEGIN
- Dark := TRUE;
- GetExtent(R);
- DarkenObject := New(pDarkView, Init(R));
- Insert(DarkenObject);
- LastSelected := Current;
- DarkenObject^.Select;
- HideMouse;
- END;
- END;
- END;
-
- PROCEDURE tApplicationS.SetTimeOut(TimeOut : WORD);
- BEGIN
- TimeOutTicks := Round(TimeOut * 18.2);
- LastInputTime := Timer;
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von APPS.PAS *)
-