home *** CD-ROM | disk | FTP | other *** search
/ BBS 1 / BBS#1.iso / for-dos / newtvsrc.arj / MSGBOX.PAS < prev    next >
Pascal/Delphi Source File  |  1993-10-27  |  6KB  |  180 lines

  1. {*******************************************}
  2. { Borland Pascal 7.0 unit                   }
  3. { Copyright (c) 1992 Borland International  }
  4. { Copyright (c) 1993 ACD Group              }
  5. {*******************************************}
  6.  
  7. unit MsgBox;
  8.  
  9. {$F+,O+,X+}
  10.  
  11. interface
  12.  
  13. uses Objects;
  14.  
  15. const
  16.  
  17. { Message box classes }
  18.  
  19.   mfWarning      = $0000;       { Display a Warning box }
  20.   mfError        = $0001;       { Dispaly a Error box }
  21.   mfInformation  = $0002;       { Display an Information Box }
  22.   mfConfirmation = $0003;       { Display a Confirmation Box }
  23.  
  24. { Message box button flags }
  25.  
  26.   mfYesButton    = $0100;       { Put a Yes button into the dialog }
  27.   mfNoButton     = $0200;       { Put a No button into the dialog }
  28.   mfOKButton     = $0400;       { Put an OK button into the dialog }
  29.   mfCancelButton = $0800;       { Put a Cancel button into the dialog }
  30.  
  31.   mfYesNoCancel  = mfYesButton + mfNoButton + mfCancelButton;
  32.                                 { Standard Yes, No, Cancel dialog }
  33.   mfOKCancel     = mfOKButton + mfCancelButton;
  34.                                 { Standard OK, Cancel dialog }
  35.   hcYesButton    = $FF00-1;
  36.   hcNoButton     = $FF00-2;
  37.   hcOkButton     = $FF00-3;
  38.   hcCancelButton = $FF00-4;
  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
  68.     Drivers,
  69.     Views,
  70.     Dialogs,
  71. {    Cons,
  72.     ACHelp,}
  73.     App;
  74.  
  75. function MessageBox(Msg: String; Params: Pointer;
  76.   AOptions: Word): Word;
  77. var
  78.   R: TRect;
  79. begin
  80.   R.Assign(0, 0, 40, 9);
  81.   R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
  82.   MessageBox := MessageBoxRect(R, Msg, Params, AOptions);
  83. end;
  84.  
  85. function MessageBoxRect(var R: TRect; Msg: String; Params: Pointer;
  86.   AOptions: Word): Word;
  87. const
  88.   ButtonName: array[0..3] of string[6] =
  89.     ('~ä~á', '~ì~ÑΓ', 'Ä~è', 'ÄΓ¼Ñ¡á');
  90.   ButtonHelp: array[0..3] of Word =
  91.     ( hcYesButton,hcNoButton,hcOkButton,hcCancelButton );
  92.   Commands: array[0..3] of word =
  93.     (cmYes, cmNo, cmOK, cmCancel);
  94.   Titles: array[0..3] of string[14] =
  95.     ('ÅαÑñπ»αѪñÑ¡¿Ñ','ÄΦ¿í¬á','ê¡Σ«α¼áµ¿∩','Å«ñΓóÑαªñÑ¡¿Ñ');
  96. var
  97.   I, X, ButtonCount: Integer;
  98.   Dialog: PDialog;
  99.   Control: PView;
  100.   T: TRect;
  101.   ButtonList: array[0..4] of PView;
  102.   S: String;
  103. begin
  104.   Dialog := New(PDialog,
  105.     Init(R, Titles[AOptions and $3]));
  106.   with Dialog^ do
  107.   begin
  108.     R.Assign(3, 2, Size.X - 2, Size.Y - 3);
  109.     FormatStr(S, Msg, Params^);
  110.     Control := New(PStaticText, Init(R, S));
  111.     Insert(Control);
  112.     X := -2;
  113.     ButtonCount := 0;
  114.     for I := 0 to 3 do
  115.       if AOptions and ($0100 shl I) <> 0 then
  116.       begin
  117.         R.Assign(0, 0, 10, 2);
  118.         Control := New(PButton, Init(R, ButtonName[I], Commands[i],
  119.           bfNormal));
  120.         Control^.HelpCtx := ButtonHelp[I];
  121.         Inc(X, Control^.Size.X + 2);
  122.         ButtonList[ButtonCount] := Control;
  123.         Inc(ButtonCount);
  124.       end;
  125.     X := (Size.X - X) shr 1;
  126.     for I := 0 to ButtonCount - 1 do
  127.     begin
  128.       Control := ButtonList[I];
  129.       Insert(Control);
  130.       Control^.MoveTo(X, Size.Y - 3);
  131.       Inc(X, Control^.Size.X + 2);
  132.     end;
  133.     SelectNext(False);
  134.   end;
  135.   MessageBoxRect := DeskTop^.ExecView(Dialog);
  136.   Dispose(Dialog, Done);
  137. end;
  138.  
  139. function InputBox(Title: String; ALabel: String; var S: String;
  140.   Limit: Byte): Word;
  141. var
  142.   R: TRect;
  143. begin
  144.   R.Assign(0, 0, 60, 8);
  145.   R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
  146.   InputBox := InputBoxRect(R, Title, ALabel, S, Limit);
  147. end;
  148.  
  149. function InputBoxRect(var Bounds: TRect; Title: String; ALabel: String;
  150.   var S: String;  Limit: Byte): Word;
  151. var
  152.   Dialog: PDialog;
  153.   Control: PView;
  154.   R: TRect;
  155.   C: Word;
  156. begin
  157.   Dialog := New(PDialog, Init(Bounds, Title));
  158.   with Dialog^ do
  159.   begin
  160.     R.Assign(4 + CStrLen(ALabel), 2, Size.X - 1, 3);
  161.     Control := New(PInputLine, Init(R, Limit));
  162.     Insert(Control);
  163.     R.Assign(2, 2, 3 + CStrLen(ALabel), 3);
  164.     Insert(New(PLabel, Init(R, ALabel, Control)));
  165.     R.Assign(Size.X - 24, Size.Y - 4, Size.X - 14, Size.Y - 2);
  166.     Insert(New(PButton, Init(R, 'Ä~è', cmOk, bfDefault)));
  167.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  168.     Insert(New(PButton, Init(R, 'ÄΓ¼Ñ¡á', cmCancel, bfNormal)));
  169.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  170.     SelectNext(False);
  171.   end;
  172.   Dialog^.SetData(S);
  173.   C := DeskTop^.ExecView(Dialog);
  174.   if C <> cmCancel then Dialog^.GetData(S);
  175.   Dispose(Dialog, Done);
  176.   InputBoxRect := C;
  177. end;
  178.  
  179. end.
  180.