From cafd2a8c16911b5f3368c77f533e4273e5ad9bcc Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Tue, 31 Mar 2009 22:24:00 +0000 Subject: [PATCH] Enhancement in preferences dialog, SQL styles: * Use AttrCount and Attribute[x] in SynEditHighlighters to iterate through available attributes, instead of doing less with more code. * Use integer registry values for highlighter colors (were strings) and also integers for bold, italic, underline, strikeout (was one boolean per attribute). a) optimizes registry access b) normalizes registry names and c) simplifies code. Unfortunately this breaks everyone's customized highlighter style - hopefully ok to do this is in an interim build. --- components/heidisql/include/const.inc | 26 +--- source/helpers.pas | 24 ++-- source/main.dfm | 3 + source/main.pas | 12 +- source/options.dfm | 2 +- source/options.pas | 172 ++++++-------------------- 6 files changed, 59 insertions(+), 180 deletions(-) diff --git a/components/heidisql/include/const.inc b/components/heidisql/include/const.inc index b383804b..4168952d 100644 --- a/components/heidisql/include/const.inc +++ b/components/heidisql/include/const.inc @@ -69,30 +69,8 @@ const REGNAME_LOGSQLWIDTH = 'logsqlwidth'; DEFAULT_LOGSQLWIDTH = 2000; REGPREFIX_SQLATTRI = 'SQL Attr '; - REGPOSTFIX_SQL_BOLD = ' Bold'; - REGPOSTFIX_SQL_ITALIC = ' Italic'; - 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_SQLCOLCONDCOMMATTRI = 'SQLColConditionalCommentAttri'; - DEFAULT_SQLCOLCONDCOMMATTRI = $00808080; // clGray - REGNAME_SQLCOLTABLENAMEATTRI = 'SQLColTablenameAttri'; - DEFAULT_SQLCOLTABLENAMEATTRI = $00FF00FF; // clFuchsia - REGNAME_SQLCOLSYMBOLATTRI = 'SQLColSymbolAttri'; - DEFAULT_SQLCOLSYMBOLATTRI = $00000000; // black - REGNAME_SQLCOLIDENTATTRI = 'SQLColIdentAttri'; - DEFAULT_SQLCOLIDENTATTRI = $00008080; // olive - REGNAME_SQLCOLDELIMIDENTATTRI = 'SQLColDelimIdentAttri'; - DEFAULT_SQLCOLDELIMIDENTATTRI = $00008080; // olive + REGPOSTFIX_SQL_COLOR = ' Color'; + REGPOSTFIX_SQL_STYLE = ' Style'; REGNAME_SQLCOLACTIVELINE = 'SQLColActiveLine'; DEFAULT_SQLCOLACTIVELINE = $00FFFFFF; // clWhite REGNAME_MAXCOLWIDTH = 'MaxColWidth'; diff --git a/source/helpers.pas b/source/helpers.pas index 0c16652e..78f02e25 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -187,7 +187,7 @@ type procedure EnableProgressBar(MaxValue: Integer); function CompareNumbers(List: TStringList; Index1, Index2: Integer): Integer; function ListIndexByRegExpr(List: TWideStrings; Expression: WideString): Integer; - procedure RestoreSyneditStyle(Attri: TSynHighlighterAttributes; ColorRegName: String; ColorDefault: Integer); + procedure RestoreSyneditStyles(Highlighter: TSynCustomHighlighter); var MYSQL_KEYWORDS : TStringList; MainReg : TRegistry; @@ -2988,18 +2988,18 @@ begin end; -procedure RestoreSyneditStyle(Attri: TSynHighlighterAttributes; ColorRegName: String; ColorDefault: Integer); +procedure RestoreSyneditStyles(Highlighter: TSynCustomHighlighter); +var + i: Integer; + Attri: TSynHighlighterAttributes; begin - // Read font color, bold + italic style of a SynEdit attribute set from registry - Attri.Foreground := StringToColor(GetRegValue(ColorRegName, ColorToString(ColorDefault))); - if GetRegValue(REGPREFIX_SQLATTRI+Attri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in Attri.Style) then - Attri.Style := Attri.Style + [fsBold] - else - Attri.Style := Attri.Style - [fsBold]; - if GetRegValue(REGPREFIX_SQLATTRI+Attri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in Attri.Style) then - Attri.Style := Attri.Style + [fsItalic] - else - Attri.Style := Attri.Style - [fsItalic]; + // Read font color, bold + italic style of SynEdit attributes from registry + // Default colors defined and used from highlighter on main form + for i := 0 to Highlighter.AttrCount - 1 do begin + Attri := Highlighter.Attribute[i]; + Attri.Foreground := GetRegValue(REGPREFIX_SQLATTRI+Attri.FriendlyName+REGPOSTFIX_SQL_COLOR, Mainform.SynSQLSyn1.Attribute[i].Foreground); + Attri.IntegerStyle := GetRegValue(REGPREFIX_SQLATTRI+Attri.FriendlyName+REGPOSTFIX_SQL_STYLE, Mainform.SynSQLSyn1.Attribute[i].IntegerStyle) + end; end; diff --git a/source/main.dfm b/source/main.dfm index a37156f9..e83b3469 100644 --- a/source/main.dfm +++ b/source/main.dfm @@ -6133,8 +6133,11 @@ object MainForm: TMainForm object SynSQLSyn1: TSynSQLSyn DefaultFilter = 'SQL files (*.sql)|*.sql' CommentAttri.Foreground = clGray + ConditionalCommentAttri.Foreground = clGray DataTypeAttri.Foreground = clMaroon + DelimitedIdentifierAttri.Foreground = clOlive FunctionAttri.Foreground = clNavy + IdentifierAttri.Foreground = clOlive KeyAttri.Foreground = clBlue NumberAttri.Foreground = clPurple StringAttri.Foreground = clGreen diff --git a/source/main.pas b/source/main.pas index 6f134c2e..24b23aac 100644 --- a/source/main.pas +++ b/source/main.pas @@ -1429,17 +1429,7 @@ begin prefEnableNullBG := GetRegValue(REGNAME_BG_NULL_ENABLED, DEFAULT_BG_NULL_ENABLED); // Color coding: - RestoreSyneditStyle(SynSQLSyn1.KeyAttri, REGNAME_SQLCOLKEYATTRI, DEFAULT_SQLCOLKEYATTRI); - RestoreSyneditStyle(SynSQLSyn1.FunctionAttri, REGNAME_SQLCOLFUNCTIONATTRI, DEFAULT_SQLCOLFUNCTIONATTRI); - RestoreSyneditStyle(SynSQLSyn1.DataTypeAttri, REGNAME_SQLCOLDATATYPEATTRI, DEFAULT_SQLCOLDATATYPEATTRI); - RestoreSyneditStyle(SynSQLSyn1.NumberAttri, REGNAME_SQLCOLNUMBERATTRI, DEFAULT_SQLCOLNUMBERATTRI); - RestoreSyneditStyle(SynSQLSyn1.StringAttri, REGNAME_SQLCOLSTRINGATTRI, DEFAULT_SQLCOLSTRINGATTRI); - RestoreSyneditStyle(SynSQLSyn1.CommentAttri, REGNAME_SQLCOLCOMMENTATTRI, DEFAULT_SQLCOLCOMMENTATTRI); - RestoreSyneditStyle(SynSQLSyn1.ConditionalCommentAttri, REGNAME_SQLCOLCONDCOMMATTRI, DEFAULT_SQLCOLCONDCOMMATTRI); - RestoreSyneditStyle(SynSQLSyn1.TableNameAttri, REGNAME_SQLCOLTABLENAMEATTRI, DEFAULT_SQLCOLTABLENAMEATTRI); - RestoreSyneditStyle(SynSQLSyn1.SymbolAttri, REGNAME_SQLCOLSYMBOLATTRI, DEFAULT_SQLCOLSYMBOLATTRI); - RestoreSyneditStyle(SynSQLSyn1.IdentifierAttri, REGNAME_SQLCOLIDENTATTRI, DEFAULT_SQLCOLIDENTATTRI); - RestoreSyneditStyle(SynSQLSyn1.DelimitedIdentifierAttri, REGNAME_SQLCOLDELIMIDENTATTRI, DEFAULT_SQLCOLDELIMIDENTATTRI); + RestoreSyneditStyles(SynSQLSyn1); SynMemoQuery.ActiveLineColor := StringToColor(GetRegValue(REGNAME_SQLCOLACTIVELINE, ColorToString(DEFAULT_SQLCOLACTIVELINE))); // Switch off/on displaying table/db sized in tree diff --git a/source/options.dfm b/source/options.dfm index 9810221c..6a0be859 100644 --- a/source/options.dfm +++ b/source/options.dfm @@ -272,7 +272,7 @@ object optionsform: Toptionsform Top = 33 Width = 124 Height = 22 - Style = [cbStandardColors, cbExtendedColors, cbCustomColor, cbPrettyNames, cbCustomColors] + Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors] ItemHeight = 16 TabOrder = 1 OnChange = SQLFontChange diff --git a/source/options.pas b/source/options.pas index 0e46d5e8..a5155290 100644 --- a/source/options.pas +++ b/source/options.pas @@ -124,20 +124,6 @@ implementation uses main, helpers; {$R *.DFM} -const - SQLEL_KEYWORD = 'Keywords'; - SQLEL_FUNCTION = 'Functions'; - SQLEL_DATATYPE = 'Data types'; - SQLEL_NUMBER = 'Numeric values'; - SQLEL_STRING = 'String values'; - SQLEL_COMMENT = 'Comments'; - SQLEL_CONDCOMM = 'Conditional comments'; - SQLEL_TABLE = 'Table names'; - SQLEL_SYMBOL = 'Symbols'; - SQLEL_IDENT = 'Identifiers'; - SQLEL_DELIMIDENT = 'Delimited identifiers'; - SQLEL_ACTLINE = 'Active line background'; - procedure Toptionsform.Modified(Sender: TObject); begin @@ -166,6 +152,9 @@ end; Apply settings to registry and mainform } procedure Toptionsform.Apply(Sender: TObject); +var + i: Integer; + Attri: TSynHighlighterAttributes; begin Screen.Cursor := crHourGlass; @@ -179,42 +168,13 @@ begin MainReg.WriteInteger(REGNAME_FONTSIZE, updownSQLFontSize.Position); MainReg.WriteInteger(REGNAME_LOGSQLNUM, updownLogLines.Position); MainReg.WriteInteger(REGNAME_LOGSQLWIDTH, updownLogSnip.Position); - MainReg.WriteString(REGNAME_SQLCOLKEYATTRI, colortostring(SynSQLSynSQLSample.KeyAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLFUNCTIONATTRI, colortostring(SynSQLSynSQLSample.FunctionAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLDATATYPEATTRI, colortostring(SynSQLSynSQLSample.DataTypeAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLNUMBERATTRI, colortostring(SynSQLSynSQLSample.NumberAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLSTRINGATTRI, colortostring(SynSQLSynSQLSample.StringAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLCOMMENTATTRI, colortostring(SynSQLSynSQLSample.CommentAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLCONDCOMMATTRI, colortostring(SynSQLSynSQLSample.ConditionalCommentAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLTABLENAMEATTRI, colortostring(SynSQLSynSQLSample.TableNameAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLSYMBOLATTRI, colortostring(SynSQLSynSQLSample.SymbolAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLIDENTATTRI, colortostring(SynSQLSynSQLSample.IdentifierAttri.Foreground)); - MainReg.WriteString(REGNAME_SQLCOLDELIMIDENTATTRI, colortostring(SynSQLSynSQLSample.DelimitedIdentifierAttri.Foreground)); + for i:=0 to SynSQLSynSQLSample.AttrCount - 1 do begin + Attri := SynSQLSynSQLSample.Attribute[i]; + MainReg.WriteInteger(REGPREFIX_SQLATTRI+Attri.FriendlyName+REGPOSTFIX_SQL_COLOR, Attri.Foreground); + MainReg.WriteInteger(REGPREFIX_SQLATTRI+Attri.FriendlyName+REGPOSTFIX_SQL_STYLE, Attri.IntegerStyle); + end; MainReg.WriteString(REGNAME_SQLCOLACTIVELINE, ColorToString(SynMemoSQLSample.ActiveLineColor)); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.KeyAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.KeyAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.KeyAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.KeyAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.FunctionAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.FunctionAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.FunctionAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.FunctionAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.DataTypeAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.DataTypeAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.DataTypeAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.DataTypeAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.NumberAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.NumberAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.NumberAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.NumberAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.StringAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.StringAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.StringAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.StringAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.CommentAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.CommentAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.CommentAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.CommentAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.ConditionalCommentAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.ConditionalCommentAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.ConditionalCommentAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.ConditionalCommentAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.TableNameAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.TableNameAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.TableNameAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.TableNameAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.SymbolAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.SymbolAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.SymbolAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.SymbolAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.IdentifierAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.IdentifierAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.IdentifierAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.IdentifierAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.DelimitedIdentifierAttri.FriendlyName+REGPOSTFIX_SQL_BOLD, fsBold in SynSQLSynSQLSample.DelimitedIdentifierAttri.Style); - MainReg.WriteBool(REGPREFIX_SQLATTRI+SynSQLSynSQLSample.DelimitedIdentifierAttri.FriendlyName+REGPOSTFIX_SQL_ITALIC, fsItalic in SynSQLSynSQLSample.DelimitedIdentifierAttri.Style); - MainReg.WriteString(REGNAME_CSV_SEPARATOR, editCSVSeparator.Text); MainReg.WriteString(REGNAME_CSV_ENCLOSER, editCSVEncloser.Text); MainReg.WriteString(REGNAME_CSV_TERMINATOR, editCSVTerminator.Text); @@ -249,17 +209,9 @@ begin Mainform.SynMemoSQLLog.Gutter.Font := SynMemoSQLSample.Font; Mainform.SynMemoProcessView.Font := SynMemoSQLSample.Font; Mainform.SynMemoFilter.Font := SynMemoSQLSample.Font; - Mainform.SynSQLSyn1.KeyAttri.AssignColorAndStyle(SynSQLSynSQLSample.KeyAttri); - Mainform.SynSQLSyn1.FunctionAttri.AssignColorAndStyle(SynSQLSynSQLSample.FunctionAttri); - Mainform.SynSQLSyn1.DataTypeAttri.AssignColorAndStyle(SynSQLSynSQLSample.DataTypeAttri); - Mainform.SynSQLSyn1.NumberAttri.AssignColorAndStyle(SynSQLSynSQLSample.NumberAttri); - Mainform.SynSQLSyn1.StringAttri.AssignColorAndStyle(SynSQLSynSQLSample.StringAttri); - Mainform.SynSQLSyn1.CommentAttri.AssignColorAndStyle(SynSQLSynSQLSample.CommentAttri); - Mainform.SynSQLSyn1.ConditionalCommentAttri.AssignColorAndStyle(SynSQLSynSQLSample.ConditionalCommentAttri); - Mainform.SynSQLSyn1.TablenameAttri.AssignColorAndStyle(SynSQLSynSQLSample.TablenameAttri); - Mainform.SynSQLSyn1.SymbolAttri.AssignColorAndStyle(SynSQLSynSQLSample.SymbolAttri); - Mainform.SynSQLSyn1.IdentifierAttri.AssignColorAndStyle(SynSQLSynSQLSample.IdentifierAttri); - Mainform.SynSQLSyn1.DelimitedIdentifierAttri.AssignColorAndStyle(SynSQLSynSQLSample.DelimitedIdentifierAttri); + for i := 0 to SynSQLSynSQLSample.AttrCount - 1 do begin + Mainform.SynSQLSyn1.Attribute[i].AssignColorAndStyle(SynSQLSynSQLSample.Attribute[i]); + end; Mainform.SynMemoQuery.ActiveLineColor := SynMemoSQLSample.ActiveLineColor; Mainform.DataGrid.Font.Name := comboDataFontName.Text; Mainform.QueryGrid.Font.Name := comboDataFontName.Text; @@ -303,6 +255,8 @@ end; procedure Toptionsform.FormCreate(Sender: TObject); +var + i: Integer; // Callback function used by EnumFontFamilies() function EnumFixedProc(lpelf: PEnumLogFont; lpntm: PNewTextMetric; FontType: Integer; Data: LPARAM): Integer; stdcall; begin @@ -321,11 +275,9 @@ begin 'CREATE TABLE /*!32312 IF NOT EXISTS*/ tableB' + CRLF + ' (id INT, name VARCHAR(30) DEFAULT "standard")'; SynSQLSynSQLSample.TableNames.CommaText := 'tableA,tableB'; - comboSQLColElement.Items.Delimiter := ','; - comboSQLColElement.Items.StrictDelimiter := True; - comboSQLColElement.Items.DelimitedText := SQLEL_KEYWORD+','+SQLEL_FUNCTION+','+SQLEL_DATATYPE+','+ - SQLEL_NUMBER+','+SQLEL_STRING+','+SQLEL_COMMENT+','+SQLEL_CONDCOMM+','+SQLEL_TABLE+','+ - SQLEL_SYMBOL+','+SQLEL_IDENT+','+SQLEL_DELIMIDENT+','+SQLEL_ACTLINE; + for i:=0 to SynSQLSynSQLSample.AttrCount - 1 do + comboSQLColElement.Items.Add(SynSQLSynSQLSample.Attribute[i].FriendlyName); + comboSQLColElement.Items.Add('Active line background'); comboSQLColElement.ItemIndex := 0; end; @@ -366,17 +318,7 @@ begin btnOpenLogFolder.Enabled := DirectoryExists(DirnameSessionLogs); // SQL: - RestoreSyneditStyle(SynSQLSynSQLSample.KeyAttri, REGNAME_SQLCOLKEYATTRI, DEFAULT_SQLCOLKEYATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.FunctionAttri, REGNAME_SQLCOLFUNCTIONATTRI, DEFAULT_SQLCOLFUNCTIONATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.DataTypeAttri, REGNAME_SQLCOLDATATYPEATTRI, DEFAULT_SQLCOLDATATYPEATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.NumberAttri, REGNAME_SQLCOLNUMBERATTRI, DEFAULT_SQLCOLNUMBERATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.StringAttri, REGNAME_SQLCOLSTRINGATTRI, DEFAULT_SQLCOLSTRINGATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.CommentAttri, REGNAME_SQLCOLCOMMENTATTRI, DEFAULT_SQLCOLCOMMENTATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.ConditionalCommentAttri, REGNAME_SQLCOLCONDCOMMATTRI, DEFAULT_SQLCOLCONDCOMMATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.TableNameAttri, REGNAME_SQLCOLTABLENAMEATTRI, DEFAULT_SQLCOLTABLENAMEATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.SymbolAttri, REGNAME_SQLCOLSYMBOLATTRI, DEFAULT_SQLCOLSYMBOLATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.IdentifierAttri, REGNAME_SQLCOLIDENTATTRI, DEFAULT_SQLCOLIDENTATTRI); - RestoreSyneditStyle(SynSQLSynSQLSample.DelimitedIdentifierAttri, REGNAME_SQLCOLDELIMIDENTATTRI, DEFAULT_SQLCOLDELIMIDENTATTRI); + RestoreSyneditStyles(SynSQLSynSQLSample); SynMemoSQLSample.ActiveLineColor := StringToColor(GetRegValue(REGNAME_SQLCOLACTIVELINE, ColorToString(DEFAULT_SQLCOLACTIVELINE))); comboSQLFontName.ItemIndex := comboSQLFontName.Items.IndexOf(sqlfontname); updownSQLFontSize.Position := sqlfontsize; @@ -411,33 +353,23 @@ end; procedure Toptionsform.SQLFontChange(Sender: TObject); var - elem: String; - attr: TSynHighlighterAttributes; + AttriIdx: Integer; + Attri: TSynHighlighterAttributes; col: TColor; begin SynMemoSQLSample.Font.Name := comboSQLFontName.Items[comboSQLFontName.ItemIndex]; SynMemoSQLSample.Font.Size := updownSQLFontSize.Position; - elem := comboSQLColElement.Text; + AttriIdx := comboSQLColElement.ItemIndex; col := cboxSQLColColor.Selected; - if elem = SQLEL_ACTLINE then begin + if AttriIdx = comboSQLColElement.Items.Count-1 then begin SynMemoSQLSample.ActiveLineColor := col; end else begin - if elem = SQLEL_KEYWORD then attr := SynSqlSynSQLSample.KeyAttri - else if elem = SQLEL_FUNCTION then attr := SynSqlSynSQLSample.FunctionAttri - else if elem = SQLEL_DATATYPE then attr := SynSqlSynSQLSample.DatatypeAttri - else if elem = SQLEL_NUMBER then attr := SynSqlSynSQLSample.NumberAttri - else if elem = SQLEL_STRING then attr := SynSqlSynSQLSample.StringAttri - else if elem = SQLEL_COMMENT then attr := SynSqlSynSQLSample.CommentAttri - else if elem = SQLEL_CONDCOMM then attr := SynSqlSynSQLSample.ConditionalCommentAttri - else if elem = SQLEL_TABLE then attr := SynSqlSynSQLSample.TablenameAttri - else if elem = SQLEL_SYMBOL then attr := SynSqlSynSQLSample.SymbolAttri - else if elem = SQLEL_IDENT then attr := SynSqlSynSQLSample.IdentifierAttri - else attr := SynSqlSynSQLSample.DelimitedIdentifierAttri; - attr.Foreground := col; - if chkSQLBold.Checked then attr.Style := attr.Style + [fsBold] - else attr.Style := attr.Style - [fsBold]; - if chkSQLItalic.Checked then attr.Style := attr.Style + [fsItalic] - else attr.Style := attr.Style - [fsItalic]; + Attri := SynSqlSynSQLSample.Attribute[AttriIdx]; + Attri.Foreground := col; + if chkSQLBold.Checked then Attri.Style := Attri.Style + [fsBold] + else Attri.Style := Attri.Style - [fsBold]; + if chkSQLItalic.Checked then Attri.Style := Attri.Style + [fsItalic] + else Attri.Style := Attri.Style - [fsItalic]; end; Modified(Sender); end; @@ -483,34 +415,24 @@ end; procedure Toptionsform.comboSQLColElementChange(Sender: TObject); var - elem: String; - attr: TSynHighlighterAttributes; + AttriIdx: Integer; + Attri: TSynHighlighterAttributes; col: TColor; begin - elem := comboSQLColElement.Text; - if elem = SQLEL_ACTLINE then begin + AttriIdx := comboSQLColElement.ItemIndex; + if AttriIdx = comboSQLColElement.Items.Count-1 then begin col := SynMemoSQLSample.ActiveLineColor; chkSQLBold.Enabled := False; chkSQLItalic.Enabled := False; end else begin - if elem = SQLEL_KEYWORD then attr := SynSqlSynSQLSample.KeyAttri - else if elem = SQLEL_FUNCTION then attr := SynSqlSynSQLSample.FunctionAttri - else if elem = SQLEL_DATATYPE then attr := SynSqlSynSQLSample.DatatypeAttri - else if elem = SQLEL_NUMBER then attr := SynSqlSynSQLSample.NumberAttri - else if elem = SQLEL_STRING then attr := SynSqlSynSQLSample.StringAttri - else if elem = SQLEL_COMMENT then attr := SynSqlSynSQLSample.CommentAttri - else if elem = SQLEL_CONDCOMM then attr := SynSqlSynSQLSample.ConditionalCommentAttri - else if elem = SQLEL_TABLE then attr := SynSqlSynSQLSample.TablenameAttri - else if elem = SQLEL_SYMBOL then attr := SynSqlSynSQLSample.SymbolAttri - else if elem = SQLEL_IDENT then attr := SynSqlSynSQLSample.IdentifierAttri - else attr := SynSqlSynSQLSample.DelimitedIdentifierAttri; - col := attr.Foreground; + Attri := SynSqlSynSQLSample.Attribute[AttriIdx]; + col := Attri.Foreground; chkSQLBold.Enabled := True; chkSQLItalic.Enabled := True; chkSQLBold.OnClick := nil; chkSQLItalic.OnClick := nil; - chkSQLBold.Checked := fsBold in attr.Style; - chkSQLItalic.Checked := fsItalic in attr.Style; + chkSQLBold.Checked := fsBold in Attri.Style; + chkSQLItalic.Checked := fsItalic in Attri.Style; chkSQLBold.OnClick := SQLFontChange; chkSQLItalic.OnClick := SQLFontChange; end; @@ -531,30 +453,16 @@ end; procedure Toptionsform.SynMemoSQLSampleClick(Sender: TObject); var Token: WideString; - Start, TokenTypeInt: Integer; Attri: TSynHighlighterAttributes; + AttriIdx: Integer; sm: TSynMemo; - f: String; begin sm := Sender as TSynMemo; - sm.GetHighlighterAttriAtRowColEx(sm.CaretXY, Token, TokenTypeInt, Start, Attri); - case TtkTokenKind(TokenTypeInt) of - tkKey: f := SQLEL_KEYWORD; - tkFunction: f := SQLEL_FUNCTION; - tkDatatype: f := SQLEL_DATATYPE; - tkNumber: f := SQLEL_NUMBER; - tkString: f := SQLEL_STRING; - tkComment: f := SQLEL_COMMENT; - tkConditionalComment: f := SQLEL_CONDCOMM; - tkTableName: f := SQLEL_TABLE; - tkSymbol: f := SQLEL_SYMBOL; - tkIdentifier: f := SQLEL_IDENT; - tkDelimitedIdentifier: f := SQLEL_DELIMIDENT; - else f := ''; - end; - if f = '' then + sm.GetHighlighterAttriAtRowCol(sm.CaretXY, Token, Attri); + AttriIdx := ComboSQLColElement.Items.IndexOf(Attri.FriendlyName); + if AttriIdx = -1 then Exit; - ComboSQLColElement.ItemIndex := ComboSQLColElement.Items.IndexOf(f); + ComboSQLColElement.ItemIndex := AttriIdx; ComboSQLColElement.OnChange(Sender); end;