- Move all hardcoded preferences names (registry) plus their default values to const.inc to fix inconsistencies like the one described here: http://www.heidisql.com/forum/viewtopic.php?p=1739

- Consequently use Mainform.GetRegValue() to read these values, an overloaded method with either Boolean, String or Integer result. These methods keep a global TRegistry object (regMain) open while the application runs, rather than creating a new one for each caller.
- Remove Mainform.SaveRegValue() which was used in one or two callers. Rather use a TRegistry object and do that by hand. There's no significant advantage in using a SaveRegValue method currently.
This commit is contained in:
Ansgar Becker
2008-02-06 00:00:52 +00:00
parent be733f6821
commit 4e23728aa2
12 changed files with 599 additions and 740 deletions

View File

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

View File

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

View File

@@ -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 := '';

View File

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

View File

@@ -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) + ' ';

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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