diff --git a/components/heidisql/include/const.inc b/components/heidisql/include/const.inc index c0fa0330..def290f3 100644 --- a/components/heidisql/include/const.inc +++ b/components/heidisql/include/const.inc @@ -11,15 +11,14 @@ const PRIVTABLE_COLUMNS = 'columns_priv'; DBNAME_INFORMATION_SCHEMA = 'information_schema'; DBNAME_MYSQL = 'mysql'; - LOCAL_HOST = '127.0.0.1'; - MYSQL_PORT = 3306; // Related field things TEMPFIELDNAME = 'temp_fieldname'; // General things APPNAME = 'HeidiSQL'; - REGPATH = 'Software\' + APPNAME; + REGPATH = '\Software\' + APPNAME + '\'; + REGKEY_SESSIONS = 'Servers\'; STATUS_MSG_READY = 'Ready.'; STR_NOTSUPPORTED = 'Not supported by this server'; @@ -29,10 +28,126 @@ const // Used for simulating a TTreeNode which has subnodes DUMMY_NODE_TEXT : String = 'Dummy node, should never be visible'; - // Registry name for storing list of displayed columns + // Various names of registry variables + // User-changable variables have a default value + // Note: Color values are in HEX format: $00BBGGRR REGNAME_DISPLAYEDCOLUMNS = 'DisplayedColumns'; REGNAME_SORTDISPLAYEDCOLUMNS = 'DisplayedColumnsSorted'; REGNAME_LISTTABLESCOLUMNNAMES = 'ListTablesColumnNames'; + REGNAME_LASTSESSION = 'lastcon'; + REGNAME_AUTORECONNECT = 'AutoReconnect'; + DEFAULT_AUTORECONNECT = False; + REGNAME_CONVERTHTMLENTITIES = 'ConvertHTMLEntities'; + DEFAULT_CONVERTHTMLENTITIES = True; + REGNAME_RESTORELASTUSEDDB = 'RestoreLastUsedDB'; + DEFAULT_RESTORELASTUSEDDB = True; + REGNAME_LASTUSEDDB = 'lastUsedDB'; + REGNAME_FONTNAME = 'FontName'; + DEFAULT_FONTNAME = 'Courier New'; + REGNAME_FONTSIZE = 'FontSize'; + DEFAULT_FONTSIZE = 9; + REGNAME_DATAFONTNAME = 'DataFontName'; + DEFAULT_DATAFONTNAME = 'Tahoma'; + REGNAME_DATAFONTSIZE = 'DataFontSize'; + DEFAULT_DATAFONTSIZE = 8; + REGNAME_LOGSQLNUM = 'logsqlnum'; + DEFAULT_LOGSQLNUM = 300; + REGNAME_LOGSQLWIDTH = 'logsqlwidth'; + DEFAULT_LOGSQLWIDTH = 2000; + REGNAME_SQLCOLKEYATTRI = 'SQLColKeyAttri'; + DEFAULT_SQLCOLKEYATTRI = $00FF0000; // clBlue; + REGNAME_SQLCOLFUNCTIONATTRI = 'SQLColFunctionAttri'; + DEFAULT_SQLCOLFUNCTIONATTRI = $00800000; // clNavy + REGNAME_SQLCOLDATATYPEATTRI = 'SQLColDataTypeAttri'; + DEFAULT_SQLCOLDATATYPEATTRI = $00000080; // clMaroon; + REGNAME_SQLCOLNUMBERATTRI = 'SQLColNumberAttri'; + DEFAULT_SQLCOLNUMBERATTRI = $00800080; // clPurple; + REGNAME_SQLCOLSTRINGATTRI = 'SQLColStringAttri'; + DEFAULT_SQLCOLSTRINGATTRI = $00008000; // clGreen + REGNAME_SQLCOLCOMMENTATTRI = 'SQLColCommentAttri'; + DEFAULT_SQLCOLCOMMENTATTRI = $00808080; // clGray + REGNAME_SQLCOLTABLENAMEATTRI = 'SQLColTablenameAttri'; + DEFAULT_SQLCOLTABLENAMEATTRI = $00FF00FF; // clFuchsia + REGNAME_SQLCOLACTIVELINE = 'SQLColActiveLine'; + DEFAULT_SQLCOLACTIVELINE = $00FFFFFF; // clWhite + REGNAME_DEFAULTCOLWIDTH = 'DefaultColWidth'; + DEFAULT_DEFAULTCOLWIDTH = 100; + REGNAME_DATALIMIT = 'DataLimit'; + DEFAULT_DATALIMIT = True; + REGNAME_DATALIMITEND = 'DataLimitEnd'; + DEFAULT_DATALIMITEND = 50; + REGNAME_REMEMBERFILTERS = 'RememberFilters'; + DEFAULT_REMEMBERFILTERS = True; + REGNAME_LOGTOFILE = 'LogToFile'; + DEFAULT_LOGTOFILE = False; + REGNAME_WINDOWSTATE = 'windowstate'; + REGNAME_WINDOWLEFT = 'windowleft'; + REGNAME_WINDOWTOP = 'windowtop'; + REGNAME_WINDOWWIDTH = 'windowwidth'; + REGNAME_WINDOWHEIGHT = 'windowheight'; + REGNAME_TOOLBAR2LEFT = 'ToolBar2Left'; + REGNAME_TOOLBARDATALEFT = 'ToolBarDataLeft'; + REGNAME_TOOLBAR2TOP = 'ToolBar2Top'; + REGNAME_TOOLBARDATATOP = 'ToolBarDataTop'; + REGNAME_CHILDWINSTATE = 'childwinstate'; + REGNAME_CHILDWINLEFT = 'childwinleft'; + REGNAME_CHILDWINTOP = 'childwintop'; + REGNAME_CHILDWINWIDTH = 'childwinwidth'; + REGNAME_CHILDWINHEIGHT = 'childwinheight'; + REGNAME_QUERYMEMOHEIGHT = 'querymemoheight'; + REGNAME_DBTREEWIDTH = 'dbtreewidth'; + REGNAME_SQLOUTHEIGHT = 'sqloutheight'; + REGNAME_QUERYHELPERSWIDTH = 'queryhelperswidth'; + REGNAME_SQLWHEREFILE = 'SQLWhereFile'; + REGNAME_DELIMITERS = 'delimiters'; + REGNAME_DELIMITERSELECTED = 'delimiterselected'; + REGNAME_SQLHELPWINLEFT = 'SQLHelp_WindowLeft'; + REGNAME_SQLHELPWINTOP = 'SQLHelp_WindowTop'; + REGNAME_SQLHELPWINWIDTH = 'SQLHelp_WindowWidth'; + REGNAME_SQLHELPWINHEIGHT = 'SQLHelp_WindowHeight'; + REGNAME_SQLHELPPLWIDTH = 'SQLHelp_PnlLeftWidth'; + REGNAME_SQLHELPPRHEIGHT = 'SQLHelp_PnlRightTopHeight'; + REGNAME_HOST = 'Host'; + DEFAULT_HOST = '127.0.0.1'; + REGNAME_USER = 'User'; + DEFAULT_USER = 'root'; + REGNAME_PASSWORD = 'Password'; + DEFAULT_PASSWORD = ''; + REGNAME_PORT = 'Port'; + DEFAULT_PORT = 3306; + REGNAME_TIMEOUT = 'Timeout'; + DEFAULT_TIMEOUT = 30; + REGNAME_COMPRESSED = 'Compressed'; + DEFAULT_COMPRESSED = False; + REGNAME_ONLYDBS = 'OnlyDBs'; + REGNAME_ONLYDBSSORTED = 'OnlyDBsSorted'; + DEFAULT_ONLYDBSSORTED = False; + REGNAME_EXP_STRUCTURE = 'ExportStructure'; + REGNAME_EXP_CREATEDB = 'WithCreateDatabase'; + REGNAME_EXP_CREATETABLE = 'WithCreateTable'; + REGNAME_EXP_DATA = 'ExportData'; + REGNAME_EXP_DBHOW = 'CreateDatabaseHow'; + REGNAME_EXP_TABLESHOW = 'CreateTablesHow'; + REGNAME_EXP_DATAHOW = 'CreateDataHow'; + REGNAME_EXP_COMPAT = 'Compatibility'; + REGNAME_EXP_OUTFILE = 'exportfilename'; + REGNAME_EXP_OUTDIR = 'ExportDirectory'; + REGNAME_EXP_TARGET = 'ExportSQL_OutputTo'; + REGNAME_EXP_WINWIDTH = 'ExportSQL_WindowWidth'; + REGNAME_EXP_WINHEIGHT = 'ExportSQL_WindowHeight'; + REGNAME_CSV_SEPARATOR = 'CSVSeparator'; + DEFAULT_CSV_SEPARATOR = ','; + REGNAME_CSV_ENCLOSER = 'CSVEncloser'; + DEFAULT_CSV_ENCLOSER = ''; + REGNAME_CSV_TERMINATOR = 'CSVTerminator'; + DEFAULT_CSV_TERMINATOR = '\r\n'; + REGNAME_CSV_ESCAPER = 'CSVImportFieldEscaper'; + REGNAME_CSV_FILENAME = 'loadfilename'; + REGNAME_CSV_ENCLOPTION = 'CSVImportFieldsEnclosedOptionally'; + REGNAME_CSV_IGNORELINES = 'CSVImportIgnoreLines'; + REGNAME_CSV_LOWPRIO = 'CSVImportLowPriority'; + REGNAME_CSV_REPLACE = 'CSVImportReplace'; + REGNAME_CSV_IGNORE = 'CSVImportIgnore'; REGPREFIX_COLWIDTHS = 'ColWidths_'; REGPREFIX_COLSVISIBLE = 'ColsVisible_'; diff --git a/source/childwin.pas b/source/childwin.pas index 2e1797f1..cbc6e0ad 100644 --- a/source/childwin.pas +++ b/source/childwin.pas @@ -807,7 +807,7 @@ var miFunction, miFilterFunction : TMenuItem; functioncats : TStringList; - reg, reg2 : TRegistry; + reg : TRegistry; begin QueryRunningInterlock := 0; UserQueryFired := False; @@ -830,22 +830,14 @@ begin // Temporarily disable AutoReconnect in Registry // in case of unexpected application-termination - AutoReconnect := false; - reg := TRegistry.Create(); - with ( reg ) do - begin - OpenKey( REGPATH, true ); - if ( Valueexists( 'Autoreconnect' ) ) then - begin - if ( ReadBool( 'AutoReconnect' ) ) then - begin - AutoReconnect := true; - WriteBool( 'AutoReconnect', false ); - end; - end; - CloseKey(); + AutoReconnect := Mainform.GetRegValue(REGNAME_AUTORECONNECT, DEFAULT_AUTORECONNECT); + if AutoReconnect then begin + reg := TRegistry.Create(); + reg.OpenKey( REGPATH, true ); + reg.WriteBool( REGNAME_AUTORECONNECT, False ); + reg.CloseKey; + FreeAndNil(reg); end; - FreeAndNil(reg); ReadWindowOptions(); @@ -871,16 +863,12 @@ begin ReadDatabasesAndTables( Self ); // Re-enable AutoReconnect in Registry! - if ( AutoReconnect ) then - begin - reg2 := TRegistry.Create(); - with ( reg2 ) do - begin - OpenKey( REGPATH, true ); - WriteBool( 'AutoReconnect', true ); - CloseKey(); - end; - FreeAndNil(reg2); + if AutoReconnect then begin + reg := TRegistry.Create; + reg.OpenKey( REGPATH, true ); + reg.WriteBool( REGNAME_AUTORECONNECT, true ); + reg.CloseKey; + FreeAndNil(reg); end; // Define window properties @@ -894,7 +882,7 @@ begin Application.Title := winName + ' - ' + APPNAME; // Reselect last used database - if ( ( MainForm.GetRegValue( 'RestoreLastUsedDB', true ) ) and ( lastUsedDB <> '' ) ) then + if MainForm.GetRegValue( REGNAME_RESTORELASTUSEDDB, DEFAULT_RESTORELASTUSEDDB ) and ( lastUsedDB <> '' ) then begin try ActiveDatabase := lastUsedDB; @@ -969,167 +957,117 @@ var i : Integer; menuitem : Tmenuitem; reg : TRegistry; + fontname, datafontname : String; + fontsize, datafontsize : Integer; begin // Initialize delimiter settings delimiter := DEFAULT_DELIMITER; ComboBoxQueryDelimiter.ItemIndex := ComboBoxQueryDelimiter.Items.IndexOf( delimiter ); + ws := Mainform.GetRegValue(REGNAME_CHILDWINSTATE, 'Normal'); + if ws = 'Normal' then begin + WindowState := wsNormal; + Left := Mainform.GetRegValue(REGNAME_CHILDWINLEFT, Left); + Top := Mainform.GetRegValue(REGNAME_CHILDWINTOP, Top); + Width := Mainform.GetRegValue(REGNAME_CHILDWINWIDTH, Width ); + Height := Mainform.GetRegValue(REGNAME_CHILDWINHEIGHT, Height ); + end + else if ws = 'Minimized' then + WindowState := wsMinimized + else if ( ws = 'Maximized' ) then + WindowState := wsMaximized; + + // Other values: + pnlQueryMemo.Height := Mainform.GetRegValue(REGNAME_QUERYMEMOHEIGHT, pnlQueryMemo.Height); + pnlQueryHelpers.Width := Mainform.GetRegValue(REGNAME_QUERYHELPERSWIDTH, pnlQueryHelpers.Width); + DBtree.Width := Mainform.GetRegValue(REGNAME_DBTREEWIDTH, DBtree.Width); + PageControlBottom.Height := Mainform.GetRegValue(REGNAME_SQLOUTHEIGHT, PageControlBottom.Height); + prefDefaultColWidth := Mainform.GetRegValue(REGNAME_DEFAULTCOLWIDTH, DEFAULT_DEFAULTCOLWIDTH); + prefLogsqlnum := Mainform.GetRegValue(REGNAME_LOGSQLNUM, DEFAULT_LOGSQLNUM); + prefLogSqlWidth := Mainform.GetRegValue(REGNAME_LOGSQLWIDTH, DEFAULT_LOGSQLWIDTH); + prefConvertHTMLEntities := Mainform.GetRegValue(REGNAME_CONVERTHTMLENTITIES, DEFAULT_CONVERTHTMLENTITIES); + prefCSVSeparator := Mainform.GetRegValue(REGNAME_CSV_SEPARATOR, DEFAULT_CSV_SEPARATOR); + prefCSVEncloser := Mainform.GetRegValue(REGNAME_CSV_ENCLOSER, DEFAULT_CSV_ENCLOSER); + prefCSVTerminator := Mainform.GetRegValue(REGNAME_CSV_TERMINATOR, DEFAULT_CSV_TERMINATOR); + prefRememberFilters := Mainform.GetRegValue(REGNAME_REMEMBERFILTERS, DEFAULT_REMEMBERFILTERS); + + // SQL-Font: + fontname := Mainform.GetRegValue(REGNAME_FONTNAME, DEFAULT_FONTNAME); + fontsize := Mainform.GetRegValue(REGNAME_FONTSIZE, DEFAULT_FONTSIZE); + SynMemoQuery.Font.Name := fontname; + SynMemoSQLLog.Font.Name := fontname; + SynMemoProcessView.Font.Name := fontname; + SynMemoQuery.Font.Size := fontsize; + SynMemoSQLLog.Font.Size := fontsize; + SynMemoProcessView.Font.Size := fontsize; + + // Data-Font: + datafontname := Mainform.GetRegValue(REGNAME_DATAFONTNAME, DEFAULT_DATAFONTNAME); + datafontsize := Mainform.GetRegValue(REGNAME_DATAFONTSIZE, DEFAULT_DATAFONTSIZE); + gridData.Font.Name := datafontname; + gridQuery.Font.Name := datafontname; + DBMemo1.Font.Name := datafontname; + gridData.Font.Size := datafontsize; + gridQuery.Font.Size := datafontsize; + DBMemo1.Font.Size := datafontsize; + + // Color coding: + SynSQLSyn1.KeyAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLKEYATTRI, ColorToString(DEFAULT_SQLCOLKEYATTRI))); + SynSQLSyn1.FunctionAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLFUNCTIONATTRI, ColorToString(DEFAULT_SQLCOLFUNCTIONATTRI))); + SynSQLSyn1.DataTypeAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLDATATYPEATTRI, ColorToString(DEFAULT_SQLCOLDATATYPEATTRI))); + SynSQLSyn1.NumberAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLNUMBERATTRI, ColorToString(DEFAULT_SQLCOLNUMBERATTRI))); + SynSQLSyn1.StringAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLSTRINGATTRI, ColorToString(DEFAULT_SQLCOLSTRINGATTRI))); + SynSQLSyn1.CommentAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLCOMMENTATTRI, ColorToString(DEFAULT_SQLCOLCOMMENTATTRI))); + SynSQLSyn1.TablenameAttri.Foreground := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLTABLENAMEATTRI, ColorToString(DEFAULT_SQLCOLTABLENAMEATTRI))); + SynMemoQuery.ActiveLineColor := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLACTIVELINE, ColorToString(DEFAULT_SQLCOLACTIVELINE))); + + // SQLFiles-History + FillPopupQueryLoad(); + reg := TRegistry.Create; - if reg.OpenKey( REGPATH, true ) then - begin - ws := reg.ReadString( 'childwinstate' ); - if ws = 'Normal' then - begin - WindowState := wsNormal; - if reg.ValueExists( 'childwinleft' ) then - begin - Left := reg.ReadInteger( 'childwinleft' ); - Top := reg.ReadInteger( 'childwintop' ); - Width := reg.ReadInteger( 'childwinwidth' ); - Height := reg.ReadInteger( 'childwinheight' ); - end; - end - else if ws = 'Minimized' then - WindowState := wsMinimized - else if ( ws = 'Maximized' ) then - WindowState := wsMaximized; - - // Other values: - if reg.ValueExists( 'querymemoheight' ) then - pnlQueryMemo.Height := reg.ReadInteger('querymemoheight'); - if reg.ValueExists( 'queryhelperswidth' ) then - pnlQueryHelpers.Width := reg.ReadInteger('queryhelperswidth'); - - if reg.ValueExists( 'dbtreewidth' ) then - DBtree.Width := reg.ReadInteger( 'dbtreewidth' ); - - if reg.ValueExists( 'sqloutheight' ) then - PageControlBottom.Height := reg.ReadInteger( 'sqloutheight' ); - - if reg.ValueExists( 'DefaultColWidth' ) then - prefDefaultColWidth := reg.ReadInteger( 'DefaultColWidth' ) - else - prefDefaultColWidth := 100; - - if reg.ValueExists('logsqlnum') then - prefLogsqlnum := reg.ReadInteger('logsqlnum') - else - prefLogsqlnum := 300; - - if reg.ValueExists('logsqlwidth') then - prefLogSqlWidth := reg.ReadInteger('logsqlwidth') - else - prefLogSqlWidth := 2000; - - prefConvertHTMLEntities := true; - if reg.Valueexists('ConvertHTMLEntities') then - prefConvertHTMLEntities := reg.ReadBool('ConvertHTMLEntities'); - - prefCSVSeparator := ','; - prefCSVEncloser := ''; - prefCSVTerminator := '\r\n'; - if reg.Valueexists('CSVSeparator') then - prefCSVSeparator := reg.ReadString('CSVSeparator'); - if reg.Valueexists('CSVEncloser') then - prefCSVEncloser := reg.ReadString('CSVEncloser'); - if reg.Valueexists('CSVTerminator') then - prefCSVTerminator := reg.ReadString('CSVTerminator'); - - // SQL-Font: - if reg.ValueExists( 'FontName' ) and reg.ValueExists('FontSize') then - begin - SynMemoQuery.Font.Name := reg.ReadString( 'FontName' ); - SynMemoSQLLog.Font.Name := reg.ReadString( 'FontName' ); - SynMemoProcessView.Font.Name := reg.ReadString( 'FontName' ); - SynMemoQuery.Font.Size := reg.ReadInteger( 'FontSize' ); - SynMemoSQLLog.Font.Size := reg.ReadInteger( 'FontSize' ); - SynMemoProcessView.Font.Size := reg.ReadInteger( 'FontSize' ); - end; - - // Data-Font: - if reg.ValueExists( 'DataFontName' ) and reg.ValueExists( 'DataFontSize' ) then - begin - gridData.Font.Name := reg.ReadString( 'DataFontName' ); - gridQuery.Font.Name := reg.ReadString( 'DataFontName' ); - DBMemo1.Font.Name := reg.ReadString( 'DataFontName' ); - gridData.Font.Size := reg.ReadInteger( 'DataFontSize' ); - gridQuery.Font.Size := reg.ReadInteger( 'DataFontSize' ); - DBMemo1.Font.Size := reg.ReadInteger( 'DataFontSize' ); - end; - - // Color coding: - if reg.ValueExists( 'SQLColKeyAttri' ) then - SynSQLSyn1.KeyAttri.Foreground := StringToColor( reg.ReadString( 'SQLColKeyAttri' ) ); - if reg.ValueExists( 'SQLColFunctionAttri' ) then - SynSQLSyn1.FunctionAttri.Foreground := StringToColor( reg.ReadString( 'SQLColFunctionAttri' ) ); - if reg.ValueExists( 'SQLColDataTypeAttri' ) then - SynSQLSyn1.DataTypeAttri.Foreground := StringToColor( reg.ReadString( 'SQLColDataTypeAttri' ) ); - if reg.ValueExists( 'SQLColNumberAttri' ) then - SynSQLSyn1.NumberAttri.Foreground := StringToColor( reg.ReadString( 'SQLColNumberAttri' ) ); - if reg.ValueExists( 'SQLColStringAttri' ) then - SynSQLSyn1.StringAttri.Foreground := StringToColor( reg.ReadString( 'SQLColStringAttri' ) ); - if reg.ValueExists( 'SQLColCommentAttri' ) then - SynSQLSyn1.CommentAttri.Foreground := StringToColor( reg.ReadString( 'SQLColCommentAttri' ) ); - if reg.ValueExists( 'SQLColTablenameAttri' ) then - SynSQLSyn1.TablenameAttri.Foreground := StringToColor( reg.ReadString( 'SQLColTablenameAttri' ) ); - if reg.ValueExists( 'SQLColActiveLine' ) then - SynMemoQuery.ActiveLineColor := StringToColor( reg.ReadString('SQLColActiveLine') ); - - // SQLFiles-History - FillPopupQueryLoad(); - + if reg.OpenKey( REGPATH, true ) then begin // SQL-Filter-Files-History i := 1; popupFilterOpenFile.Items.Clear(); - while ( reg.ValueExists( 'SQLWhereFile' + IntToStr(i) ) ) do + while ( reg.ValueExists( REGNAME_SQLWHEREFILE + IntToStr(i) ) ) do begin menuitem := Tmenuitem.Create(Self); - menuitem.Caption := IntToStr( popupFilterOpenFile.Items.count + 1) + ' ' + reg.ReadString( 'SQLWhereFile' + IntToStr(i) ); + menuitem.Caption := IntToStr( popupFilterOpenFile.Items.count + 1) + ' ' + reg.ReadString( REGNAME_SQLWHEREFILE + IntToStr(i) ); menuitem.OnClick := LoadSQLWhereFile; popupFilterOpenFile.Items.Add( menuitem ); inc( i ); end; - - // Synchronize internal variables with defaults from DFM. - StopOnErrors := btnQueryStopOnErrors.Down; - - // Says if the filters on the data tab shall be remembered - if reg.ValueExists( 'RememberFilters' ) then - prefRememberFilters := reg.ReadBool('RememberFilters') - else - prefRememberFilters := True; - - // Restore width of columns of all VirtualTrees - RestoreListSetup(ListVariables); - RestoreListSetup(ListStatus); - RestoreListSetup(ListProcesses); - RestoreListSetup(ListCommandStats); - RestoreListSetup(ListTables); - RestoreListSetup(ListColumns); - - // Read the delimiters - delimiters := Trim( reg.ReadString( 'delimiters' ) ); - if ( delimiters <> EmptyStr ) then - begin - ComboBoxQueryDelimiter.Items.Text := delimiters; - ComboBoxQueryDelimiter.ItemIndex := reg.ReadInteger( 'delimiterselected' ); - end; - - // Activate logging - if reg.ValueExists( 'LogToFile' ) and reg.ReadBool('LogToFile') then - ActivateFileLogging; - - // Open server-specific registry-folder. - // relative from already opened folder! - reg.OpenKey( 'Servers\' + FConn.Description, true ); - - // Set last used database, select it later in Init - lastUsedDB := reg.ReadString( 'lastUsedDB' ); + reg.CloseKey; end; - reg.CloseKey; reg.Free; + // Read the delimiters + delimiters := Trim( Mainform.GetRegValue(REGNAME_DELIMITERS, '') ); + if delimiters <> '' then + begin + ComboBoxQueryDelimiter.Items.Text := delimiters; + ComboBoxQueryDelimiter.ItemIndex := Mainform.GetRegValue( REGNAME_DELIMITERSELECTED, 0 ); + end; + + // Synchronize internal variables with defaults from DFM. + StopOnErrors := btnQueryStopOnErrors.Down; + + // Restore width of columns of all VirtualTrees + RestoreListSetup(ListVariables); + RestoreListSetup(ListStatus); + RestoreListSetup(ListProcesses); + RestoreListSetup(ListCommandStats); + RestoreListSetup(ListTables); + RestoreListSetup(ListColumns); + + // Activate logging + if Mainform.GetRegValue(REGNAME_LOGTOFILE, DEFAULT_LOGTOFILE) then + ActivateFileLogging; + + // Set last used database, select it later in Init + lastUsedDB := Mainform.GetRegValue(REGNAME_LASTUSEDDB, '', FConn.Description); + // Generate menuitems for popupDbGridHeader (column selection for ListTables) popupDBGridHeader.Items.Clear; for i:=0 to ListTables.Header.Columns.Count-1 do @@ -1177,55 +1115,43 @@ begin LeaveCriticalSection(SqlMessagesLock); // Saving some vars into registry - case ( WindowState ) of - wsNormal : - begin - ws := 'Normal'; - end; - wsMinimized : - begin - ws := 'Minimized'; - end; - wsMaximized : - begin - ws := 'Maximized'; - end; + case WindowState of + wsNormal : ws := 'Normal'; + wsMinimized : ws := 'Minimized'; + wsMaximized : ws := 'Maximized'; end; reg := TRegistry.Create(); - with ( reg ) do + if reg.OpenKey( REGPATH, true ) then begin - if ( OpenKey( REGPATH, true ) ) then - begin - // Window state and position - WriteString( 'childwinstate', ws ); - WriteInteger( 'childwinleft', left ); - WriteInteger( 'childwintop', top ); - WriteInteger( 'childwinwidth', width ); - WriteInteger( 'childwinheight', height ); + // Window state and position + reg.WriteString( REGNAME_CHILDWINSTATE, ws ); + reg.WriteInteger( REGNAME_CHILDWINLEFT, Left ); + reg.WriteInteger( REGNAME_CHILDWINTOP, Top ); + reg.WriteInteger( REGNAME_CHILDWINWIDTH, Width ); + reg.WriteInteger( REGNAME_CHILDWINHEIGHT, Height ); - WriteInteger( 'querymemoheight', pnlQueryMemo.Height ); - WriteInteger( 'queryhelperswidth', pnlQueryHelpers.Width ); - WriteInteger( 'dbtreewidth', dbtree.width ); - WriteInteger( 'sqloutheight', PageControlBottom.Height ); + reg.WriteInteger( REGNAME_QUERYMEMOHEIGHT, pnlQueryMemo.Height ); + reg.WriteInteger( REGNAME_QUERYHELPERSWIDTH, pnlQueryHelpers.Width ); + reg.WriteInteger( REGNAME_DBTREEWIDTH, dbtree.width ); + reg.WriteInteger( REGNAME_SQLOUTHEIGHT, PageControlBottom.Height ); - // Save width of probably resized columns of all VirtualTrees - SaveListSetup(ListVariables); - SaveListSetup(ListStatus); - SaveListSetup(ListProcesses); - SaveListSetup(ListCommandStats); - SaveListSetup(ListTables); - SaveListSetup(ListColumns); + // Save width of probably resized columns of all VirtualTrees + SaveListSetup(ListVariables); + SaveListSetup(ListStatus); + SaveListSetup(ListProcesses); + SaveListSetup(ListCommandStats); + SaveListSetup(ListTables); + SaveListSetup(ListColumns); - // Save the delimiters - WriteString( 'delimiters', ComboBoxQueryDelimiter.Items.Text ); - WriteInteger( 'delimiterselected', ComboBoxQueryDelimiter.ItemIndex ); + // Save the delimiters + reg.WriteString( REGNAME_DELIMITERS, ComboBoxQueryDelimiter.Items.Text ); + reg.WriteInteger( REGNAME_DELIMITERSELECTED, ComboBoxQueryDelimiter.ItemIndex ); - // Open server-specific registry-folder. - // relative from already opened folder! - OpenKey( 'Servers\' + FConn.Description, true ); - WriteString( 'lastUsedDB', ActiveDatabase ); - end; + // Open server-specific registry-folder. + // relative from already opened folder! + reg.OpenKey( REGKEY_SESSIONS + FConn.Description, true ); + reg.WriteString( REGNAME_LASTUSEDDB, ActiveDatabase ); end; FreeAndNil(reg); @@ -1572,7 +1498,6 @@ var j : Integer; OrderColumns : TOrderColArray; PrimaryKeyColumns : TStringList; - reg, reg2 : TRegistry; reg_value : String; select_base : String; limit : Int64; @@ -1584,7 +1509,6 @@ var tmp : TDataSet; begin viewingdata := true; - reg := TRegistry.Create(); sl_query := TStringList.Create(); try // limit number of rows automatically if first time this table is shown @@ -1632,16 +1556,13 @@ begin EDBImage1.DataField := ''; EDBImage1.DataSource := DataSource1; - reg.OpenKey( REGPATH + '\Servers\' + FConn.Description, true ); - if not dataselected and prefRememberFilters then begin SynMemoFilter.Text := ''; // Read cached WHERE-clause and set filter - reg_value := 'WHERECLAUSE_' + ActiveDatabase + '.' + SelectedTable; - if ( reg.ValueExists( reg_value ) ) then - begin - SynMemoFilter.Text := reg.ReadString( reg_value ); + reg_value := Mainform.GetRegValue( 'WHERECLAUSE_' + ActiveDatabase + '.' + SelectedTable, '', FConn.Description ); + if reg_value <> '' then begin + SynMemoFilter.Text := reg_value; // Ensure the user can see its previous specified filter // in case of an SQL-error, it's important that he can delete it tabFilter.tabVisible := true; @@ -1675,13 +1596,8 @@ begin MainForm.ShowStatus( 'Retrieving data...', 2, true ); // Read columns to display from registry - reg2 := TRegistry.Create; - with ( reg2 ) do - begin - OpenKey( REGPATH + '\Servers\' + FConn.Description, true ); - DisplayedColumnsList := explode( '`', ReadString(REGNAME_DISPLAYEDCOLUMNS + '_' + ActiveDatabase + '.' + SelectedTable)); - end; - FreeAndNil(reg2); + reg_value := Mainform.GetRegValue(REGNAME_DISPLAYEDCOLUMNS + '_' + ActiveDatabase + '.' + SelectedTable, ''); + DisplayedColumnsList := explode( '`', reg_value); // Prepare SELECT statement select_base := 'SELECT '; @@ -1848,7 +1764,6 @@ begin Screen.Cursor := crDefault; finally - FreeAndNil(reg); FreeAndNil(sl_query); viewingdata := false; end; @@ -2679,7 +2594,7 @@ begin OnlyDBs.Delete( OnlyDBs.IndexOf(tndb_.Text) ); with TRegistry.Create do begin - if OpenKey(REGPATH + '\Servers\' + FConn.Description, false) then + if OpenKey(REGPATH + REGKEY_SESSIONS + FConn.Description, false) then begin WriteString( 'OnlyDBs', ImplodeStr( ';', OnlyDBs ) ); CloseKey; @@ -3490,7 +3405,7 @@ begin OnlyDBs.Add( CreateDatabaseForm.editDBName.Text ); with TRegistry.Create do begin - if OpenKey(REGPATH + '\Servers\' + FConn.Description, false) then + if OpenKey(REGPATH + REGKEY_SESSIONS + FConn.Description, false) then begin WriteString( 'OnlyDBs', ImplodeStr( ';', OnlyDBs ) ); CloseKey; @@ -4134,16 +4049,16 @@ begin break; end; while i > 1 do begin - WriteString('SQLWhereFile'+IntToStr(i), ReadString('SQLWhereFile'+IntToStr(i-1))); + WriteString(REGNAME_SQLWHEREFILE+IntToStr(i), ReadString(REGNAME_SQLWHEREFILE+IntToStr(i-1))); dec(i); end; WriteString('SQLWhereFile1', FileName); i := 1; popupTreeView.Items.Clear; - while ValueExists('SQLWhereFile'+IntToStr(i)) do begin + while ValueExists(REGNAME_SQLWHEREFILE+IntToStr(i)) do begin menuitem := Tmenuitem.Create(self); - menuitem.Caption := IntToStr(popupFilterOpenFile.Items.count+1) + ' ' + ReadString('SQLWhereFile'+IntToStr(i)); + menuitem.Caption := IntToStr(popupFilterOpenFile.Items.count+1) + ' ' + ReadString(REGNAME_SQLWHEREFILE+IntToStr(i)); menuitem.OnClick := LoadSQLWhereFile; popupFilterOpenFile.Items.Add(menuitem); Inc( i ); @@ -4186,7 +4101,7 @@ begin reg := TRegistry.Create; try if prefRememberFilters then begin - reg.openkey( REGPATH + '\Servers\' + FConn.Description, false ); + reg.openkey( REGPATH + REGKEY_SESSIONS + FConn.Description, false ); reg_value := 'WHERECLAUSE_' + ActiveDatabase + '.' + SelectedTable; if where <> '' then reg.WriteString( reg_value, where ) else if reg.ValueExists( reg_value ) then reg.DeleteValue( reg_value ); @@ -4816,22 +4731,16 @@ begin popupQueryLoad.Items.Add(menuitem); // Recent files - with TRegistry.Create do - begin - openkey(REGPATH, true); - j := 0; - for i:=0 to 19 do - begin - if not ValueExists('SQLFile'+IntToStr(i)) then - continue; - sqlFilename := ReadString( 'SQLFile'+IntToStr(i) ); - inc(j); - menuitem := TMenuItem.Create( popupQueryLoad ); - menuitem.Caption := IntToStr(j) + ' ' + sqlFilename; - menuitem.OnClick := popupQueryLoadClick; - popupQueryLoad.Items.Add(menuitem); - end; - Free; + j := 0; + for i:=0 to 19 do begin + sqlFilename := Mainform.GetRegValue( 'SQLFile'+IntToStr(i), '' ); + if sqlFilename = '' then + continue; + inc(j); + menuitem := TMenuItem.Create( popupQueryLoad ); + menuitem.Caption := IntToStr(j) + ' ' + sqlFilename; + menuitem.OnClick := popupQueryLoadClick; + popupQueryLoad.Items.Add(menuitem); end; // Separator + "Remove absent files" @@ -6477,17 +6386,15 @@ procedure TMDIChild.RestoreListSetup( List: TVirtualStringTree ); var i : Byte; colwidth, colpos : Integer; + Value : String; ValueList : TStringList; - reg : TRegistry; begin - reg := TRegistry.Create; - reg.OpenKey( REGPATH, true ); ValueList := TStringList.Create; // Column widths - if reg.ValueExists( REGPREFIX_COLWIDTHS + List.Name ) then - begin - ValueList := Explode( ',', reg.ReadString( REGPREFIX_COLWIDTHS + List.Name ) ); + Value := Mainform.GetRegValue(REGPREFIX_COLWIDTHS + List.Name, ''); + if Value <> '' then begin + ValueList := Explode( ',', Value ); for i := 0 to ValueList.Count - 1 do begin colwidth := MakeInt(ValueList[i]); @@ -6498,16 +6405,16 @@ begin end; // Column visibility - if reg.ValueExists( REGPREFIX_COLSVISIBLE + List.Name ) then - begin - ValueList := Explode( ',', reg.ReadString( REGPREFIX_COLSVISIBLE + List.Name ) ); + Value := Mainform.GetRegValue(REGPREFIX_COLSVISIBLE + List.Name, ''); + if Value <> '' then begin + ValueList := Explode( ',', Value ); SetVisibleListColumns( List, ValueList ); end; // Column position - if reg.ValueExists( REGPREFIX_COLPOS + List.Name ) then - begin - ValueList := Explode( ',', reg.ReadString( REGPREFIX_COLPOS + List.Name ) ); + Value := Mainform.GetRegValue(REGPREFIX_COLPOS + List.Name, ''); + if Value <> '' then begin + ValueList := Explode( ',', Value ); for i := 0 to ValueList.Count - 1 do begin colpos := MakeInt(ValueList[i]); @@ -6517,7 +6424,6 @@ begin end; end; - reg.Free; ValueList.Free; end; @@ -6752,13 +6658,11 @@ begin SetLength( Result, 0 ); // Read ORDER clause from registry - reg := TRegistry.Create(); - reg.OpenKey( REGPATH + '\Servers\' + FConn.Description, true ); reg_name := REGPREFIX_ORDERCLAUSE + ActiveDatabase + '.' + SelectedTable; + old_orderclause := Mainform.GetRegValue(reg_name, '', FConn.Description); - if reg.ValueExists(reg_name) then + if old_orderclause <> '' then begin - old_orderclause := reg.ReadString(reg_name); // Parse ORDER clause order_parts := explode( ',', old_orderclause ); ValidColumns := GetVTCaptions( ListColumns ); @@ -6821,13 +6725,15 @@ begin new_orderclause := ComposeOrderClause(Result); if new_orderclause <> old_orderclause then begin + reg := TRegistry.Create(); + reg.OpenKey( REGPATH + REGKEY_SESSIONS + FConn.Description, true ); if new_orderclause <> '' then reg.WriteString(reg_name , new_orderclause) else reg.DeleteValue(reg_name); + reg.Free; end; - reg.Free; end; diff --git a/source/column_selection.pas b/source/column_selection.pas index 324d1e28..9897323c 100644 --- a/source/column_selection.pas +++ b/source/column_selection.pas @@ -41,7 +41,6 @@ uses MAIN, helpers; } procedure TColumnSelectionForm.FormShow(Sender: TObject); var - reg : TRegistry; reg_columns : TStringList; begin // Take column names from listColumns and add here @@ -51,30 +50,17 @@ begin reg_name := REGNAME_DISPLAYEDCOLUMNS + '_' + Mainform.Childwin.ActiveDatabase + '.' + Mainform.Childwin.SelectedTable; // Read reg value and check items! - reg := TRegistry.Create; - reg.OpenKey( REGPATH + '\Servers\' + Mainform.Childwin.Conn.Description, true ); - reg_columns := explode( '`', reg.ReadString( reg_name ) ); - if reg_columns.Count = 0 then - begin - // Simply check all items - ToggleCheckListBox( chklistColumns, True ); - end - else - begin - // Only check selected items + reg_columns := explode( '`', Mainform.GetRegValue( reg_name, '', Mainform.Childwin.Conn.Description ) ); + if reg_columns.Count = 0 then // Simply check all items + ToggleCheckListBox( chklistColumns, True ) + else // Only check selected items ToggleCheckListBox( chklistColumns, True, reg_columns ); - end; // Call check-event to update state of "Select / Deselect all" checkbox chklistColumnsClickCheck( Sender ); // Restore last used sorting state from registry - reg.OpenKey( REGPATH, false ); - if (reg.ValueExists(REGNAME_SORTDISPLAYEDCOLUMNS)) then - chkSort.Checked := reg.ReadBool(REGNAME_SORTDISPLAYEDCOLUMNS); - - reg.CloseKey; - FreeAndNil(reg); + chkSort.Checked := Mainform.GetRegValue(REGNAME_SORTDISPLAYEDCOLUMNS, chkSort.Checked); end; @@ -90,7 +76,7 @@ var begin // Open registry registry key reg := TRegistry.Create; - reg.OpenKey( REGPATH + '\Servers\' + Mainform.Childwin.Conn.Description, true ); + reg.OpenKey( REGPATH + REGKEY_SESSIONS + Mainform.Childwin.Conn.Description, true ); // Set initial values reg_oldvalue := ''; diff --git a/source/connections.pas b/source/connections.pas index e2baea3c..18764fec 100644 --- a/source/connections.pas +++ b/source/connections.pas @@ -110,7 +110,7 @@ begin // Save last connection name to registry reg := TRegistry.Create; if reg.OpenKey(REGPATH, true) then - reg.WriteString('lastcon', ComboBoxDescription.Text); + reg.WriteString(REGNAME_LASTSESSION, ComboBoxDescription.Text); reg.CloseKey; reg.Free; Close; @@ -132,27 +132,21 @@ var i : Integer; lastcon : String; AutoReconnect : Boolean; + reg : TRegistry; begin Screen.Cursor := crHourglass; ComboBoxDescription.Items.Clear; ComboBoxDescription.Text := ''; - with TRegistry.Create do + reg := TRegistry.Create; + if reg.OpenKey(REGPATH + REGKEY_SESSIONS, true) then begin - if OpenKey(REGPATH + '\Servers', true) then - begin - GetKeyNames(ComboBoxDescription.Items); - CloseKey; - end; - OpenKey(REGPATH, true); - lastcon := ReadString('lastcon'); - if ValueExists('AutoReconnect') then - AutoReconnect := ReadBool('AutoReconnect') - else - AutoReconnect := false; - CloseKey; - Free; + reg.GetKeyNames(ComboBoxDescription.Items); + reg.Free; end; + lastcon := Mainform.GetRegValue(REGNAME_LASTSESSION, ''); + AutoReconnect := Mainform.GetRegValue(REGNAME_AUTORECONNECT, DEFAULT_AUTORECONNECT); + if ComboBoxDescription.Items.Count > 0 then begin EnableDisable(true); @@ -207,16 +201,16 @@ begin Screen.Cursor := crHourglass; with TRegistry.Create do begin - if OpenKey(REGPATH + '\Servers\' + ComboBoxDescription.Text, true) then + if OpenKey(REGPATH + REGKEY_SESSIONS + ComboBoxDescription.Text, true) then begin - WriteString('Host', EditHost.Text); - WriteString('User', EditUsername.Text); - WriteString('Password', encrypt(EditPassword.Text)); - WriteString('Port', EditPort.Text); - WriteString('Timeout', EditTimeout.Text); - WriteBool('Compressed', CheckBoxCompressed.Checked); - WriteString('OnlyDBs', EditOnlyDBs.Text); - WriteBool('OnlyDBsSorted', CheckBoxSorted.Checked); + WriteString(REGNAME_HOST, EditHost.Text); + WriteString(REGNAME_USER, EditUsername.Text); + WriteString(REGNAME_PASSWORD, encrypt(EditPassword.Text)); + WriteString(REGNAME_PORT, EditPort.Text); + WriteString(REGNAME_TIMEOUT, EditTimeout.Text); + WriteBool(REGNAME_COMPRESSED, CheckBoxCompressed.Checked); + WriteString(REGNAME_ONLYDBS, EditOnlyDBs.Text); + WriteBool(REGNAME_ONLYDBSSORTED, CheckBoxSorted.Checked); CloseKey; end; Free; @@ -236,14 +230,14 @@ begin begin i := 0; description := 'New Connection'; - while KeyExists(REGPATH + '\Servers\' + description) do + while KeyExists(REGPATH + REGKEY_SESSIONS + description) do begin inc(i); description := 'New Connection' + ' (' + inttostr(i) + ')'; end; if not InputQuery('New Connection...', 'Description:', description) then exit; - if KeyExists(REGPATH + '\Servers\' + description) then + if KeyExists(REGPATH + REGKEY_SESSIONS + description) then begin MessageDlg('Entry "' + description + '" already exists!', mtError, [mbOK], 0); exit; @@ -253,16 +247,16 @@ begin ComboBoxDescription.Items.Add(description); ComboBoxDescription.ItemIndex := ComboBoxDescription.Items.Count - 1; - if OpenKey(REGPATH + '\Servers\' + ComboBoxDescription.Text, true) then + if OpenKey(REGPATH + REGKEY_SESSIONS + ComboBoxDescription.Text, true) then begin - WriteString('Host', LOCAL_HOST); - WriteString('User', 'root'); - WriteString('Password', encrypt('')); - WriteString('Port', inttostr(MYSQL_PORT)); - WriteString('Timeout', inttostr(30)); - WriteBool('Compressed', false); - WriteString('OnlyDBs', ''); - WriteBool('OnlyDBsSorted', true); + WriteString(REGNAME_HOST, DEFAULT_HOST); + WriteString(REGNAME_USER, DEFAULT_USER); + WriteString(REGNAME_PASSWORD, encrypt(DEFAULT_PASSWORD)); + WriteString(REGNAME_PORT, inttostr(DEFAULT_PORT)); + WriteString(REGNAME_TIMEOUT, inttostr(DEFAULT_TIMEOUT)); + WriteBool(REGNAME_COMPRESSED, DEFAULT_COMPRESSED); + WriteString(REGNAME_ONLYDBS, ''); + WriteBool(REGNAME_ONLYDBSSORTED, DEFAULT_ONLYDBSSORTED); CloseKey; end; Free; @@ -282,7 +276,7 @@ begin begin with TRegistry.Create do begin - if not DeleteKey(REGPATH + '\Servers\' + ComboBoxDescription.Text) then + if not DeleteKey(REGPATH + REGKEY_SESSIONS + ComboBoxDescription.Text) then MessageDlg('Error while deleting Key from Registry!', mtError, [mbOK], 0); Free; end; @@ -292,28 +286,20 @@ end; procedure Tconnform.ComboBoxDescriptionClick(Sender: TObject); +var + sessname : String; begin // select one connection! Screen.Cursor := crHourglass; - with TRegistry.Create do - begin - if OpenKey(REGPATH + '\Servers\' + ComboBoxDescription.Text, true) then - begin - EditHost.Text := ReadString('Host'); - EditUsername.Text := ReadString('User'); - EditPassword.Text := decrypt(ReadString('Password')); - EditPort.Text := ReadString('Port'); - EditTimeout.Text := ReadString('Timeout'); - CheckBoxCompressed.Checked := ReadBool('Compressed'); - EditOnlyDBs.Text := ReadString('OnlyDBs'); - if ValueExists('OnlyDBsSorted') then - CheckBoxSorted.Checked := ReadBool('OnlyDBsSorted') - else - CheckBoxSorted.Checked := false; // for existing connections from older HS-versions always off - CloseKey; - end; - Free; - end; + sessname := ComboBoxDescription.Text; + EditHost.Text := Mainform.GetRegValue(REGNAME_HOST, '', sessname); + EditUsername.Text := Mainform.GetRegValue(REGNAME_USER, '', sessname); + EditPassword.Text := decrypt(Mainform.GetRegValue(REGNAME_PASSWORD, '', sessname)); + EditPort.Text := Mainform.GetRegValue(REGNAME_PORT, '', sessname); + EditTimeout.Text := Mainform.GetRegValue(REGNAME_TIMEOUT, '', sessname);; + CheckBoxCompressed.Checked := Mainform.GetRegValue(REGNAME_COMPRESSED, DEFAULT_COMPRESSED, sessname); + EditOnlyDBs.Text := Mainform.GetRegValue(REGNAME_ONLYDBS, '', sessname); + CheckBoxSorted.Checked := Mainform.GetRegValue(REGNAME_ONLYDBSSORTED, DEFAULT_ONLYDBSSORTED, sessname); ButtonSave.Enabled := false; ButtonSaveAndConnect.Enabled := ButtonSave.Enabled; ButtonEditDesc.Enabled := ComboBoxDescription.ItemIndex > -1; @@ -383,7 +369,7 @@ begin with TRegistry.Create do begin idx := ComboBoxDescription.ItemIndex; try - MoveKey(REGPATH + '\Servers\' + olddesc, REGPATH + '\Servers\' + newdesc, true); + MoveKey(REGPATH + REGKEY_SESSIONS + olddesc, REGPATH + REGKEY_SESSIONS + newdesc, true); ComboBoxDescription.Items[ComboBoxDescription.ItemIndex] := newdesc; ComboBoxDescription.ItemIndex := idx; ComboBoxDescriptionClick(self); diff --git a/source/copytable.pas b/source/copytable.pas index 780f318f..3664e52b 100644 --- a/source/copytable.pas +++ b/source/copytable.pas @@ -10,7 +10,7 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons, CheckLst, ZDataSet, ComCtrls; + StdCtrls, Buttons, CheckLst, ZDataSet, ComCtrls, Registry; type TCopyTableForm = class(TForm) @@ -180,6 +180,7 @@ var zq : TDataSet; isFulltext : Boolean; struc_data : Byte; + reg : TRegistry; begin // copy table! @@ -188,9 +189,14 @@ begin if radioStructure.Checked then struc_data := OPTION_STRUCTURE; if radioStructureAndData.Checked then struc_data := OPTION_STRUCTURE_AND_DATA; - mainform.SaveRegValue( OPTION_REGNAME_STRUC_DATA, struc_data ); - mainform.SaveRegValue( OPTION_REGNAME_WITH_INDEXES, CheckBoxWithIndexes.Checked ); - mainform.SaveRegValue( OPTION_REGNAME_WITH_ALL_FIELDS, CheckBoxWithAllFields.Checked ); + reg := TRegistry.Create; + if reg.OpenKey(REGPATH, False) then begin + reg.WriteInteger( OPTION_REGNAME_STRUC_DATA, struc_data ); + reg.WriteBool( OPTION_REGNAME_WITH_INDEXES, CheckBoxWithIndexes.Checked ); + reg.WriteBool( OPTION_REGNAME_WITH_ALL_FIELDS, CheckBoxWithAllFields.Checked ); + reg.CloseKey; + end; + reg.Free; strquery := 'CREATE TABLE ' + mainform.mask(ComboSelectDatabase.Text) + '.' + mainform.mask(editNewTablename.Text) + ' '; diff --git a/source/data_sorting.pas b/source/data_sorting.pas index d5bf3c7b..2e06e1d3 100644 --- a/source/data_sorting.pas +++ b/source/data_sorting.pas @@ -47,19 +47,13 @@ uses main, helpers; Initialization } procedure TDataSortingForm.FormShow(Sender: TObject); -var - reg : TRegistry; begin // Take column names from listColumns and add here ColumnNames := GetVTCaptions( Mainform.Childwin.ListColumns ); // Read original ORDER clause from registry - reg := TRegistry.Create(); - reg.OpenKey( REGPATH + '\Servers\' + Mainform.Childwin.Description, true ); reg_name := REGPREFIX_ORDERCLAUSE + Mainform.Childwin.ActiveDatabase + '.' + Mainform.Childwin.SelectedTable; - OldOrderClause := reg.ReadString(reg_name); - reg.CloseKey; - FreeAndNil(reg); + OldOrderClause := Mainform.GetRegValue(reg_name, '', Mainform.Childwin.Description); OrderColumns := Mainform.Childwin.HandleOrderColumns; @@ -304,7 +298,7 @@ var reg : TRegistry; begin reg := TRegistry.Create(); - reg.OpenKey( REGPATH + '\Servers\' + Mainform.Childwin.Description, true ); + reg.OpenKey( REGPATH + REGKEY_SESSIONS + Mainform.Childwin.Description, true ); reg.WriteString( reg_name, Mainform.Childwin.ComposeOrderClause(OrderColumns) ); reg.CloseKey; FreeAndNil(reg); diff --git a/source/exportsql.pas b/source/exportsql.pas index 58a3b1bc..b87c4f32 100644 --- a/source/exportsql.pas +++ b/source/exportsql.pas @@ -240,54 +240,49 @@ begin end; // Read options - with TRegistry.Create do - if OpenKey(REGPATH, true) then begin - // WithUseDB, UseBackticks, CompleteInserts: deprecated (hardcoded true now) - if Valueexists('ExportStructure') then cbxStructure.Checked := ReadBool('ExportStructure'); - if Valueexists('WithCreateDatabase') then cbxDatabase.Checked := ReadBool('WithCreateDatabase'); - if Valueexists('WithCreateTable') then cbxTables.Checked := ReadBool('WithCreateTable'); - if Valueexists('ExportData') then cbxData.Checked := ReadBool('ExportData'); - if Valueexists('CreateDatabaseHow') then comboDatabase.ItemIndex := ReadInteger('CreateDatabaseHow'); - if Valueexists('CreateTablesHow') then comboTables.ItemIndex := ReadInteger('CreateTablesHow') - else if Valueexists('WithDropTable') and ReadBool('WithDropTable') then comboTables.ItemIndex := TAB_DROP_CREATE; - if Valueexists('CreateDataHow') then comboData.ItemIndex := ReadInteger('CreateDataHow'); - if Valueexists('Compatibility') then comboTargetCompat.ItemIndex := ReadInteger('Compatibility'); - if Valueexists('exportfilename') then editFileName.Text := ReadString('exportfilename'); - if Valueexists('ExportDirectory') then editDirectory.Text := ReadString('ExportDirectory'); - if Valueexists('ExportSQL_OutputTo') then - begin - OutputTo := ReadInteger('ExportSQL_OutputTo'); + // WithUseDB, UseBackticks, CompleteInserts: deprecated (hardcoded true now) + cbxStructure.Checked := Mainform.GetRegValue(REGNAME_EXP_STRUCTURE, cbxStructure.Checked); + cbxDatabase.Checked := Mainform.GetRegValue(REGNAME_EXP_CREATEDB, cbxDatabase.Checked); + cbxTables.Checked := Mainform.GetRegValue(REGNAME_EXP_CREATETABLE, cbxTables.Checked); + cbxData.Checked := Mainform.GetRegValue(REGNAME_EXP_DATA, cbxData.Checked); + comboDatabase.ItemIndex := Mainform.GetRegValue(REGNAME_EXP_DBHOW, comboDatabase.ItemIndex); + comboTables.ItemIndex := Mainform.GetRegValue(REGNAME_EXP_TABLESHOW, comboTables.ItemIndex); + comboData.ItemIndex := Mainform.GetRegValue(REGNAME_EXP_DATAHOW, comboData.ItemIndex); + comboTargetCompat.ItemIndex := Mainform.GetRegValue(REGNAME_EXP_COMPAT, comboTargetCompat.ItemIndex); + editFileName.Text := Mainform.GetRegValue(REGNAME_EXP_OUTFILE, ''); + editDirectory.Text := Mainform.GetRegValue(REGNAME_EXP_OUTDIR, ''); + OutputTo := Mainform.GetRegValue(REGNAME_EXP_TARGET, -1); + if OutputTo > -1 then + begin - {*** - @note ansgarbecker, 2007-02-24 - If OutputTo is now OUTPUT_HOST and there are no other windows - to export to, reset OutputTo to OUTPUT_FILE to avoid the error-popup - "You need at least 2 windows...", which should not be fired in - FormShow rather than only when the user has really clicked that - radiobutton. - As a benefit, the OUTPUT_FILE won't be saved to registry here - so the OUTPUT_HOST is still enabled in registry and will be used - the next time if we have more than 1 window - @see bug #1666054 - } - // Check if all the heidisql windows are still alive. - CheckForCrashedWindows; - // Fetch list of heidisql windows. - list := GetWindowList; - if (Length(list) < 2) and (OutputTo = OUTPUT_HOST) then - OutputTo := OUTPUT_FILE; + {*** + @note ansgarbecker, 2007-02-24 + If OutputTo is now OUTPUT_HOST and there are no other windows + to export to, reset OutputTo to OUTPUT_FILE to avoid the error-popup + "You need at least 2 windows...", which should not be fired in + FormShow rather than only when the user has really clicked that + radiobutton. + As a benefit, the OUTPUT_FILE won't be saved to registry here + so the OUTPUT_HOST is still enabled in registry and will be used + the next time if we have more than 1 window + @see bug #1666054 + } + // Check if all the heidisql windows are still alive. + CheckForCrashedWindows; + // Fetch list of heidisql windows. + list := GetWindowList; + if (Length(list) < 2) and (OutputTo = OUTPUT_HOST) then + OutputTo := OUTPUT_FILE; - case OutputTo of - OUTPUT_FILE : radioFile.Checked := true; - OUTPUT_DIR : radioDirectory.Checked := true; - OUTPUT_DB : radioOtherDatabase.Checked := true; - OUTPUT_HOST : radioOtherHost.Checked := true; - end; + case OutputTo of + OUTPUT_FILE : radioFile.Checked := true; + OUTPUT_DIR : radioDirectory.Checked := true; + OUTPUT_DB : radioOtherDatabase.Checked := true; + OUTPUT_HOST : radioOtherHost.Checked := true; end; - if ValueExists('ExportSQL_WindowWidth') then Width := ReadInteger('ExportSQL_WindowWidth'); - if ValueExists('ExportSQL_WindowHeight') then Height := ReadInteger('ExportSQL_WindowHeight'); - Free; end; + Width := Mainform.GetRegValue(REGNAME_EXP_WINWIDTH, Width); + Height := Mainform.GetRegValue(REGNAME_EXP_WINHEIGHT, Height); if EditFileName.Text = '' then EditFileName.Text := ExtractFilePath(paramstr(0)) + 'export.sql'; @@ -1524,16 +1519,16 @@ begin begin OpenKey(REGPATH, true); // WithUseDB, UseBackticks, CompleteInserts, WithDropTable: deprecated (currently not automagically removed) - WriteBool('ExportStructure', cbxStructure.Checked); - WriteBool('WithCreateDatabase', cbxDatabase.Checked); - WriteBool('WithCreateTable', cbxTables.Checked); - WriteBool('ExportData', cbxData.Checked); - WriteInteger('CreateDatabaseHow', comboDatabase.ItemIndex); - WriteInteger('CreateTablesHow', comboTables.ItemIndex); - WriteInteger('CreateDataHow', comboData.ItemIndex); - WriteInteger('Compatibility', comboTargetCompat.ItemIndex); - WriteString('exportfilename', EditFileName.Text); - WriteString('ExportDirectory', EditDirectory.Text); + WriteBool(REGNAME_EXP_STRUCTURE, cbxStructure.Checked); + WriteBool(REGNAME_EXP_CREATEDB, cbxDatabase.Checked); + WriteBool(REGNAME_EXP_CREATETABLE, cbxTables.Checked); + WriteBool(REGNAME_EXP_DATA, cbxData.Checked); + WriteInteger(REGNAME_EXP_DBHOW, comboDatabase.ItemIndex); + WriteInteger(REGNAME_EXP_TABLESHOW, comboTables.ItemIndex); + WriteInteger(REGNAME_EXP_DATAHOW, comboData.ItemIndex); + WriteInteger(REGNAME_EXP_COMPAT, comboTargetCompat.ItemIndex); + WriteString(REGNAME_EXP_OUTFILE, EditFileName.Text); + WriteString(REGNAME_EXP_OUTDIR, EditDirectory.Text); OutputTo := OUTPUT_FILE; if radioDirectory.checked then OutputTo := OUTPUT_DIR @@ -1541,9 +1536,9 @@ begin OutputTo := OUTPUT_DB else if radioOtherHost.checked then OutputTo := OUTPUT_HOST; - WriteInteger('ExportSQL_OutputTo', OutputTo ); - WriteInteger('ExportSQL_WindowWidth', Width ); - WriteInteger('ExportSQL_WindowHeight', Height ); + WriteInteger(REGNAME_EXP_TARGET, OutputTo ); + WriteInteger(REGNAME_EXP_WINWIDTH, Width ); + WriteInteger(REGNAME_EXP_WINHEIGHT, Height ); CloseKey(); Free; end; diff --git a/source/loaddata.pas b/source/loaddata.pas index 3cec8f08..9a0ebe81 100644 --- a/source/loaddata.pas +++ b/source/loaddata.pas @@ -101,7 +101,6 @@ procedure Tloaddataform.FormShow(Sender: TObject); var tn : TTreeNode; i : Integer; - reg : TRegistry; begin // read dbs and Tables from treeview comboDatabase.Items.Clear; @@ -124,29 +123,19 @@ begin comboDatabase.ItemIndex := 0; comboDatabaseChange(self); - reg := TRegistry.Create; - if reg.OpenKey(REGPATH, true) then - begin - // filename - editFilename.Text := reg.ReadString('loadfilename'); - // Use options from CSV export - editFieldTerminator.Text := reg.ReadString('CSVSeparator'); - editFieldEncloser.Text := reg.ReadString('CSVEncloser'); - editLineTerminator.Text := reg.ReadString('CSVTerminator'); - // Other options - if reg.ValueExists('CSVImportFieldsEnclosedOptionally') then - chkFieldsEnclosedOptionally.Checked := reg.ReadBool('CSVImportFieldsEnclosedOptionally'); - editFieldEscaper.Text := reg.ReadString('CSVImportFieldEscaper'); - if reg.ValueExists('CSVImportIgnoreLines') then - updownIgnoreLines.Position := reg.ReadInteger('CSVImportIgnoreLines'); - if reg.ValueExists('CSVImportLowPriority') then - chkLowPriority.Checked := reg.ReadBool('CSVImportLowPriority'); - if reg.ValueExists('CSVImportReplace') then - chkReplace.Checked := reg.ReadBool('CSVImportReplace'); - if reg.ValueExists('CSVImportIgnore') then - chkIgnore.Checked := reg.ReadBool('CSVImportIgnore'); - end; - FreeAndNil(reg); + // filename + editFilename.Text := Mainform.GetRegValue(REGNAME_CSV_FILENAME, ''); + // Use options from CSV export + editFieldTerminator.Text := Mainform.GetRegValue(REGNAME_CSV_SEPARATOR, DEFAULT_CSV_SEPARATOR); + editFieldEncloser.Text := Mainform.GetRegValue(REGNAME_CSV_ENCLOSER, DEFAULT_CSV_ENCLOSER); + editLineTerminator.Text := Mainform.GetRegValue(REGNAME_CSV_TERMINATOR, DEFAULT_CSV_TERMINATOR); + // Other options + chkFieldsEnclosedOptionally.Checked := Mainform.GetRegValue(REGNAME_CSV_ENCLOPTION, chkFieldsEnclosedOptionally.Checked); + editFieldEscaper.Text := Mainform.GetRegValue(REGNAME_CSV_ESCAPER, editFieldEscaper.Text); + updownIgnoreLines.Position := Mainform.GetRegValue(REGNAME_CSV_IGNORELINES, updownIgnoreLines.Position); + chkLowPriority.Checked := Mainform.GetRegValue(REGNAME_CSV_LOWPRIO, chkLowPriority.Checked); + chkReplace.Checked := Mainform.GetRegValue(REGNAME_CSV_REPLACE, chkReplace.Checked); + chkIgnore.Checked := Mainform.GetRegValue(REGNAME_CSV_IGNORE, chkIgnore.Checked); end; @@ -219,18 +208,18 @@ begin if reg.OpenKey(REGPATH, true) then begin // filename - reg.WriteString( 'loadfilename', editFilename.Text ); + reg.WriteString( REGNAME_CSV_FILENAME, editFilename.Text ); // Use options from CSV export - reg.WriteString( 'CSVSeparator', editFieldTerminator.Text ); - reg.WriteString( 'CSVEncloser', editFieldEncloser.Text ); - reg.WriteString( 'CSVTerminator', editLineTerminator.Text ); + reg.WriteString( REGNAME_CSV_SEPARATOR, editFieldTerminator.Text ); + reg.WriteString( REGNAME_CSV_ENCLOSER, editFieldEncloser.Text ); + reg.WriteString( REGNAME_CSV_TERMINATOR, editLineTerminator.Text ); // Other options - reg.WriteBool( 'CSVImportFieldsEnclosedOptionally', chkFieldsEnclosedOptionally.Checked ); - reg.WriteString( 'CSVImportFieldEscaper', editFieldEscaper.Text ); - reg.WriteInteger( 'CSVImportIgnoreLines', updownIgnoreLines.Position ); - reg.WriteBool( 'CSVImportLowPriority', chkLowPriority.Checked ); - reg.WriteBool( 'CSVImportReplace', chkReplace.Checked ); - reg.WriteBool( 'CSVImportIgnore', chkIgnore.Checked ); + reg.WriteBool( REGNAME_CSV_ENCLOPTION, chkFieldsEnclosedOptionally.Checked ); + reg.WriteString( REGNAME_CSV_ESCAPER, editFieldEscaper.Text ); + reg.WriteInteger( REGNAME_CSV_IGNORELINES, updownIgnoreLines.Position ); + reg.WriteBool( REGNAME_CSV_LOWPRIO, chkLowPriority.Checked ); + reg.WriteBool( REGNAME_CSV_REPLACE, chkReplace.Checked ); + reg.WriteBool( REGNAME_CSV_IGNORE, chkIgnore.Checked ); end; FreeAndNil(reg); diff --git a/source/main.pas b/source/main.pas index 01e44a22..a5ed5128 100644 --- a/source/main.pas +++ b/source/main.pas @@ -199,14 +199,15 @@ type procedure HandleWMProcessLog(var msg: TMessage); message WM_PROCESSLOG; procedure HandleWMClearRightClickPointer(var msg: TMessage); message WM_CLEAR_RIGHTCLICK_POINTER; private + regMain : TRegistry; function GetChildwin: TMDIChild; function GetParamValue(const paramChar: Char; const paramName: string; var curIdx: Byte; out paramValue: string): Boolean; public - function GetRegValue( valueName: String; defaultValue: Integer; key: String = '' ) : Integer; Overload; - function GetRegValue( valueName: String; defaultValue: Boolean; key: String = '' ) : Boolean; Overload; - procedure SaveRegValue( valueName: String; value: Integer; key: String = '' ); Overload; - procedure SaveRegValue( valueName: String; value: Boolean; key: String = '' ); Overload; + procedure OpenRegistry(Session: String = ''); + function GetRegValue( valueName: String; defaultValue: Integer; Session: String = '' ) : Integer; Overload; + function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean; Overload; + function GetRegValue( valueName: String; defaultValue: String; Session: String = '' ) : String; Overload; function CreateMDIChild(parHost, parPort, parUser, parPass, parDatabase, parTimeout, parCompress, parSortDatabases, parDescription: String): Boolean; // Reference to currently active childwindow: @@ -382,16 +383,16 @@ begin begin if OpenKey(REGPATH, true) then begin - WriteString('windowstate', ws); - WriteInteger('windowleft', left); - WriteInteger('windowtop', top); - WriteInteger('windowwidth', width); - WriteInteger('windowheight', height); + WriteString(REGNAME_WINDOWSTATE, ws); + WriteInteger(REGNAME_WINDOWLEFT, left); + WriteInteger(REGNAME_WINDOWTOP, top); + WriteInteger(REGNAME_WINDOWWIDTH, width); + WriteInteger(REGNAME_WINDOWHEIGHT, height); // Position of Toolbars - WriteInteger('ToolBar2Left', ToolBarStandard.Left); - WriteInteger('ToolBarDataLeft', ToolBarData.Left); - WriteInteger('ToolBar2Top', ToolBarStandard.Top); - WriteInteger('ToolBarDataTop', ToolBarData.Top); + WriteInteger(REGNAME_TOOLBAR2LEFT, ToolBarStandard.Left); + WriteInteger(REGNAME_TOOLBARDATALEFT, ToolBarData.Left); + WriteInteger(REGNAME_TOOLBAR2TOP, ToolBarStandard.Top); + WriteInteger(REGNAME_TOOLBARDATATOP, ToolBarData.Top); end; CloseKey; Free; @@ -407,6 +408,10 @@ begin deletefile(filename+'gif'); if FileExists(filename+'bmp') then deletefile(filename+'bmp'); + if regMain <> nil then begin + regMain.CloseKey; + regMain.Free; + end; end; @@ -424,36 +429,24 @@ begin caption := APPNAME; setLocales; - with TRegistry.Create do - begin - if OpenKey(REGPATH, true) then - begin - ws := ReadString('windowstate'); - if ws = 'Minimized' - then windowstate := wsMinimized else - if ws = 'Normal' then begin - windowstate := wsNormal; - left := ReadInteger('windowleft'); - top := ReadInteger('windowtop'); - width := ReadInteger('windowwidth'); - height := ReadInteger('windowheight'); - end else - if ws = 'Maximized' - then windowstate := wsMaximized; + ws := GetRegValue('windowstate', 'Normal'); + if ws = 'Minimized' + then windowstate := wsMinimized else + if ws = 'Normal' then begin + windowstate := wsNormal; + Left := GetRegValue(REGNAME_WINDOWLEFT, Left); + Top := GetRegValue(REGNAME_WINDOWTOP, Top); + Width := GetRegValue(REGNAME_WINDOWWIDTH, Width); + Height := GetRegValue(REGNAME_WINDOWHEIGHT, Height); + end else + if ws = 'Maximized' + then windowstate := wsMaximized; - // Position of Toolbars - if valueExists('ToolBar2Left') then - ToolBarStandard.Left := ReadInteger('ToolBar2Left'); - if valueExists('ToolBarDataLeft') then - ToolBarData.Left := ReadInteger('ToolBarDataLeft'); - if valueExists('ToolBar2Top') then - ToolBarStandard.Top := ReadInteger('ToolBar2Top'); - if valueExists('ToolBarDataTop') then - ToolBarData.Top := ReadInteger('ToolBarDataTop'); - end; - CloseKey; - Free; - end; + // Position of Toolbars + ToolBarStandard.Left := GetRegValue(REGNAME_TOOLBAR2LEFT, ToolBarStandard.Left); + ToolBarData.Left := GetRegValue(REGNAME_TOOLBARDATALEFT, ToolBarData.Left); + ToolBarStandard.Top := GetRegValue(REGNAME_TOOLBAR2TOP, ToolBarStandard.Top); + ToolBarData.Top := GetRegValue(REGNAME_TOOLBARDATATOP, ToolBarData.Top); // Beautify appversion if Pos('$Rev: WC', appversion) < 1 then begin @@ -538,16 +531,16 @@ begin begin // Save session parameters to registry reg := TRegistry.Create; - if reg.OpenKey(REGPATH + '\Servers\' + parDescription, true) then + if reg.OpenKey(REGPATH + REGKEY_SESSIONS + parDescription, true) then begin - reg.WriteString('Host', parHost); - reg.WriteString('User', parUser); - reg.WriteString('Password', encrypt(parPass)); - reg.WriteString('Port', parPort); - reg.WriteString('Timeout', parTimeout); - reg.WriteBool('Compressed', Boolean(StrToIntDef(parCompress, 0)) ); - reg.WriteString('OnlyDBs', parDatabase); - reg.WriteBool('OnlyDBsSorted', Boolean(StrToIntDef(parSortDatabases, 0)) ); + reg.WriteString(REGNAME_HOST, parHost); + reg.WriteString(REGNAME_USER, parUser); + reg.WriteString(REGNAME_PASSWORD, encrypt(parPass)); + reg.WriteString(REGNAME_PORT, parPort); + reg.WriteString(REGNAME_TIMEOUT, parTimeout); + reg.WriteBool(REGNAME_COMPRESSED, Boolean(StrToIntDef(parCompress, 0)) ); + reg.WriteString(REGNAME_ONLYDBS, parDatabase); + reg.WriteBool(REGNAME_ONLYDBSSORTED, Boolean(StrToIntDef(parSortDatabases, 0)) ); reg.CloseKey; reg.Free; end; @@ -616,14 +609,14 @@ begin Access := KEY_ALL_ACCESS; if OpenKey(REGPATH, false) then begin - DeleteValue('childwinstate'); - DeleteValue('childwinleft'); - DeleteValue('childwintop'); - DeleteValue('childwinwidth'); - DeleteValue('childwinheight'); - DeleteValue('querymemoheight'); - DeleteValue('dbtreewidth'); - DeleteValue('sqloutheight'); + DeleteValue(REGNAME_CHILDWINSTATE); + DeleteValue(REGNAME_CHILDWINLEFT); + DeleteValue(REGNAME_CHILDWINTOP); + DeleteValue(REGNAME_CHILDWINWIDTH); + DeleteValue(REGNAME_CHILDWINHEIGHT); + DeleteValue(REGNAME_QUERYMEMOHEIGHT); + DeleteValue(REGNAME_DBTREEWIDTH); + DeleteValue(REGNAME_SQLOUTHEIGHT); CloseKey; MessageDlg('All Window-Settings were reset to default values.', mtInformation, [mbok], 0); @@ -874,7 +867,7 @@ procedure TMainForm.ExportSettings1Click(Sender: TObject); begin // Export settings to .reg-file if SaveDialog2.Execute then begin - if winexec(pchar('regedit.exe /e "'+SaveDialog2.FileName+'" HKEY_CURRENT_USER\'+REGPATH), SW_SHOW) = ERROR_FILE_NOT_FOUND then + if winexec(pchar('regedit.exe /e "'+SaveDialog2.FileName+'" HKEY_CURRENT_USER'+REGPATH), SW_SHOW) = ERROR_FILE_NOT_FOUND then MessageDlg('File not found: regedit.exe', mtError, [mbOK], 0); end; end; @@ -958,10 +951,10 @@ begin with TRegistry.Create do begin openkey(REGPATH, true); - WriteBool('ConvertHTMLEntities', ConvertHTMLSpecialChars); - WriteString('CSVSeparator', FieldSep); - WriteString('CSVEncloser', FieldEncl); - WriteString('CSVTerminator', LineSep); + WriteBool(REGNAME_CONVERTHTMLENTITIES, ConvertHTMLSpecialChars); + WriteString(REGNAME_CSV_SEPARATOR, FieldSep); + WriteString(REGNAME_CSV_ENCLOSER, FieldEncl); + WriteString(REGNAME_CSV_TERMINATOR, LineSep); closekey(); Free; end; @@ -1098,112 +1091,62 @@ begin end; -function TMainForm.GetRegValue( valueName: String; defaultValue: Integer; key: String = '' ) : Integer; +{** + Init main registry object and open desired key + Outsoureced from GetRegValue() to avoid redundant code + in these 3 overloaded methods. +} +procedure TMainForm.OpenRegistry(Session: String = ''); var - reg : TRegistry; folder : String; begin - result := defaultValue; - reg := TRegistry.Create; + if regMain = nil then + regMain := TRegistry.Create; folder := REGPATH; - if key <> '' then - folder := folder + '\' + key; - try - if reg.OpenKey(folder, false) then - begin - if reg.ValueExists( valueName ) then - result := reg.ReadInteger( valueName ); - reg.CloseKey; - end; - finally - reg.Free; - end; + if Session <> '' then + folder := folder + REGKEY_SESSIONS + Session; + if regMain.CurrentPath <> folder then + regMain.OpenKey(folder, false); end; +{** + Read a numeric preference value from registry +} +function TMainForm.GetRegValue( valueName: String; defaultValue: Integer; Session: String = '' ) : Integer; +begin + result := defaultValue; + OpenRegistry(Session); + if regMain.ValueExists( valueName ) then + result := regMain.ReadInteger( valueName ); +end; + {*** - Safely read a given valueName from the registry default-folder REGPATH + Read a boolean preference value from registry @param string Name of the value @param boolean Default-value to return if valueName was not found @param string Subkey of REGPATH where to search for the value } -function TMainForm.GetRegValue( valueName: String; defaultValue: Boolean; key: String = '' ) : Boolean; -var - reg : TRegistry; - folder : String; +function TMainForm.GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean; begin result := defaultValue; - reg := TRegistry.Create; - folder := REGPATH; - if key <> '' then - folder := folder + '\' + key; - try - if reg.OpenKey(folder, false) then - begin - if reg.ValueExists( valueName ) then - result := reg.ReadBool( valueName ); - reg.CloseKey; - end; - finally - reg.Free; - end; + OpenRegistry(Session); + if regMain.ValueExists( valueName ) then + result := regMain.ReadBool( valueName ); end; {*** - Saves a number-value into the predefined folder REGPATH - @param string Name for the value - @param integer Value-number - @param string Subkey of REGPATH where to store the value + Read a text preference value from registry } -procedure TMainForm.SaveRegValue( valueName: String; value: Integer; key: String = '' ); -var - reg : TRegistry; - folder : String; +function TMainForm.GetRegValue( valueName: String; defaultValue: String; Session: String = '' ) : String; begin - reg := TRegistry.Create; - folder := REGPATH; - if key <> '' then - folder := folder + '\' + key; - try - if reg.OpenKey(folder, false) then - begin - reg.WriteInteger( valueName, value ); - reg.CloseKey; - end; - finally - reg.Free; - end; -end; - - - -{*** - Saves a boolean-value into the predefined folder REGPATH - @param string Name for the value - @param boolean Value - @param string Subkey of REGPATH where to store the value -} -procedure TMainForm.SaveRegValue( valueName: String; value: Boolean; key: String = '' ); -var - reg : TRegistry; - folder : String; -begin - reg := TRegistry.Create; - folder := REGPATH; - if key <> '' then - folder := folder + '\' + key; - try - if reg.OpenKey(folder, false) then - begin - reg.WriteBool( valueName, value ); - reg.CloseKey; - end; - finally - reg.Free; - end; + result := defaultValue; + OpenRegistry(Session); + if regMain.ValueExists( valueName ) then + result := regMain.ReadString( valueName ); end; diff --git a/source/options.pas b/source/options.pas index 404ff59a..fb7ee727 100644 --- a/source/options.pas +++ b/source/options.pas @@ -112,13 +112,6 @@ type function OptionsWindow (AOwner : TComponent; Flags : String = '') : Boolean; -var - fontname : String = 'Courier New'; - fontsize : Integer = 9; - datafontname : String = 'MS SANS SERIF'; - datafontcharset : String = ''; - datafontsize : Integer = 8; - AutoReconnect : Boolean = false; implementation uses childwin, main, helpers; @@ -163,31 +156,31 @@ begin reg.OpenKey(REGPATH, true); // Save values - reg.WriteBool('AutoReconnect', CheckBoxAutoReconnect.Checked); - reg.WriteBool('ConvertHTMLEntities', CheckBoxConvertHTMLEntities.Checked); - reg.WriteBool('RestoreLastUsedDB', CheckBoxRestoreLastUsedDB.Checked); - reg.WriteString('FontName', ComboBoxFonts.Text); - reg.WriteInteger('FontSize', UpDownFontSize.Position); - reg.WriteInteger('logsqlnum', updownLogSQLNum.Position); - reg.WriteInteger('logsqlwidth', updownLogSnip.Position); - reg.WriteString('SQLColKeyAttri', colortostring(pnlKeywords.Color)); - reg.WriteString('SQLColFunctionAttri', colortostring(pnlFunctions.Color)); - reg.WriteString('SQLColDataTypeAttri', colortostring(pnlDatatypes.Color)); - reg.WriteString('SQLColNumberAttri', colortostring(pnlNumeric.Color)); - reg.WriteString('SQLColStringAttri', colortostring(pnlString.Color)); - reg.WriteString('SQLColCommentAttri', colortostring(pnlComments.Color)); - reg.WriteString('SQLColTablenameAttri', colortostring(pnlTablenames.Color)); - reg.WriteString('SQLColActiveLine', ColorToString(pnlActiveLine.Color)); - reg.WriteString('CSVSeparator', Edit1.Text); - reg.WriteString('CSVEncloser', Edit2.Text); - reg.WriteString('CSVTerminator', Edit3.Text); - reg.WriteInteger('DefaultColWidth', updownDefaultColWidth.Position); - reg.WriteBool('DataLimit', CheckBoxLimit.Checked); - reg.WriteInteger('DataLimitEnd', UpDownLimit.Position); - reg.WriteString('DataFontName', Panel8.Font.Name); - reg.WriteInteger('DataFontSize', UpDownDataFontSize.Position); - reg.WriteBool('RememberFilters', chkRememberFilters.Checked); - reg.WriteBool('LogToFile', chkLogToFile.Checked); + reg.WriteBool(REGNAME_AUTORECONNECT, CheckBoxAutoReconnect.Checked); + reg.WriteBool(REGNAME_CONVERTHTMLENTITIES, CheckBoxConvertHTMLEntities.Checked); + reg.WriteBool(REGNAME_RESTORELASTUSEDDB, CheckBoxRestoreLastUsedDB.Checked); + reg.WriteString(REGNAME_FONTNAME, ComboBoxFonts.Text); + reg.WriteInteger(REGNAME_FONTSIZE, UpDownFontSize.Position); + reg.WriteInteger(REGNAME_LOGSQLNUM, updownLogSQLNum.Position); + reg.WriteInteger(REGNAME_LOGSQLWIDTH, updownLogSnip.Position); + reg.WriteString(REGNAME_SQLCOLKEYATTRI, colortostring(pnlKeywords.Color)); + reg.WriteString(REGNAME_SQLCOLFUNCTIONATTRI, colortostring(pnlFunctions.Color)); + reg.WriteString(REGNAME_SQLCOLDATATYPEATTRI, colortostring(pnlDatatypes.Color)); + reg.WriteString(REGNAME_SQLCOLNUMBERATTRI, colortostring(pnlNumeric.Color)); + reg.WriteString(REGNAME_SQLCOLSTRINGATTRI, colortostring(pnlString.Color)); + reg.WriteString(REGNAME_SQLCOLCOMMENTATTRI, colortostring(pnlComments.Color)); + reg.WriteString(REGNAME_SQLCOLTABLENAMEATTRI, colortostring(pnlTablenames.Color)); + reg.WriteString(REGNAME_SQLCOLACTIVELINE, ColorToString(pnlActiveLine.Color)); + reg.WriteString(REGNAME_CSV_SEPARATOR, Edit1.Text); + reg.WriteString(REGNAME_CSV_ENCLOSER, Edit2.Text); + reg.WriteString(REGNAME_CSV_TERMINATOR, Edit3.Text); + reg.WriteInteger(REGNAME_DEFAULTCOLWIDTH, updownDefaultColWidth.Position); + reg.WriteBool(REGNAME_DATALIMIT, CheckBoxLimit.Checked); + reg.WriteInteger(REGNAME_DATALIMITEND, UpDownLimit.Position); + reg.WriteString(REGNAME_DATAFONTNAME, Panel8.Font.Name); + reg.WriteInteger(REGNAME_DATAFONTSIZE, UpDownDataFontSize.Position); + reg.WriteBool(REGNAME_REMEMBERFILTERS, chkRememberFilters.Checked); + reg.WriteBool(REGNAME_LOGTOFILE, chkLogToFile.Checked); // Close registry key reg.CloseKey; @@ -255,107 +248,47 @@ begin end; var - reg : TRegistry; + fontname : String; + fontsize : Integer; + datafontname : String; + datafontsize : Integer; begin screen.Cursor := crHourGlass; - // Open registry key - reg := TRegistry.Create; - reg.OpenKey(REGPATH, true); - // Read and display values - if reg.ValueExists('FontName') then - fontname := reg.ReadString('FontName'); - if reg.ValueExists('FontSize') then - fontsize := reg.ReadInteger('FontSize'); - if reg.ValueExists('DataFontName') then - datafontname := reg.ReadString('DataFontName'); - if reg.ValueExists('DataFontCharset') then - datafontcharset := reg.ReadString('DataFontCharset'); - if reg.ValueExists('DataFontSize') then - datafontsize := reg.ReadInteger('DataFontSize'); - if reg.ValueExists('AutoReconnect') then - AutoReconnect := reg.ReadBool('AutoReconnect'); - if reg.ValueExists('ConvertHTMLEntities') then - CheckBoxConvertHTMLEntities.Checked := reg.ReadBool('ConvertHTMLEntities'); - if reg.ValueExists('RestoreLastUsedDB') then - CheckBoxRestoreLastUsedDB.Checked := reg.ReadBool('RestoreLastUsedDB'); - if reg.ValueExists('DataLimit') then - CheckBoxLimit.Checked := reg.ReadBool('DataLimit'); - if reg.ValueExists('DataLimitEnd') then - UpDownLimit.Position := reg.ReadInteger('DataLimitEnd'); + fontname := Mainform.GetRegValue(REGNAME_FONTNAME, DEFAULT_FONTNAME); + fontsize := Mainform.GetRegValue(REGNAME_FONTSIZE, DEFAULT_FONTSIZE); + datafontname := Mainform.GetRegValue(REGNAME_DATAFONTNAME, DEFAULT_DATAFONTNAME); + datafontsize := Mainform.GetRegValue(REGNAME_DATAFONTSIZE, DEFAULT_DATAFONTSIZE); + CheckBoxAutoReconnect.Checked := Mainform.GetRegValue(REGNAME_AUTORECONNECT, DEFAULT_AUTORECONNECT); + CheckBoxConvertHTMLEntities.Checked := Mainform.GetRegValue(REGNAME_CONVERTHTMLENTITIES, DEFAULT_CONVERTHTMLENTITIES); + CheckBoxRestoreLastUsedDB.Checked := Mainform.GetRegValue(REGNAME_RESTORELASTUSEDDB, DEFAULT_RESTORELASTUSEDDB); + CheckBoxLimit.Checked := Mainform.GetRegValue(REGNAME_DATALIMIT, DEFAULT_DATALIMIT); + UpDownLimit.Position := Mainform.GetRegValue(REGNAME_DATALIMITEND, DEFAULT_DATALIMITEND); CheckBoxLimit.OnClick(self); - if reg.ValueExists('logsqlnum') then - updownLogSQLNum.Position := reg.ReadInteger('logsqlnum'); - if reg.ValueExists('logsqlwidth') then - updownLogSnip.Position := reg.ReadInteger('logsqlwidth'); + updownLogSQLNum.Position := Mainform.GetRegValue(REGNAME_LOGSQLNUM, DEFAULT_LOGSQLNUM); + updownLogSnip.Position := Mainform.GetRegValue(REGNAME_LOGSQLWIDTH, DEFAULT_LOGSQLWIDTH); // Default Column-Width in DBGrids: - if reg.ValueExists('DefaultColWidth') then - updownDefaultColWidth.Position := reg.ReadInteger('DefaultColWidth'); - + updownDefaultColWidth.Position := Mainform.GetRegValue(REGNAME_DEFAULTCOLWIDTH, DEFAULT_DEFAULTCOLWIDTH); // Color-coding: - if reg.ValueExists('SQLColKeyAttri') then - pnlKeywords.Color := StringToColor(reg.readstring('SQLColKeyAttri')) - else - pnlKeywords.Color := clBlue; - if reg.ValueExists('SQLColFunctionAttri') then - pnlFunctions.Color := StringToColor(reg.readstring('SQLColFunctionAttri')) - else - pnlFunctions.Color := clNavy; - if reg.ValueExists('SQLColDataTypeAttri') then - pnlDatatypes.Color := StringToColor(reg.readstring('SQLColDataTypeAttri')) - else - pnlDatatypes.Color := clMaroon; - if reg.ValueExists('SQLColNumberAttri') then - pnlNumeric.Color := StringToColor(reg.readstring('SQLColNumberAttri')) - else - pnlNumeric.Color := clPurple; - if reg.ValueExists('SQLColStringAttri') then - pnlString.Color := StringToColor(reg.readstring('SQLColStringAttri')) - else - pnlString.Color := clGreen; - if reg.ValueExists('SQLColCommentAttri') then - pnlComments.Color := StringToColor(reg.readstring('SQLColCommentAttri')) - else - pnlComments.Color := clGray; - if reg.ValueExists('SQLColTablenameAttri') then - pnlTablenames.Color := StringToColor(reg.readstring('SQLColTablenameAttri')) - else - pnlTablenames.Color := clFuchsia; - if reg.ValueExists('SQLColActiveLine') then - pnlActiveLine.Color := StringToColor(reg.readstring('SQLColActiveLine')) - else - pnlActiveLine.Color := clWindow; - - - Edit1.Text := ','; - Edit2.Text := ''; - Edit3.Text := '\r\n'; - + pnlKeywords.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLKEYATTRI, ColorToString(DEFAULT_SQLCOLKEYATTRI))); + pnlFunctions.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLFUNCTIONATTRI, ColorToString(DEFAULT_SQLCOLFUNCTIONATTRI))); + pnlDatatypes.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLDATATYPEATTRI, ColorToString(DEFAULT_SQLCOLDATATYPEATTRI))); + pnlNumeric.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLNUMBERATTRI, ColorToString(DEFAULT_SQLCOLNUMBERATTRI))); + pnlString.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLSTRINGATTRI, ColorToString(DEFAULT_SQLCOLSTRINGATTRI))); + pnlComments.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLCOMMENTATTRI, ColorToString(DEFAULT_SQLCOLCOMMENTATTRI))); + pnlTablenames.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLTABLENAMEATTRI, ColorToString(DEFAULT_SQLCOLTABLENAMEATTRI))); + pnlActiveLine.Color := StringToColor(Mainform.GetRegValue(REGNAME_SQLCOLACTIVELINE, ColorToString(DEFAULT_SQLCOLACTIVELINE))); // CSV-Options: - if reg.ValueExists('CSVSeparator') then - Edit1.Text := reg.ReadString('CSVSeparator'); - if reg.ValueExists('CSVEncloser') then - Edit2.Text := reg.ReadString('CSVEncloser'); - if reg.ValueExists('CSVTerminator') then - Edit3.Text := reg.ReadString('CSVTerminator'); - + Edit1.Text := Mainform.GetRegValue(REGNAME_CSV_SEPARATOR, DEFAULT_CSV_SEPARATOR); + Edit2.Text := Mainform.GetRegValue(REGNAME_CSV_ENCLOSER, DEFAULT_CSV_ENCLOSER); + Edit3.Text := Mainform.GetRegValue(REGNAME_CSV_TERMINATOR, DEFAULT_CSV_TERMINATOR); // Remember data pane filters across sessions - if reg.ValueExists('RememberFilters') then - chkRememberFilters.Checked := reg.ReadBool('RememberFilters'); - + chkRememberFilters.Checked := Mainform.GetRegValue(REGNAME_REMEMBERFILTERS, DEFAULT_REMEMBERFILTERS); // Log to file - if reg.ValueExists('LogToFile') then - chkLogToFile.Checked := reg.ReadBool('LogToFile'); + chkLogToFile.Checked := Mainform.GetRegValue(REGNAME_LOGTOFILE, DEFAULT_LOGTOFILE); btnOpenLogFolder.Enabled := DirectoryExists(DirnameSessionLogs); - // Close registry key - reg.CloseKey; - reg.Free; - - // Miscellaneous: - CheckBoxAutoReconnect.Checked := AutoReconnect; - // SQL-Appearance: EnumFontFamilies(Canvas.Handle, // HDC of Device-Context. nil, // Name of Font-Family (PChar) diff --git a/source/sqlhelp.pas b/source/sqlhelp.pas index edf12b08..50627e42 100644 --- a/source/sqlhelp.pas +++ b/source/sqlhelp.pas @@ -87,12 +87,12 @@ begin m := Mainform.Childwin; // Set window-layout - Top := Mainform.GetRegValue( 'SQLHelp_WindowTop', Top ); - Left := Mainform.GetRegValue( 'SQLHelp_WindowLeft', Left ); - Width := Mainform.GetRegValue( 'SQLHelp_WindowWidth', Width ); - Height := Mainform.GetRegValue( 'SQLHelp_WindowHeight', Height ); - pnlLeft.Width := Mainform.GetRegValue( 'SQLHelp_PnlLeftWidth', pnlLeft.Width ); - pnlRightTop.Height := Mainform.GetRegValue( 'SQLHelp_PnlRightTopHeight', pnlRightTop.Height ); + Top := Mainform.GetRegValue( REGNAME_SQLHELPWINTOP, Top ); + Left := Mainform.GetRegValue( REGNAME_SQLHELPWINLEFT, Left ); + Width := Mainform.GetRegValue( REGNAME_SQLHELPWINWIDTH, Width ); + Height := Mainform.GetRegValue( REGNAME_SQLHELPWINHEIGHT, Height ); + pnlLeft.Width := Mainform.GetRegValue( REGNAME_SQLHELPPLWIDTH, pnlLeft.Width ); + pnlRightTop.Height := Mainform.GetRegValue( REGNAME_SQLHELPPRHEIGHT, pnlRightTop.Height ); Caption := DEFAULT_WINDOW_CAPTION; MemoDescription.Font.Name := m.SynMemoQuery.Font.Name; @@ -308,14 +308,20 @@ end; Save layout and close window } procedure TfrmSQLhelp.ButtonCloseClick(Sender: TObject); +var + reg : TRegistry; begin - Mainform.SaveRegValue( 'SQLHelp_WindowLeft', Left ); - Mainform.SaveRegValue( 'SQLHelp_WindowTop', Top ); - Mainform.SaveRegValue( 'SQLHelp_WindowWidth', Width ); - Mainform.SaveRegValue( 'SQLHelp_WindowHeight', Height ); - Mainform.SaveRegValue( 'SQLHelp_PnlLeftWidth', pnlLeft.Width ); - Mainform.SaveRegValue( 'SQLHelp_PnlRightTopHeight', PnlRightTop.Height ); - + reg := TRegistry.Create; + if reg.OpenKey(REGPATH, False) then begin + reg.WriteInteger( REGNAME_SQLHELPWINLEFT, Left ); + reg.WriteInteger( REGNAME_SQLHELPWINTOP, Top ); + reg.WriteInteger( REGNAME_SQLHELPWINWIDTH, Width ); + reg.WriteInteger( REGNAME_SQLHELPWINHEIGHT, Height ); + reg.WriteInteger( REGNAME_SQLHELPPLWIDTH, pnlLeft.Width ); + reg.WriteInteger( REGNAME_SQLHELPPRHEIGHT, PnlRightTop.Height ); + reg.CloseKey; + end; + reg.Free; Close; end; diff --git a/source/usermanager.pas b/source/usermanager.pas index 9bbb9c5a..d8518a40 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -233,7 +233,7 @@ begin if CheckBoxCreateAccount.Checked then with TRegistry.Create do begin - OpenKey(REGPATH + '\Servers\', false); + OpenKey(REGPATH + REGKEY_SESSIONS, false); if KeyExists(EditDescription.Text) then begin MessageDlg('This Description (' + EditDescription.Text + ') is already used.' + CRLF + 'Please specify another description!', mtError, [mbOK], 0); @@ -242,14 +242,14 @@ begin end else with TRegistry.Create do begin - OpenKey(REGPATH + '\Servers\' + EditDescription.Text, true); - WriteString('Host', Mainform.Childwin.Conn.MysqlParams.Host); - WriteString('User', EditUser.Text); - WriteString('Password', encrypt(EditPassword.Text)); - WriteString('Port', IntToStr(Mainform.Childwin.Conn.MysqlParams.Port)); - WriteString('Timeout', '30'); - WriteBool('Compressed', false); - WriteString('OnlyDBs', ''); + OpenKey(REGPATH + REGKEY_SESSIONS + EditDescription.Text, true); + WriteString(REGNAME_HOST, Mainform.Childwin.Conn.MysqlParams.Host); + WriteString(REGNAME_USER, EditUser.Text); + WriteString(REGNAME_PASSWORD, encrypt(EditPassword.Text)); + WriteString(REGNAME_PORT, IntToStr(Mainform.Childwin.Conn.MysqlParams.Port)); + WriteString(REGNAME_TIMEOUT, IntToStr(DEFAULT_TIMEOUT)); + WriteBool(REGNAME_COMPRESSED, DEFAULT_COMPRESSED); + WriteString(REGNAME_ONLYDBS, ''); CloseKey; Free; end;