home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9203 / tvision / fields.pas < prev    next >
Pascal/Delphi Source File  |  1992-03-21  |  5KB  |  158 lines

  1. (********************************************************************)
  2. (*                           FIELDS.PAS                             *)
  3. (*                                                                  *)
  4. (*       Die Unit FIELDS aus \tvdemos ins deutsche übertragen       *)
  5. (*                                                                  *)
  6. (*         Copyright (c) 1990 by Borland International              *)
  7. (********************************************************************)
  8. UNIT Fields;
  9.  
  10. INTERFACE
  11.  
  12. USES Objects, Drivers, Dialogs, Views, MsgBox;
  13.  
  14. TYPE
  15.   pKeyInputLine = ^tKeyInputLine;
  16.   tKeyInputLine = OBJECT (tInputLine)
  17.     FUNCTION Valid (Command: WORD): BOOLEAN; VIRTUAL;
  18.   END;
  19.  
  20.   pNumInputLine = ^tNumInputLine;
  21.   tNumInputLine = OBJECT (tInputLine)
  22.     Min: LONGINT;
  23.     Max: LONGINT;
  24.  
  25.     CONSTRUCTOR Init (VAR Bounds: tRect;
  26.                       aMaxLen:    INTEGER;
  27.                       aMin, aMax: LONGINT);
  28.     CONSTRUCTOR Load (VAR S: tStream);
  29.     FUNCTION DataSize: WORD; VIRTUAL;
  30.     PROCEDURE GetData (VAR Rec); VIRTUAL;
  31.     PROCEDURE SetData (VAR Rec); VIRTUAL;
  32.     PROCEDURE Store (VAR S: tStream);
  33.     FUNCTION Valid (Command: WORD): BOOLEAN; VIRTUAL;
  34.   END;
  35.  
  36. PROCEDURE RegisterFields;
  37.  
  38. CONST
  39.   rKeyInputLine: tStreamRec =
  40.     (ObjType: 10060;
  41.      VmtLink: Ofs (TypeOf (tKeyInputLine)^);
  42.      Load:    @tKeyInputLine.Load;
  43.      Store:   @tKeyInputLine.Store);
  44.   rNumInputLine: tStreamRec =
  45.     (ObjType: 10061;
  46.      VmtLink: Ofs (TypeOf (tNumInputLine)^);
  47.      Load:    @tNumInputLine.Load;
  48.      Store:   @tNumInputLine.Store);
  49.  
  50. IMPLEMENTATION
  51.  
  52. (* ================================================================ *)
  53. (*                            tKeyInputLine                         *)
  54. (* ================================================================ *)
  55. (* tKeyInputLine ist ein Nachkomme von tInputLine, der eine leere   *)
  56. (* Eingabe nicht zulässt, sondern über eine MessageBox den Benutzer *)
  57. (* informiert, dass er das Feld doch bitte ausfüllen soll. Vorher   *)
  58. (* selektiert Valid das eigene Objekt, damit der Benutzer weiss,    *)
  59. (* welches Feld er ausfüllen muss.                                  *)
  60. (* ---------------------------------------------------------------- *)
  61. FUNCTION tKeyInputLine.Valid (Command: WORD): BOOLEAN;
  62.   VAR Ok: BOOLEAN;
  63. BEGIN
  64.   Ok := TRUE;
  65.   IF (Command <> cmCancel) AND (Command <> cmValid) THEN BEGIN
  66.     IF Data^ = '' THEN BEGIN
  67.       Select;
  68.       MessageBox ('Dieses Feld darf nicht leer sein !',
  69.                   NIL, mfError + mfOkButton);
  70.       Ok := FALSE;
  71.     END;
  72.   END;
  73.   IF Ok THEN Valid := tInputLine.Valid (Command)
  74.         ELSE Valid := FALSE;
  75. END;
  76.  
  77. (* ================================================================ *)
  78. (*                           tNumInputLine                          *)
  79. (* ================================================================ *)
  80. (* tNumInputLine nimmt ganzzahlige Eingaben entgegen, die im        *)
  81. (* Bereich aMin bis aMax liegen müssen. aMaxLen gibt die maximale   *)
  82. (* Länge der Zahl an (z.B. 2: nur zweistellige Eingaben erlaubt).   *)
  83. (* ---------------------------------------------------------------- *)
  84. CONSTRUCTOR tNumInputLine.Init (VAR Bounds: tRect;
  85.                                 aMaxLen:    INTEGER;
  86.                                 aMin, aMax: LONGINT);
  87. BEGIN
  88.   tInputLine.Init (Bounds, aMaxLen);
  89.   Min := aMin;  Max := aMax;
  90. END;
  91.  
  92. CONSTRUCTOR tNumInputLine.Load (VAR S: tStream);
  93. BEGIN
  94.   tInputLine.Load (S);
  95.   S.Read (Min, SizeOf (LongInt) * 2);
  96. END;
  97.  
  98. FUNCTION tNumInputLine.DataSize: WORD;
  99. BEGIN
  100.   DataSize := SizeOf (LongInt);
  101. END;
  102.  
  103. PROCEDURE tNumInputLine.GetData (VAR Rec);
  104.   VAR Code: INTEGER;
  105. BEGIN
  106.   Val (Data^, Longint (Rec), Code);
  107. END;
  108.  
  109. PROCEDURE tNumInputLine.Store (VAR S: tStream);
  110. BEGIN
  111.   tInputLine.Store (S);
  112.   S.Write (Min, SizeOf (Longint) * 2);
  113. END;
  114.  
  115. PROCEDURE tNumInputLine.SetData (VAR Rec);
  116.   VAR S: STRING [12];
  117. BEGIN
  118.   Str (Longint (Rec), Data^);
  119.   SelectAll (True);
  120. END;
  121.  
  122. FUNCTION tNumInputLine.Valid (Command: WORD): BOOLEAN;
  123.   VAR
  124.     Code:   INTEGER;
  125.     Value:  LONGINT;
  126.     Params: ARRAY [0..1] OF LONGINT;
  127.     Ok:     BOOLEAN;
  128. BEGIN
  129.   Ok := TRUE;
  130.   IF (Command <> cmCancel) AND (Command <> cmValid) THEN BEGIN
  131.     IF Data^ = '' THEN Data^ := '0';
  132.     Val (Data^, Value, Code);
  133.     IF (Code <> 0) OR (Value < Min) OR (Value > Max) THEN BEGIN
  134.       Select;
  135.       Params [0] := Min;
  136.       Params [1] := Max;
  137.       MessageBox ('Die Zahl muss im Bereich von %D bis %D liegen.',
  138.                   @Params, mfError + mfOkButton);
  139.       SelectAll (TRUE);
  140.       Ok := FALSE;
  141.     END;
  142.   END;
  143.   IF Ok THEN Valid := tInputLine.Valid (Command)
  144.   ELSE Valid := FALSE;
  145. END;
  146.  
  147. PROCEDURE RegisterFields;
  148. BEGIN
  149.   RegisterType (rKeyInputLine);
  150.   RegisterType (rNumInputLine);
  151. END;
  152.  
  153. END.
  154.  
  155. (* ---------------------------------------------------------------- *)
  156. (*                                FIELDS.PAS                        *)
  157. (* ---------------------------------------------------------------- *)
  158.