From efa71f50bbde3c538976637eb2ec1f72e5c7e552 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Mon, 23 Jun 2008 19:49:11 +0000 Subject: [PATCH] Implement automatic closing of data sorting + column selection dialogs when clicking elsewhere by catching the FormDeactivate event. (rfe #562 and rfe #579) --- source/childwin.pas | 7 ++----- source/column_selection.dfm | 3 +++ source/column_selection.pas | 34 +++++++++++++++++++++++++++++++--- source/data_sorting.dfm | 3 +++ source/data_sorting.pas | 30 ++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 8 deletions(-) diff --git a/source/childwin.pas b/source/childwin.pas index c9de2dd2..c10a1186 100644 --- a/source/childwin.pas +++ b/source/childwin.pas @@ -5281,11 +5281,8 @@ begin frm.Top := btn.ClientOrigin.Y + btn.Height; frm.Left := btn.ClientOrigin.X; - // Display form and refresh data if needed - if frm.ShowModal = mrOK then - ViewData(self); - - btn.Down := False; + // Display form + frm.Show; end; end; diff --git a/source/column_selection.dfm b/source/column_selection.dfm index 7e333503..84e0f291 100644 --- a/source/column_selection.dfm +++ b/source/column_selection.dfm @@ -12,6 +12,8 @@ object ColumnSelectionForm: TColumnSelectionForm Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False + OnClose = FormClose + OnDeactivate = FormDeactivate OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 @@ -32,6 +34,7 @@ object ColumnSelectionForm: TColumnSelectionForm Caption = 'Cancel' ModalResult = 2 TabOrder = 3 + OnClick = btnCancelClick end object btnOK: TButton Left = 4 diff --git a/source/column_selection.pas b/source/column_selection.pas index c3241c4b..14c1261b 100644 --- a/source/column_selection.pas +++ b/source/column_selection.pas @@ -14,11 +14,14 @@ type chkSelectAll: TCheckBox; chklistColumns: TCheckListBox; chkSort: TCheckBox; + procedure btnCancelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure chklistColumnsClickCheck(Sender: TObject); procedure chkSelectAllClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure chkSortClick(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormDeactivate(Sender: TObject); private { Private declarations } public @@ -122,10 +125,9 @@ begin // Signalizes childwin to refresh grid-data if reg_oldvalue <> reg_newvalue then - ModalResult := mrOk - else - ModalResult := mrCancel; + Mainform.Childwin.viewdata(Sender); + btnCancel.OnClick(Sender); end; @@ -208,4 +210,30 @@ begin end; +procedure TColumnSelectionForm.btnCancelClick(Sender: TObject); +begin + Mainform.Childwin.btnColumnSelection.Down := False; + Close; +end; + + +{** + Cancel this dialog if the user clicks elsewhere on childwin +} +procedure TColumnSelectionForm.FormDeactivate(Sender: TObject); +begin + btnCancel.OnClick(Sender); +end; + + +{** + Be sure the form is destroyed after closing. +} +procedure TColumnSelectionForm.FormClose(Sender: TObject; var Action: + TCloseAction); +begin + Action := caFree; +end; + + end. diff --git a/source/data_sorting.dfm b/source/data_sorting.dfm index 51a985b0..adb246d4 100644 --- a/source/data_sorting.dfm +++ b/source/data_sorting.dfm @@ -12,6 +12,8 @@ object DataSortingForm: TDataSortingForm Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False + OnClose = FormClose + OnDeactivate = FormDeactivate OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 @@ -49,6 +51,7 @@ object DataSortingForm: TDataSortingForm Caption = 'Cancel' ModalResult = 2 TabOrder = 1 + OnClick = btnCancelClick end object btnAddCol: TButton Left = 134 diff --git a/source/data_sorting.pas b/source/data_sorting.pas index 933ce326..e5ce4517 100644 --- a/source/data_sorting.pas +++ b/source/data_sorting.pas @@ -14,7 +14,10 @@ type btnCancel: TButton; btnAddCol: TButton; procedure btnAddColClick(Sender: TObject); + procedure btnCancelClick(Sender: TObject); procedure btnOKClick(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormDeactivate(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } @@ -302,6 +305,33 @@ begin reg.WriteString( reg_name, Mainform.Childwin.ComposeOrderClause(OrderColumns) ); reg.CloseKey; FreeAndNil(reg); + Mainform.Childwin.viewdata(Sender); + btnCancel.OnClick(Sender); +end; + + +procedure TDataSortingForm.btnCancelClick(Sender: TObject); +begin + Mainform.Childwin.btnDataSorting.Down := False; + Close; +end; + + +{** + Be sure the form is destroyed after closing. +} +procedure TDataSortingForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + + +{** + Cancel this dialog if the user clicks elsewhere on childwin +} +procedure TDataSortingForm.FormDeactivate(Sender: TObject); +begin + btnCancel.OnClick(Sender); end;