home *** CD-ROM | disk | FTP | other *** search
-
- {*******************************************************}
- { }
- { Turbo Pascal Version 6.0 }
- { Turbo Vision Unit }
- { }
- { Copyright (c) 1990 Borland International }
- { }
- {*******************************************************}
-
- unit MsgBox;
-
- {$F+,O+,X+,D-}
-
- interface
-
- uses Objects;
-
- const
-
- { Message box classes }
-
- mfWarning = $0000; { Display a Warning box }
- mfError = $0001; { Dispaly a Error box }
- mfInformation = $0002; { Display an Information Box }
- mfConfirmation = $0003; { Display a Confirmation Box }
-
- { Message box button flags }
-
- mfYesButton = $0100; { Put a Yes button into the dialog }
- mfNoButton = $0200; { Put a No button into the dialog }
- mfOKButton = $0400; { Put an OK button into the dialog }
- mfCancelButton = $0800; { Put a Cancel button into the dialog }
-
- mfYesNoCancel = mfYesButton + mfNoButton + mfCancelButton;
- { Standard Yes, No, Cancel dialog }
- mfOKCancel = mfOKButton + mfCancelButton;
- { Standard OK, Cancel dialog }
-
- { MessageBox displays the given string in a standard sized }
- { dialog box. Before the dialog is displayed the Msg and Params }
- { are passed to FormatStr. The resulting string is displayed }
- { as a TStaticText view in the dialog. }
-
- function MessageBox(Msg: String; Params: Pointer; AOptions: Word): Word;
-
- { MessageBoxRec allows the specification of a TRect for the }
- { message box to occupy. }
-
- function MessageBoxRect(var R: TRect; Msg: String; Params: Pointer;
- AOptions: Word): Word;
-
- { InputBox displays a simple dialog that allows the user to }
- { type in a string. }
-
- function InputBox(Title: String; ALabel: String; var S: String;
- Limit: Byte): Word;
-
- { InputBoxRect is like InputBox but allows the specification of }
- { a rectangle. }
-
- function InputBoxRect(var Bounds: TRect; Title: String; ALabel: String;
- var S: String; Limit: Byte): Word;
-
- implementation
-
- uses Drivers, Views, Dialogs, App;
-
- function MessageBox(Msg: String; Params: Pointer;
- AOptions: Word): Word;
- var
- R: TRect;
- begin
- R.Assign(0, 0, 40, 9);
- R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
- MessageBox := MessageBoxRect(R, Msg, Params, AOptions);
- end;
-
- function MessageBoxRect(var R: TRect; Msg: String; Params: Pointer;
- AOptions: Word): Word;
- const
- ButtonName: array[0..3] of string[6] =
- ('~Y~es', '~N~o', 'O~K~', 'Cancel');
- Commands: array[0..3] of word =
- (cmYes, cmNo, cmOK, cmCancel);
- Titles: array[0..3] of string[11] =
- ('Warning','Error','Information','Confirm');
- var
- I, X, ButtonCount: Integer;
- Dialog: PDialog;
- Control: PView;
- T: TRect;
- ButtonList: array[0..4] of PView;
- S: String;
- begin
- Dialog := New(PDialog,
- Init(R, Titles[AOptions and $3]));
- with Dialog^ do
- begin
- R.Assign(3, 2, Size.X - 2, Size.Y - 3);
- FormatStr(S, Msg, Params^);
- Control := New(PStaticText, Init(R, S));
- Insert(Control);
- X := -2;
- ButtonCount := 0;
- for I := 0 to 3 do
- if AOptions and ($0100 shl I) <> 0 then
- begin
- R.Assign(0, 0, 10, 2);
- Control := New(PButton, Init(R, ButtonName[I], Commands[i],
- bfNormal));
- Inc(X, Control^.Size.X + 2);
- ButtonList[ButtonCount] := Control;
- Inc(ButtonCount);
- end;
- X := (Size.X - X) shr 1;
- for I := 0 to ButtonCount - 1 do
- begin
- Control := ButtonList[I];
- Insert(Control);
- Control^.MoveTo(X, Size.Y - 3);
- Inc(X, Control^.Size.X + 2);
- end;
- SelectNext(False);
- end;
- MessageBoxRect := DeskTop^.ExecView(Dialog);
- Dispose(Dialog, Done);
- end;
-
- function InputBox(Title: String; ALabel: String; var S: String;
- Limit: Byte): Word;
- var
- R: TRect;
- begin
- R.Assign(0, 0, 60, 8);
- R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
- InputBox := InputBoxRect(R, Title, ALabel, S, Limit);
- end;
-
- function InputBoxRect(var Bounds: TRect; Title: String; ALabel: String;
- var S: String; Limit: Byte): Word;
- var
- Dialog: PDialog;
- Control: PView;
- R: TRect;
- C: Word;
- begin
- Dialog := New(PDialog, Init(Bounds, Title));
- with Dialog^ do
- begin
- R.Assign(4 + CStrLen(ALabel), 2, Size.X - 3, 3);
- Control := New(PInputLine, Init(R, Limit));
- Insert(Control);
- R.Assign(2, 2, 3 + CStrLen(ALabel), 3);
- Insert(New(PLabel, Init(R, ALabel, Control)));
- R.Assign(Size.X - 24, Size.Y - 4, Size.X - 14, Size.Y - 2);
- Insert(New(PButton, Init(R, 'O~K~', cmOk, bfDefault)));
- Inc(R.A.X, 12); Inc(R.B.X, 12);
- Insert(New(PButton, Init(R, 'Cancel', cmCancel, bfNormal)));
- Inc(R.A.X, 12); Inc(R.B.X, 12);
- SelectNext(False);
- end;
- Dialog^.SetData(S);
- C := DeskTop^.ExecView(Dialog);
- if C <> cmCancel then Dialog^.GetData(S);
- Dispose(Dialog, Done);
- InputBoxRect := C;
- end;
-
- end.
-