home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 11 / grdlagen / sb.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-10-05  |  2.9 KB  |  95 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     SB.PAS                             *)
  3. (* Diese Unit stellt das Objekt "ScrollBarObj" zur Ver-   *)
  4. (* fügung, das einen Scrollbalken erzeugt.                *)
  5. (* ACHTUNG: Nimmt keinerlei Prüfungen in Bezug auf die    *)
  6. (*          Variablen vor !!!                             *)
  7. (*         (c) 1990  R.Reichert & TOOLBOX                 *)
  8. (* ------------------------------------------------------ *)
  9. UNIT SB;
  10.  
  11. INTERFACE
  12.  
  13. USES StandWin;
  14.  
  15. TYPE
  16.   ScrollBarObj =
  17.     OBJECT
  18.       x1, y1, x2, y2,          { Koordinaten               }
  19.       x,  y,
  20.       PosCol,                  { Farben von PosChr,        }
  21.       BarCol,                  { dem Balken und            }
  22.       TBBCol  : BYTE;          { den Pfeilspitzen          }
  23.       PosChr,                  { Zeichen für aktuelle Pos. }
  24.       BarChr,                  { die Balken und ...        }
  25.       BTLChr,                  { Pfeile: oben  / links,    }
  26.       BBRChr   : CHAR;         {         unten / rechts    }
  27.       Max, Pos : WORD;         { Maximum und Position      }
  28.       Horiz    : BOOLEAN;      { Horizontal ?              }
  29.  
  30.       PROCEDURE ShowBar;
  31.       PROCEDURE ShowNewPos(NPos, NMax : WORD);
  32.     END;
  33.  
  34. IMPLEMENTATION
  35.  
  36. (* ------------------------------------------------------ *)
  37. (* Zeichnet den Balken mit den aktuellen Daten.           *)
  38.  
  39.   PROCEDURE ScrollBarObj.ShowBar;
  40.   VAR
  41.     i : INTEGER;
  42.   BEGIN
  43.     WITH ScrProc DO BEGIN
  44.       WriteChr(x1, y1, TBBCol, BTLChr);
  45.       WriteChr(x2, y2, TBBCol, BBRChr);
  46.       IF Horiz THEN
  47.         FOR i := Succ(x1) TO Pred(x2) DO
  48.           WriteChr(i, y1, BarCol, BarChr)
  49.       ELSE
  50.         FOR i := Succ(y1) TO Pred(y2) DO
  51.           WriteChr(x1, i, BarCol, BarChr);
  52.       IF Horiz THEN BEGIN
  53.         x := Succ(x1);
  54.         y := y1;
  55.       END ELSE BEGIN
  56.         x := x1;
  57.         y := Succ(y1);
  58.       END;
  59.       ShowNewPos(Pos, Max);
  60.     END;
  61.   END;
  62.  
  63. (* ------------------------------------------------------ *)
  64. (* Errechnet neue Position und verschiebt den Positions-  *)
  65. (* zeiger entsprechend.                                   *)
  66.  
  67.   PROCEDURE ScrollBarObj.ShowNewPos(NPos, NMax : WORD);
  68.   VAR
  69.     r : REAL;
  70.   BEGIN
  71.     WITH ScrProc DO BEGIN
  72.       WriteChr(x, y, BarCol, BarChr);
  73.       Max := NMax;
  74.       Pos := NPos;
  75.       IF Horiz THEN BEGIN
  76.         r := x1 + Pos * Pred(x2-x1) / Max;
  77.         x := x1 + Pos * Pred(x2-x1) DIV Max;
  78.         IF r > x THEN Inc(x);
  79.         y := y1;
  80.       END ELSE BEGIN
  81.         x := x1;
  82.         r := y1 + Pos * Pred(y2-y1) / Max;
  83.         y := y1 + Pos * Pred(y2-y1) DIV Max;
  84.         IF r > y THEN Inc(y);
  85.       END;
  86.       WriteChr(x, y, PosCol, PosChr);
  87.     END;
  88.   END;
  89.  
  90. BEGIN
  91. END.
  92. (* ------------------------------------------------------ *)
  93. (*                  Ende von SB.PAS                       *)
  94.  
  95.