home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / TPASCAL3.ZIP / TVISION.ZIP / MSGBOX.PAS < prev    next >
Pascal/Delphi Source File  |  1991-06-11  |  5KB  |  171 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 6.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1990 Borland International        }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit MsgBox;
  12.  
  13. {$F+,O+,X+,D-}
  14.  
  15. interface
  16.  
  17. uses Objects;
  18.  
  19. const
  20.  
  21. { Message box classes }
  22.  
  23.   mfWarning      = $0000;       { Display a Warning box }
  24.   mfError        = $0001;       { Dispaly a Error box }
  25.   mfInformation  = $0002;       { Display an Information Box }
  26.   mfConfirmation = $0003;       { Display a Confirmation Box }
  27.  
  28. { Message box button flags }
  29.  
  30.   mfYesButton    = $0100;       { Put a Yes button into the dialog }
  31.   mfNoButton     = $0200;       { Put a No button into the dialog }
  32.   mfOKButton     = $0400;       { Put an OK button into the dialog }
  33.   mfCancelButton = $0800;       { Put a Cancel button into the dialog }
  34.  
  35.   mfYesNoCancel  = mfYesButton + mfNoButton + mfCancelButton;
  36.                                 { Standard Yes, No, Cancel dialog }
  37.   mfOKCancel     = mfOKButton + mfCancelButton;
  38.                                 { Standard OK, Cancel dialog }
  39.  
  40. { MessageBox displays the given string in a standard sized      }
  41. { dialog box. Before the dialog is displayed the Msg and Params }
  42. { are passed to FormatStr.  The resulting string is displayed   }
  43. { as a TStaticText view in the dialog.                          }
  44.  
  45. function MessageBox(Msg: String; Params: Pointer; AOptions: Word): Word;
  46.  
  47. { MessageBoxRec allows the specification of a TRect for the     }
  48. { message box to occupy.                                        }
  49.  
  50. function MessageBoxRect(var R: TRect; Msg: String; Params: Pointer;
  51.   AOptions: Word): Word;
  52.  
  53. { InputBox displays a simple dialog that allows the user to     }
  54. { type in a string.                                             }
  55.  
  56. function InputBox(Title: String; ALabel: String; var S: String;
  57.   Limit: Byte): Word;
  58.  
  59. { InputBoxRect is like InputBox but allows the specification of }
  60. { a rectangle.                                                  }
  61.  
  62. function InputBoxRect(var Bounds: TRect; Title: String; ALabel: String;
  63.   var S: String;  Limit: Byte): Word;
  64.  
  65. implementation
  66.  
  67. uses Drivers, Views, Dialogs, App;
  68.  
  69. function MessageBox(Msg: String; Params: Pointer;
  70.   AOptions: Word): Word;
  71. var
  72.   R: TRect;
  73. begin
  74.   R.Assign(0, 0, 40, 9);
  75.   R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
  76.   MessageBox := MessageBoxRect(R, Msg, Params, AOptions);
  77. end;
  78.  
  79. function MessageBoxRect(var R: TRect; Msg: String; Params: Pointer;
  80.   AOptions: Word): Word;
  81. const
  82.   ButtonName: array[0..3] of string[6] =
  83.     ('~Y~es', '~N~o', 'O~K~', 'Cancel');
  84.   Commands: array[0..3] of word =
  85.     (cmYes, cmNo, cmOK, cmCancel);
  86.   Titles: array[0..3] of string[11] =
  87.     ('Warning','Error','Information','Confirm');
  88. var
  89.   I, X, ButtonCount: Integer;
  90.   Dialog: PDialog;
  91.   Control: PView;
  92.   T: TRect;
  93.   ButtonList: array[0..4] of PView;
  94.   S: String;
  95. begin
  96.   Dialog := New(PDialog,
  97.     Init(R, Titles[AOptions and $3]));
  98.   with Dialog^ do
  99.   begin
  100.     R.Assign(3, 2, Size.X - 2, Size.Y - 3);
  101.     FormatStr(S, Msg, Params^);
  102.     Control := New(PStaticText, Init(R, S));
  103.     Insert(Control);
  104.     X := -2;
  105.     ButtonCount := 0;
  106.     for I := 0 to 3 do
  107.       if AOptions and ($0100 shl I) <> 0 then
  108.       begin
  109.         R.Assign(0, 0, 10, 2);
  110.         Control := New(PButton, Init(R, ButtonName[I], Commands[i],
  111.           bfNormal));
  112.         Inc(X, Control^.Size.X + 2);
  113.         ButtonList[ButtonCount] := Control;
  114.         Inc(ButtonCount);
  115.       end;
  116.     X := (Size.X - X) shr 1;
  117.     for I := 0 to ButtonCount - 1 do
  118.     begin
  119.       Control := ButtonList[I];
  120.       Insert(Control);
  121.       Control^.MoveTo(X, Size.Y - 3);
  122.       Inc(X, Control^.Size.X + 2);
  123.     end;
  124.     SelectNext(False);
  125.   end;
  126.   MessageBoxRect := DeskTop^.ExecView(Dialog);
  127.   Dispose(Dialog, Done);
  128. end;
  129.  
  130. function InputBox(Title: String; ALabel: String; var S: String;
  131.   Limit: Byte): Word;
  132. var
  133.   R: TRect;
  134. begin
  135.   R.Assign(0, 0, 60, 8);
  136.   R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
  137.   InputBox := InputBoxRect(R, Title, ALabel, S, Limit);
  138. end;
  139.  
  140. function InputBoxRect(var Bounds: TRect; Title: String; ALabel: String;
  141.   var S: String;  Limit: Byte): Word;
  142. var
  143.   Dialog: PDialog;
  144.   Control: PView;
  145.   R: TRect;
  146.   C: Word;
  147. begin
  148.   Dialog := New(PDialog, Init(Bounds, Title));
  149.   with Dialog^ do
  150.   begin
  151.     R.Assign(4 + CStrLen(ALabel), 2, Size.X - 3, 3);
  152.     Control := New(PInputLine, Init(R, Limit));
  153.     Insert(Control);
  154.     R.Assign(2, 2, 3 + CStrLen(ALabel), 3);
  155.     Insert(New(PLabel, Init(R, ALabel, Control)));
  156.     R.Assign(Size.X - 24, Size.Y - 4, Size.X - 14, Size.Y - 2);
  157.     Insert(New(PButton, Init(R, 'O~K~', cmOk, bfDefault)));
  158.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  159.     Insert(New(PButton, Init(R, 'Cancel', cmCancel, bfNormal)));
  160.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  161.     SelectNext(False);
  162.   end;
  163.   Dialog^.SetData(S);
  164.   C := DeskTop^.ExecView(Dialog);
  165.   if C <> cmCancel then Dialog^.GetData(S);
  166.   Dispose(Dialog, Done);
  167.   InputBoxRect := C;
  168. end;
  169.  
  170. end.
  171.