home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SB.PAS *)
- (* Diese Unit stellt das Objekt "ScrollBarObj" zur Ver- *)
- (* fügung, das einen Scrollbalken erzeugt. *)
- (* ACHTUNG: Nimmt keinerlei Prüfungen in Bezug auf die *)
- (* Variablen vor !!! *)
- (* (c) 1990 R.Reichert & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT SB;
-
- INTERFACE
-
- USES StandWin;
-
- TYPE
- ScrollBarObj =
- OBJECT
- x1, y1, x2, y2, { Koordinaten }
- x, y,
- PosCol, { Farben von PosChr, }
- BarCol, { dem Balken und }
- TBBCol : BYTE; { den Pfeilspitzen }
- PosChr, { Zeichen für aktuelle Pos. }
- BarChr, { die Balken und ... }
- BTLChr, { Pfeile: oben / links, }
- BBRChr : CHAR; { unten / rechts }
- Max, Pos : WORD; { Maximum und Position }
- Horiz : BOOLEAN; { Horizontal ? }
-
- PROCEDURE ShowBar;
- PROCEDURE ShowNewPos(NPos, NMax : WORD);
- END;
-
- IMPLEMENTATION
-
- (* ------------------------------------------------------ *)
- (* Zeichnet den Balken mit den aktuellen Daten. *)
-
- PROCEDURE ScrollBarObj.ShowBar;
- VAR
- i : INTEGER;
- BEGIN
- WITH ScrProc DO BEGIN
- WriteChr(x1, y1, TBBCol, BTLChr);
- WriteChr(x2, y2, TBBCol, BBRChr);
- IF Horiz THEN
- FOR i := Succ(x1) TO Pred(x2) DO
- WriteChr(i, y1, BarCol, BarChr)
- ELSE
- FOR i := Succ(y1) TO Pred(y2) DO
- WriteChr(x1, i, BarCol, BarChr);
- IF Horiz THEN BEGIN
- x := Succ(x1);
- y := y1;
- END ELSE BEGIN
- x := x1;
- y := Succ(y1);
- END;
- ShowNewPos(Pos, Max);
- END;
- END;
-
- (* ------------------------------------------------------ *)
- (* Errechnet neue Position und verschiebt den Positions- *)
- (* zeiger entsprechend. *)
-
- PROCEDURE ScrollBarObj.ShowNewPos(NPos, NMax : WORD);
- VAR
- r : REAL;
- BEGIN
- WITH ScrProc DO BEGIN
- WriteChr(x, y, BarCol, BarChr);
- Max := NMax;
- Pos := NPos;
- IF Horiz THEN BEGIN
- r := x1 + Pos * Pred(x2-x1) / Max;
- x := x1 + Pos * Pred(x2-x1) DIV Max;
- IF r > x THEN Inc(x);
- y := y1;
- END ELSE BEGIN
- x := x1;
- r := y1 + Pos * Pred(y2-y1) / Max;
- y := y1 + Pos * Pred(y2-y1) DIV Max;
- IF r > y THEN Inc(y);
- END;
- WriteChr(x, y, PosCol, PosChr);
- END;
- END;
-
- BEGIN
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SB.PAS *)
-
-