Mega Code Archive

 
Categories / Delphi / Examples
 

MessageBox Wrapper

Title: MessageBox Wrapper Question: TgtMessageBox is a wrapper around the Windows MessageBox function with many features and extended properties regarding the parameters of the function Answer: {*******************************************************} { } { GT Delphi Components } { TgtMessageBox } { } { Copyright (c) GT Delphi Components } { http://www.gtdelphicomponents.gr } { } { } {*******************************************************} unit o_Dialogs; interface uses Classes ,Messages ; type {------------------------------------------------------------------------------} //The Type of the dialog TgtMessageBoxType = ( mbtOk ,mbtYesNo ,mbtOkCancel ,mbtAbortRetryIgnore ,mbtYesNoCancel ,mbtRetryCancel ); {------------------------------------------------------------------------------} { The modality level of the dialog mmlApplication,mmlTask = Modality level is confined with in the application mmlSystem = Modality level is System wide meaning that the dialog will stay on top of all other open windows. } TgtMessageModalityLevel = ( mmlApplication ,mmlSystem ,mmlTask ); {------------------------------------------------------------------------------} //The icon of the dialog TgtMessageBoxIcon = ( mbiNone ,mbiInformation ,mbiQuestion ,mbiWarning ,mbiError ); {------------------------------------------------------------------------------} //Which button will have focus when the dialog is created TgtMessageDefButton = ( mdbButton1 ,mdbButton2 ,mdbButton3 ,mdbButton4 ); {------------------------------------------------------------------------------} //The result of the dialog TgtMessageExecResult = ( merNone ,merOk ,merCancel ,merAbort ,merRetry ,merIgnore ,merYes ,merNo ,merClose ,merTryAgain ,merContinue ); {------------------------------------------------------------------------------} //This event will run after the execution of the dialog parsing the result TgtAfterExecuteEvent = procedure (Sender : TObject ; ExecutionResult : TgtMessageExecResult) of Object; {------------------------------------------------------------------------------} TgtMessageBox = class(TComponent) private FMessageBoxIcon : TgtMessageBoxIcon; FMessageCaption : string; FMessageText : string; FAfterExecute : TgtAfterExecuteEvent; FMessageDefButton : TgtMessageDefButton; FMessageBoxType : TgtMessageBoxType; FMessageModalityLevel: TgtMessageModalityLevel; FOnHelpButtonClick: TNotifyEvent; FShowHelpButton: Boolean; FExecResult: TgtMessageExecResult; {Private Declarations} protected {Protected Declarations} FHandle : LongWord; procedure WndProc(var Message: TMessage); public {Public Declarations} constructor Create(AOwner : TComponent);override; destructor Destroy;override; public procedure Execute; published {Published Declarations} property MessageBoxType : TgtMessageBoxType read FMessageBoxType write FMessageBoxType; property MessageModalityLevel : TgtMessageModalityLevel read FMessageModalityLevel write FMessageModalityLevel; property MessageBoxIcon : TgtMessageBoxIcon read FMessageBoxIcon write FMessageBoxIcon default mbiNone; property MessageDefButton : TgtMessageDefButton read FMessageDefButton write FMessageDefButton default mdbButton1; property MessageText : string read FMessageText write FMessageText; property MessageCaption : string read FMessageCaption write FMessageCaption; property ShowHelpButton : Boolean read FShowHelpButton write FShowHelpButton; property ExecResult : TgtMessageExecResult read FExecResult; published property AfterExecute : TgtAfterExecuteEvent read FAfterExecute write FAfterExecute; property OnHelpButtonClick : TNotifyEvent read FOnHelpButtonClick write FOnHelpButtonClick; end; {------------------------------------------------------------------------------} implementation uses Windows ,SysUtils ; { TgtMessageBox } {------------------------------------------------------------------------------} constructor TgtMessageBox.Create(AOwner: TComponent); begin inherited Create(AOwner); end; {------------------------------------------------------------------------------} destructor TgtMessageBox.Destroy; begin inherited; end; {------------------------------------------------------------------------------} procedure TgtMessageBox.WndProc(var Message: TMessage); begin case Message.Msg of WM_HELP : begin //Capturing the Help Button Click if Assigned(FOnHelpButtonClick) then FOnHelpButtonClick(Self); end; end; end; {------------------------------------------------------------------------------} procedure TgtMessageBox.Execute; var ExecResult : TgtMessageExecResult; MsgIcon : DWORD; MsgDefBtn : DWORD; MsgType : DWORD; MsgModLevel: DWORD; begin MsgIcon :=0; MsgDefBtn :=0; MsgType :=0; MsgModLevel :=0; case MessageBoxIcon of mbiNone :; mbiInformation : MsgIcon := Windows.MB_ICONINFORMATION; mbiQuestion : MsgIcon := Windows.MB_ICONQUESTION; mbiWarning : MsgIcon := Windows.MB_ICONWARNING; mbiError : MsgIcon := Windows.MB_ICONERROR; end; case MessageDefButton of mdbButton1 : MsgDefBtn := Windows.MB_DEFBUTTON1; mdbButton2 : MsgDefBtn := Windows.MB_DEFBUTTON2; mdbButton3 : MsgDefBtn := Windows.MB_DEFBUTTON3; mdbButton4 : MsgDefBtn := Windows.MB_DEFBUTTON4; end; case MessageBoxType of mbtOk : MsgType := Windows.MB_OK; mbtYesNo : MsgType := Windows.MB_YESNO; mbtOkCancel : MsgType := Windows.MB_OKCANCEL; mbtAbortRetryIgnore : MsgType := Windows.MB_ABORTRETRYIGNORE; mbtYesNoCancel : MsgType := Windows.MB_YESNOCANCEL; mbtRetryCancel : MsgType := Windows.MB_RETRYCANCEL; end; case MessageModalityLevel of mmlApplication : MsgModLevel := Windows.MB_APPLMODAL; mmlSystem : MsgModLevel := Windows.MB_SYSTEMMODAL; mmlTask : MsgModLevel := Windows.MB_TASKMODAL; end; if ShowHelpButton then try FHandle := Classes.AllocateHWnd(WndProc); ExecResult := TgtMessageExecResult(MessageBox(FHandle,PChar(MessageText),PChar(MessageCaption) ,MsgIcon+MsgDefBtn+MsgType+MsgModLevel+MB_HELP)) finally Classes.DeallocateHWnd(FHandle); end else ExecResult := TgtMessageExecResult(MessageBox(HWND(nil),PChar(MessageText),PChar(MessageCaption) ,MsgIcon+MsgDefBtn+MsgType+MsgModLevel)); if Assigned(FAfterExecute) then FAfterExecute(Self,ExecResult); end; {------------------------------------------------------------------------------} end.