//////////////////////////////////////////////////////////////////////////////// // All code below is exclusively owned by author of Chess4Net - Pavel Perminov // (packpaul@mail.ru, packpaul1@gmail.com). // Any changes, modifications, borrowing and adaptation are a subject for // explicit permition from the owner. unit DialogUnit; interface uses Forms, Dialogs, Controls, Classes, Windows, ModalForm; type TDialogForm = class(TModalForm) procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ButtonClick(Sender: TObject); private m_ModID: TModalFormID; m_MsgDlg: TForm; function GetCaption: TCaption; procedure SetCaption(capt: TCaption); protected function GetHandle: hWnd; override; function GetEnabled_: boolean; override; procedure SetEnabled_(flag: boolean); override; function GetLeft_: integer; override; procedure SetLeft_(x: integer); override; function GetTop_: integer; override; procedure SetTop_(y: integer); override; function GetModalID: TModalFormID; override; function RGetModalResult: TModalResult; override; procedure RSetModalResult(Value: TModalResult); override; property MsgDlg: TForm read m_MsgDlg; public constructor Create(frmOwner: TForm; const wstrMsg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; modID: TModalFormID = mfNone; msgDlgHandler: TModalFormHandler = nil; bStayOnTopIfNoOwner: boolean = FALSE); overload; constructor Create(dlgOwner: TDialogs; const wstrMsg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; modID: TModalFormID; msgDlgHandler: TModalFormHandler; bStayOnTopIfNoOwner: boolean = FALSE); overload; destructor Destroy; override; procedure Show; override; procedure Close; override; function ShowModal: integer; reintroduce; procedure SetFocus; override; property Caption: TCaption read GetCaption write SetCaption; end; implementation uses StdCtrls, SysUtils, MessageDialogUnit; constructor TDialogForm.Create(frmOwner: TForm; const wstrMsg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; modID: TModalFormID = mfNone; msgDlgHandler: TModalFormHandler = nil; bStayOnTopIfNoOwner: boolean = FALSE); var i: integer; begin inherited CreateNew(frmOwner); m_ModID := modID; RHandler := msgDlgHandler; m_MsgDlg := MessageDialogUnit.CreateMessageDialog(frmOwner, wstrMsg, DlgType, Buttons, bStayOnTopIfNoOwner); // msgDlg.FormStyle := frmOwner.FormStyle; m_MsgDlg.OnShow := FormShow; m_MsgDlg.OnClose := FormClose; for i := 0 to (m_MsgDlg.ComponentCount - 1) do begin if (m_MsgDlg.Components[i] is TButton) then TButton(m_MsgDlg.Components[i]).OnClick := ButtonClick; end; end; constructor TDialogForm.Create(dlgOwner: TDialogs; const wstrMsg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; modID: TModalFormID; msgDlgHandler: TModalFormHandler; bStayOnTopIfNoOwner: boolean = FALSE); begin self.dlgOwner := dlgOwner; Create((dlgOwner.Owner as TForm), wstrMsg, DlgType, Buttons, modID, msgDlgHandler, bStayOnTopIfNoOwner); end; procedure TDialogForm.FormShow(Sender: TObject); begin inherited FormShow(m_MsgDlg); end; procedure TDialogForm.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(dlgOwner) then dlgOwner.UnsetShowing(self); if (fsModal in m_MsgDlg.FormState) then exit; if (Assigned(RHandler)) then RHandler(self, GetModalID); // Action := caFree; Release; end; procedure TDialogForm.Show; begin m_MsgDlg.Show; end; procedure TDialogForm.Close; begin m_MsgDlg.Close; end; function TDialogForm.ShowModal: integer; begin Result := m_MsgDlg.ShowModal; end; procedure TDialogForm.ButtonClick(Sender: TObject); begin if not (fsModal in m_MsgDlg.FormState) then m_MsgDlg.Close; end; destructor TDialogForm.Destroy; begin m_MsgDlg.Release; inherited; end; function TDialogForm.GetCaption: TCaption; begin Result := m_MsgDlg.Caption; end; procedure TDialogForm.SetCaption(capt: TCaption); begin m_MsgDlg.Caption := capt; end; function TDialogForm.GetHandle: hWnd; begin Result := m_MsgDlg.Handle; end; function TDialogForm.GetEnabled_: boolean; begin Result := m_MsgDlg.Enabled; end; procedure TDialogForm.SetEnabled_(flag: boolean); begin m_MsgDlg.Enabled := flag; end; procedure TDialogForm.SetFocus; begin m_MsgDlg.SetFocus; m_MsgDlg.Show; end; function TDialogForm.GetLeft_: integer; begin Result := m_MsgDlg.Left; end; procedure TDialogForm.SetLeft_(x: integer); begin m_MsgDlg.Left := x; end; function TDialogForm.GetTop_: integer; begin Result := m_MsgDlg.Top; end; procedure TDialogForm.SetTop_(y: integer); begin m_MsgDlg.Top := y; end; function TDialogForm.GetModalID: TModalFormID; begin Result := m_ModID; end; function TDialogForm.RGetModalResult: TModalResult; begin Result := m_MsgDlg.ModalResult; end; procedure TDialogForm.RSetModalResult(Value: TModalResult); begin m_MsgDlg.ModalResult := Value; end; end.