Implement automatic closing of data sorting + column selection dialogs when clicking elsewhere by catching the FormDeactivate event. (rfe #562 and rfe #579)

This commit is contained in:
Ansgar Becker
2008-06-23 19:49:11 +00:00
parent 2d59e35e38
commit efa71f50bb
5 changed files with 69 additions and 8 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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;