home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / turbo55 / tp55 / sliders.pas < prev    next >
Pascal/Delphi Source File  |  1989-05-02  |  2KB  |  111 lines

  1.  
  2. { Turbo Sliders }
  3. { Copyright (c) 1989 by Borland International, Inc. }
  4.  
  5. unit Sliders;
  6. { Turbo Pascal 5.5 object-oriented example.
  7.   This unit extends FORM.PAS' Field object type.
  8.   Refer to OOPDEMOS.DOC for an overview of this unit.
  9. }
  10.  
  11. {$S-}
  12.  
  13. interface
  14.  
  15. uses Forms;
  16.  
  17. type
  18.  
  19.   FSliderPtr = ^FSlider;
  20.   FSlider = object(Field)
  21.     Min, Max, Delta: Integer;
  22.     constructor Init(PX, PY: Integer; PTitle: FString;
  23.       PMin, PMax, PDelta: Integer);
  24.     procedure Clear; virtual;
  25.     function Edit: Char; virtual;
  26.     procedure Show; virtual;
  27.     procedure Display(I: Integer);
  28.   end;
  29.  
  30.   FStream = object(Forms.FStream)
  31.     procedure RegisterTypes; virtual;
  32.   end;
  33.  
  34. implementation
  35.  
  36. uses Crt;
  37.  
  38. { FSlider }
  39.  
  40. constructor FSlider.Init(PX, PY: Integer; PTitle: FString;
  41.   PMin, PMax, PDelta: Integer);
  42. begin
  43.   Field.Init(PX, PY, 2, PTitle);
  44.   Min := PMin;
  45.   Max := PMax;
  46.   Delta := PDelta;
  47. end;
  48.  
  49. procedure FSlider.Clear;
  50. begin
  51.   Integer(Value^) := (Max - Min) div 2;
  52. end;
  53.  
  54. function FSlider.Edit: Char;
  55. var
  56.   I: Integer;
  57.   Ch: Char;
  58.   Stop: Boolean;
  59. begin
  60.   I := Integer(Value^);
  61.   Stop := False;
  62.   repeat
  63.     Display(I);
  64.     GotoXY(X + Length(Title^) + 1, Y);
  65.     Ch := ReadChar;
  66.     case Ch of
  67.       CLeft: if I > Min then Dec(I, Delta);
  68.       CRight: if I < Max then Inc(I, Delta);
  69.       CHome: I := Min;
  70.       CEnd: I := Max;
  71.       CUndo: I := Integer(Value^);
  72.       CEnter, CNext, CPrev, CSave, CEsc: Stop := True;
  73.     else
  74.       Beep;
  75.     end;
  76.   until Stop;
  77.   if Ch <> CEsc then Integer(Value^) := I;
  78.   Edit := Ch;
  79. end;
  80.  
  81. procedure FSlider.Show;
  82. begin
  83.   Display(Integer(Value^));
  84. end;
  85.  
  86. procedure FSlider.Display(I: Integer);
  87. var
  88.   Steps: Integer;
  89.   S: FString;
  90. begin
  91.   Steps := (Max - Min) div Delta + 1;
  92.   S[0] := Chr(Steps);
  93.   FillChar(S[1], Steps, #176);
  94.   S[(I - Min) div Delta + 1] := #219;
  95.   GotoXY(X, Y);
  96.   Color(TitleColor);
  97.   Write(Title^);
  98.   Color(ValueColor);
  99.   Write(' ', Min, ' ', S, ' ', Max, ' ');
  100. end;
  101.  
  102. { FStream }
  103.  
  104. procedure FStream.RegisterTypes;
  105. begin
  106.   Forms.FStream.RegisterTypes;
  107.   Register(TypeOf(FSlider), @FSlider.Store, @FSlider.Load);
  108. end;
  109.  
  110. end.
  111.