From cb1024b048738fc994874a219492dcad06377d67 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Tue, 22 Jun 2021 20:37:34 +0200 Subject: [PATCH] Fix more potential theme related EAccessViolation's, due to Action:=caFree in OnClose event of modal forms. Their caller now frees these modal forms. In non-modal forms, keep caFree in OnClose but remove existing OnDestroy events, moving code to OnClose instead. https://www.heidisql.com/forum.php?t=38043 https://stackoverflow.com/questions/2075405/how-to-close-non-modal-form-in-delphi --- source/column_selection.dfm | 1 - source/column_selection.pas | 12 +++--------- source/connections.dfm | 1 - source/connections.pas | 21 +++++++-------------- source/copytable.dfm | 1 - source/copytable.pas | 13 +++---------- source/csv_detector.dfm | 1 - source/csv_detector.pas | 7 ------- source/insertfiles.dfm | 1 - source/insertfiles.pas | 7 ------- source/loaddata.dfm | 1 - source/loaddata.pas | 36 +++++++++++++++--------------------- source/main.pas | 14 +++++++++++--- source/sqlhelp.dfm | 1 - source/sqlhelp.pas | 20 +++++++------------- source/syncdb.dfm | 1 - source/syncdb.pas | 7 ------- source/tabletools.dfm | 3 --- source/tabletools.pas | 15 ++++----------- source/updatecheck.dfm | 1 - source/updatecheck.pas | 8 +------- source/usermanager.dfm | 1 - source/usermanager.pas | 17 +++++------------ 23 files changed, 56 insertions(+), 134 deletions(-) diff --git a/source/column_selection.dfm b/source/column_selection.dfm index 64b8bcbf..26e6d49f 100644 --- a/source/column_selection.dfm +++ b/source/column_selection.dfm @@ -16,7 +16,6 @@ object frmColumnSelection: TfrmColumnSelection OldCreateOrder = False OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy OnDeactivate = FormDeactivate OnShow = FormShow DesignSize = ( diff --git a/source/column_selection.pas b/source/column_selection.pas index 63ab7a93..ce02c39e 100644 --- a/source/column_selection.pas +++ b/source/column_selection.pas @@ -23,7 +23,6 @@ type procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDeactivate(Sender: TObject); procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); procedure editFilterLeftButtonClick(Sender: TObject); private { Private declarations } @@ -52,14 +51,6 @@ begin end; -procedure TfrmColumnSelection.FormDestroy(Sender: TObject); -begin - AppSettings.WriteInt(asColumnSelectorWidth, Width); - AppSettings.WriteInt(asColumnSelectorHeight, Height); - FCheckedColumns.Free; -end; - - {** FormShow } @@ -234,7 +225,10 @@ end; procedure TfrmColumnSelection.FormClose(Sender: TObject; var Action: TCloseAction); begin + AppSettings.WriteInt(asColumnSelectorWidth, Width); + AppSettings.WriteInt(asColumnSelectorHeight, Height); Action := caFree; + FCheckedColumns.Free; end; diff --git a/source/connections.dfm b/source/connections.dfm index 0d6b4408..86e6cc26 100644 --- a/source/connections.dfm +++ b/source/connections.dfm @@ -18,7 +18,6 @@ object connform: Tconnform OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate - OnDestroy = FormDestroy OnResize = FormResize OnShow = FormShow DesignSize = ( diff --git a/source/connections.pas b/source/connections.pas index 4af75a11..166216bb 100644 --- a/source/connections.pas +++ b/source/connections.pas @@ -156,7 +156,6 @@ type NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); - procedure FormDestroy(Sender: TObject); procedure TimerStatisticsTimer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ListSessionsCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; @@ -340,18 +339,6 @@ begin end; -procedure Tconnform.FormDestroy(Sender: TObject); -begin - // Save GUI stuff - AppSettings.WriteInt(asSessionManagerListWidth, pnlLeft.Width); - AppSettings.WriteInt(asSessionManagerWindowWidth, Width); - AppSettings.WriteInt(asSessionManagerWindowHeight, Height); - AppSettings.WriteInt(asSessionManagerWindowLeft, Left); - AppSettings.WriteInt(asSessionManagerWindowTop, Top); - MainForm.SaveListSetup(ListSessions); -end; - - procedure Tconnform.FormResize(Sender: TObject); begin splitterMainMoved(splitterMain); @@ -368,7 +355,13 @@ procedure Tconnform.FormClose(Sender: TObject; var Action: TCloseAction); begin // Suspend calculating statistics as long as they're not visible TimerStatistics.Enabled := False; - Action := caFree; + // Save GUI stuff + AppSettings.WriteInt(asSessionManagerListWidth, pnlLeft.Width); + AppSettings.WriteInt(asSessionManagerWindowWidth, Width); + AppSettings.WriteInt(asSessionManagerWindowHeight, Height); + AppSettings.WriteInt(asSessionManagerWindowLeft, Left); + AppSettings.WriteInt(asSessionManagerWindowTop, Top); + MainForm.SaveListSetup(ListSessions); end; diff --git a/source/copytable.dfm b/source/copytable.dfm index 35df58a0..21470825 100644 --- a/source/copytable.dfm +++ b/source/copytable.dfm @@ -16,7 +16,6 @@ object CopyTableForm: TCopyTableForm Position = poMainFormCenter OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy OnResize = FormResize OnShow = FormShow DesignSize = ( diff --git a/source/copytable.pas b/source/copytable.pas index aec2e1d8..c1be80f4 100644 --- a/source/copytable.pas +++ b/source/copytable.pas @@ -32,7 +32,6 @@ type Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex); procedure TreeElementsInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal); - procedure FormDestroy(Sender: TObject); procedure TreeElementsChecked(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure btnRecentFiltersClick(Sender: TObject); @@ -75,14 +74,6 @@ begin end; -procedure TCopyTableForm.FormDestroy(Sender: TObject); -begin - // Save GUI stuff - AppSettings.WriteInt(asCopyTableWindowWidth, Width); - AppSettings.WriteInt(asCopyTableWindowHeight, Height); -end; - - procedure TCopyTableForm.FormResize(Sender: TObject); var HalfWidth: Integer; @@ -193,7 +184,9 @@ begin AppSettings.WriteString(asCopyTableRecentFilter, NewValues[i], IntToStr(i)); end; end; - Action := caFree; + // Store GUI setup + AppSettings.WriteInt(asCopyTableWindowWidth, Width); + AppSettings.WriteInt(asCopyTableWindowHeight, Height); end; diff --git a/source/csv_detector.dfm b/source/csv_detector.dfm index de685cea..5b1fda68 100644 --- a/source/csv_detector.dfm +++ b/source/csv_detector.dfm @@ -12,7 +12,6 @@ object frmCsvDetector: TfrmCsvDetector Font.Style = [] OldCreateOrder = False Position = poOwnerFormCenter - OnClose = FormClose OnCreate = FormCreate OnShow = FormShow DesignSize = ( diff --git a/source/csv_detector.pas b/source/csv_detector.pas index c3490096..0d47ce3f 100644 --- a/source/csv_detector.pas +++ b/source/csv_detector.pas @@ -15,7 +15,6 @@ type btnSave: TButton; TimerStartScan: TTimer; procedure FormShow(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure btnScanClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnSaveClick(Sender: TObject); @@ -53,12 +52,6 @@ begin TimerStartScan.Enabled := True; end; -procedure TfrmCsvDetector.FormClose(Sender: TObject; var Action: TCloseAction); -begin - Action := caFree; -end; - - procedure TfrmCsvDetector.btnScanClick(Sender: TObject); var Stream: TFileStream; diff --git a/source/insertfiles.dfm b/source/insertfiles.dfm index cf8cfe85..7441e3e1 100644 --- a/source/insertfiles.dfm +++ b/source/insertfiles.dfm @@ -15,7 +15,6 @@ object frmInsertFiles: TfrmInsertFiles Font.Style = [] OldCreateOrder = False Position = poOwnerFormCenter - OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy OnShow = FormShow diff --git a/source/insertfiles.pas b/source/insertfiles.pas index d4a028e9..2e27cda8 100644 --- a/source/insertfiles.pas +++ b/source/insertfiles.pas @@ -52,7 +52,6 @@ type procedure FormCreate(Sender: TObject); procedure btnInsertClick(Sender: TObject); procedure AddFile(Filename: String); - procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ListFilesGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); procedure ListFilesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); @@ -151,12 +150,6 @@ begin end; -procedure TfrmInsertFiles.FormClose(Sender: TObject; var Action: TCloseAction); -begin - Action := caFree; -end; - - procedure TfrmInsertFiles.ListColumnsFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var ColInfo: PColInfo; diff --git a/source/loaddata.dfm b/source/loaddata.dfm index c2af9012..20666ef4 100644 --- a/source/loaddata.dfm +++ b/source/loaddata.dfm @@ -16,7 +16,6 @@ object loaddataform: Tloaddataform Position = poMainFormCenter OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy OnResize = FormResize OnShow = FormShow DesignSize = ( diff --git a/source/loaddata.pas b/source/loaddata.pas index deedcca2..02256cd6 100644 --- a/source/loaddata.pas +++ b/source/loaddata.pas @@ -55,7 +55,6 @@ type btnCheckAll: TToolButton; const ProgressBarSteps=100; procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); procedure editFilenameChange(Sender: TObject); procedure FormShow(Sender: TObject); procedure comboDatabaseChange(Sender: TObject); @@ -114,25 +113,6 @@ begin end; -procedure Tloaddataform.FormDestroy(Sender: TObject); -begin - // Save settings - AppSettings.WriteInt(asCSVImportWindowWidth, Width); - AppSettings.WriteInt(asCSVImportWindowHeight, Height); - AppSettings.WriteString(asCSVImportFilename, editFilename.Text); - AppSettings.WriteString(asCSVImportSeparator, editFieldTerminator.Text); - AppSettings.WriteString(asCSVImportEncloser, editFieldEncloser.Text); - AppSettings.WriteString(asCSVImportTerminator, editLineTerminator.Text); - AppSettings.WriteBool(asCSVImportFieldsEnclosedOptionally, chkFieldsEnclosedOptionally.Checked); - AppSettings.WriteString(asCSVImportFieldEscaper, editFieldEscaper.Text); - AppSettings.WriteInt(asCSVImportIgnoreLines, updownIgnoreLines.Position); - AppSettings.WriteBool(asCSVImportLowPriority, chkLowPriority.Checked); - AppSettings.WriteBool(asCSVImportLocalNumbers, chkLocalNumbers.Checked); - AppSettings.WriteInt(asCSVImportDuplicateHandling, grpDuplicates.ItemIndex); - AppSettings.WriteInt(asCSVImportParseMethod, grpParseMethod.ItemIndex); -end; - - procedure Tloaddataform.FormResize(Sender: TObject); var HalfWidth, RightBoxX: Integer; @@ -179,7 +159,20 @@ end; procedure Tloaddataform.FormClose(Sender: TObject; var Action: TCloseAction); begin - Action := caFree; + // Save settings + AppSettings.WriteInt(asCSVImportWindowWidth, Width); + AppSettings.WriteInt(asCSVImportWindowHeight, Height); + AppSettings.WriteString(asCSVImportFilename, editFilename.Text); + AppSettings.WriteString(asCSVImportSeparator, editFieldTerminator.Text); + AppSettings.WriteString(asCSVImportEncloser, editFieldEncloser.Text); + AppSettings.WriteString(asCSVImportTerminator, editLineTerminator.Text); + AppSettings.WriteBool(asCSVImportFieldsEnclosedOptionally, chkFieldsEnclosedOptionally.Checked); + AppSettings.WriteString(asCSVImportFieldEscaper, editFieldEscaper.Text); + AppSettings.WriteInt(asCSVImportIgnoreLines, updownIgnoreLines.Position); + AppSettings.WriteBool(asCSVImportLowPriority, chkLowPriority.Checked); + AppSettings.WriteBool(asCSVImportLocalNumbers, chkLocalNumbers.Checked); + AppSettings.WriteInt(asCSVImportDuplicateHandling, grpDuplicates.ItemIndex); + AppSettings.WriteInt(asCSVImportParseMethod, grpParseMethod.ItemIndex); end; @@ -274,6 +267,7 @@ begin comboTable.ItemIndex := 0; end; end; + frmCsvDetector.Free; frmCsvDetector := nil; // check for Assigned() must be false in SetupSynEditors end; diff --git a/source/main.pas b/source/main.pas index 6c21f99b..1457b3ac 100644 --- a/source/main.pas +++ b/source/main.pas @@ -2213,7 +2213,7 @@ begin on E:Exception do LogSQL(f_('Error when checking for updates: %s', [E.Message])); end; - frm.Free; + frm.Free; // FormClose has no caFree, as it may not have been called end; end; @@ -2554,6 +2554,7 @@ var begin Dialog := TConnForm.Create(Self); Dialog.ShowModal; + Dialog.Free; end; @@ -2575,6 +2576,7 @@ begin if FConnections.Count = 0 then begin Dialog := TConnForm.Create(Self); DlgResult := Dialog.ShowModal; + Dialog.Free; if DlgResult = mrCancel then actExitApplication.Execute; end; @@ -2673,6 +2675,7 @@ begin // Import Textfile Dialog := Tloaddataform.Create(Self); Dialog.ShowModal; + Dialog.Free; end; procedure TMainForm.actPreferencesExecute(Sender: TObject); @@ -2804,6 +2807,7 @@ var begin Dialog := TUserManagerForm.Create(Self); Dialog.ShowModal; + Dialog.Free; end; procedure TMainForm.actAboutBoxExecute(Sender: TObject); @@ -2949,6 +2953,7 @@ begin // copy table Dialog := TCopyTableForm.Create(Self); Dialog.ShowModal; + Dialog.Free; end; @@ -3734,6 +3739,7 @@ var begin Dialog := TfrmInsertFiles.Create(Self); Dialog.ShowModal; + Dialog.Free; end; // Drop Table(s) @@ -4413,7 +4419,7 @@ var begin frm := TfrmUpdateCheck.Create(Self); frm.ShowModal; - FreeAndNil(frm); + frm.Free; // FormClose has no caFree, as it may not have been called end; @@ -4741,6 +4747,7 @@ var begin SyncForm := TfrmSyncDB.Create(Self); SyncForm.ShowModal; + SyncForm.Free; end; @@ -4763,7 +4770,8 @@ end; procedure TMainform.CallSQLHelpWithKeyword( keyword: String ); begin if FActiveDbObj.Connection.ServerVersionInt >= 40100 then begin - SqlHelpDialog := TfrmSQLhelp.Create(Self); + if not Assigned(SqlHelpDialog) then + SqlHelpDialog := TfrmSQLhelp.Create(Self); SqlHelpDialog.Show; SqlHelpDialog.Keyword := keyword; end else diff --git a/source/sqlhelp.dfm b/source/sqlhelp.dfm index 338d546a..fdec1be1 100644 --- a/source/sqlhelp.dfm +++ b/source/sqlhelp.dfm @@ -14,7 +14,6 @@ object frmSQLhelp: TfrmSQLhelp OldCreateOrder = False OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 diff --git a/source/sqlhelp.pas b/source/sqlhelp.pas index 169de06d..04a6c0c9 100644 --- a/source/sqlhelp.pas +++ b/source/sqlhelp.pas @@ -29,7 +29,6 @@ type MemoExample: TSynMemo; timerSearch: TTimer; procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); procedure memosKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ButtonOnlinehelpClick(Sender: TObject); @@ -108,7 +107,14 @@ end; procedure TfrmSQLhelp.FormClose(Sender: TObject; var Action: TCloseAction); begin + AppSettings.WriteInt(asSQLHelpWindowLeft, Left ); + AppSettings.WriteInt(asSQLHelpWindowTop, Top ); + AppSettings.WriteInt(asSQLHelpWindowWidth, Width); + AppSettings.WriteInt(asSQLHelpWindowHeight, Height); + AppSettings.WriteInt(asSQLHelpPnlLeftWidth, pnlLeft.Width); + AppSettings.WriteInt(asSQLHelpPnlRightTopHeight, memoDescription.Height); Action := caFree; + SqlHelpDialog := nil; end; @@ -264,18 +270,6 @@ begin end; -procedure TfrmSQLhelp.FormDestroy(Sender: TObject); -begin - AppSettings.WriteInt(asSQLHelpWindowLeft, Left ); - AppSettings.WriteInt(asSQLHelpWindowTop, Top ); - AppSettings.WriteInt(asSQLHelpWindowWidth, Width); - AppSettings.WriteInt(asSQLHelpWindowHeight, Height); - AppSettings.WriteInt(asSQLHelpPnlLeftWidth, pnlLeft.Width); - AppSettings.WriteInt(asSQLHelpPnlRightTopHeight, memoDescription.Height); - SqlHelpDialog := nil; -end; - - procedure TfrmSQLhelp.FormShow(Sender: TObject); begin // Apply themed colors in OnShow, not OnCreate, as a check with <> nil returns false otherwise diff --git a/source/syncdb.dfm b/source/syncdb.dfm index 2aec32f8..18acabac 100644 --- a/source/syncdb.dfm +++ b/source/syncdb.dfm @@ -14,7 +14,6 @@ object frmSyncDB: TfrmSyncDB Font.Style = [] OldCreateOrder = False Position = poMainFormCenter - OnClose = FormClose OnCreate = FormCreate DesignSize = ( 534 diff --git a/source/syncdb.pas b/source/syncdb.pas index ddcf4bd6..7951f061 100644 --- a/source/syncdb.pas +++ b/source/syncdb.pas @@ -27,7 +27,6 @@ type treeDifferences: TVirtualStringTree; lblDifferences: TLabel; procedure FormCreate(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure treeSourceChange(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure treeSourceChecked(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure treeSourceChecking(Sender: TBaseVirtualTree; Node: PVirtualNode; var NewState: TCheckState; var Allowed: Boolean); @@ -95,12 +94,6 @@ end; { TfrmSyncDB } -procedure TfrmSyncDB.FormClose(Sender: TObject; var Action: TCloseAction); -begin - Action := caFree; -end; - - procedure TfrmSyncDB.FormCreate(Sender: TObject); var SessNode: PVirtualNode; diff --git a/source/tabletools.dfm b/source/tabletools.dfm index 2b9e3242..c0ec2619 100644 --- a/source/tabletools.dfm +++ b/source/tabletools.dfm @@ -15,7 +15,6 @@ object frmTableTools: TfrmTableTools Position = poMainFormCenter OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy OnShow = FormShow DesignSize = ( 764 @@ -334,8 +333,6 @@ object frmTableTools: TfrmTableTools ScrollBars = ssVertical TabOrder = 0 OnChange = ValidateControls - ExplicitLeft = -8 - ExplicitTop = -20 end end object tabSQL: TTabSheet diff --git a/source/tabletools.pas b/source/tabletools.pas index 02270b55..a847b60c 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -88,7 +88,6 @@ type tabSQL: TTabSheet; memoFindText: TMemo; SynMemoFindText: TSynMemo; - procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure btnHelpMaintenanceClick(Sender: TObject); @@ -309,15 +308,6 @@ begin end; -procedure TfrmTableTools.FormDestroy(Sender: TObject); -begin - // Save GUI setup - AppSettings.WriteInt(asTableToolsWindowWidth, Width); - AppSettings.WriteInt(asTableToolsWindowHeight, Height); - AppSettings.WriteInt(asTableToolsTreeWidth, TreeObjects.Width); -end; - - procedure TfrmTableTools.FormShow(Sender: TObject); var Node, FirstChecked: PVirtualNode; @@ -392,7 +382,10 @@ begin // Auto close temorary connection if Assigned(FTargetConnection) then FreeAndNil(FTargetConnection); - Action := caFree; + // Save GUI setup + AppSettings.WriteInt(asTableToolsWindowWidth, Width); + AppSettings.WriteInt(asTableToolsWindowHeight, Height); + AppSettings.WriteInt(asTableToolsTreeWidth, TreeObjects.Width); end; diff --git a/source/updatecheck.dfm b/source/updatecheck.dfm index 8bea4137..754abdfa 100644 --- a/source/updatecheck.dfm +++ b/source/updatecheck.dfm @@ -16,7 +16,6 @@ object frmUpdateCheck: TfrmUpdateCheck Position = poOwnerFormCenter OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy OnShow = FormShow DesignSize = ( 374 diff --git a/source/updatecheck.pas b/source/updatecheck.pas index f4c244dc..8d43f3d1 100644 --- a/source/updatecheck.pas +++ b/source/updatecheck.pas @@ -27,7 +27,6 @@ type LinkType: TSysLinkType); procedure FormShow(Sender: TObject); procedure btnChangelogClick(Sender: TObject); - procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure CopydownloadURL1Click(Sender: TObject); const @@ -70,17 +69,12 @@ begin Height := AppSettings.ReadInt(asUpdateCheckWindowHeight); end; -procedure TfrmUpdateCheck.FormDestroy(Sender: TObject); +procedure TfrmUpdateCheck.FormClose(Sender: TObject; var Action: TCloseAction); begin AppSettings.WriteInt(asUpdateCheckWindowWidth, Width); AppSettings.WriteInt(asUpdateCheckWindowHeight, Height); end; -procedure TfrmUpdateCheck.FormClose(Sender: TObject; var Action: TCloseAction); -begin - Action := caFree; -end; - {** Update status text } diff --git a/source/usermanager.dfm b/source/usermanager.dfm index 92fc2f99..b3d0b5ef 100644 --- a/source/usermanager.dfm +++ b/source/usermanager.dfm @@ -18,7 +18,6 @@ object UserManagerForm: TUserManagerForm OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate - OnDestroy = FormDestroy OnResize = FormResize OnShow = FormShow DesignSize = ( diff --git a/source/usermanager.pas b/source/usermanager.pas index 78d4afbf..22028a99 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -108,7 +108,6 @@ type comboSSL: TComboBox; lblSSL: TLabel; procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure btnAddUserClick(Sender: TObject); procedure btnDeleteUserClick(Sender: TObject); @@ -224,16 +223,6 @@ begin end; -procedure TUserManagerForm.FormDestroy(Sender: TObject); -begin - // FormDestroy: Save GUI setup - AppSettings.WriteInt(asUsermanagerWindowWidth, Width); - AppSettings.WriteInt(asUsermanagerWindowHeight, Height); - AppSettings.WriteInt(asUsermanagerListWidth, pnlLeft.Width); - Mainform.SaveListSetup(listUsers); -end; - - procedure TUserManagerForm.FormResize(Sender: TObject); begin // Manually right align "Add object" button @@ -413,7 +402,11 @@ begin FreeAndNil(FPrivsTable); FreeAndNil(FPrivsRoutine); FreeAndNil(FPrivsColumn); - Action := caFree; + // Save GUI setup + AppSettings.WriteInt(asUsermanagerWindowWidth, Width); + AppSettings.WriteInt(asUsermanagerWindowHeight, Height); + AppSettings.WriteInt(asUsermanagerListWidth, pnlLeft.Width); + Mainform.SaveListSetup(listUsers); end;