【问题标题】:Is there an example of syntax highlighting for DScintilla?是否有 DScintilla 的语法高亮示例?
【发布时间】:2011-12-10 09:23:35
【问题描述】:

我已经为Scintilla 代码编辑组件安装了DScintilla,Delphi VCL 包装器,但是我找不到任何如何使用它的基本示例。

您能否发布一些语法高亮的基本代码示例或对其代码示例的参考?

【问题讨论】:

    标签: delphi scintilla


    【解决方案1】:

    非常有趣的库,但很难说你到底想用它做什么。 例如,这里是 Pascal 语法荧光笔的一些基本颜色设置的示例。请注意,您的项目文件夹(或应用程序查找它的文件夹)中需要有 SciLexer.dll 库。

    这个库包装器提供了许多具有有意义名称的功能,所以我认为最好的方法是您自己浏览它们。

    uses
      DScintillaTypes, DScintilla;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Scintilla: TDScintilla;
    begin
      Scintilla := TDScintilla.Create(Self); // creating it dynamically, it's also available as a component, so you don't need to do this
      Scintilla.DllModule := 'SciLexer.dll'; // the syntax library
      Scintilla.Align := alClient;           // object alignment to the whole parent
      Scintilla.Parent := Self;              // setting up the parent
      Scintilla.SetLexer(SCLEX_PASCAL);      // and setting the syntax highlighter, see SCLEX_ types in DScintillaTypes.pas
    
      Scintilla.StyleSetBack(STYLE_DEFAULT, clBlack); // setting up the default background color
      Scintilla.StyleSetFore(SCE_PAS_DEFAULT, clWhite); // Pascal specific default fore color
      Scintilla.StyleSetBack(SCE_PAS_DEFAULT, clBlack); // Pascal specific default back color
      Scintilla.StyleSetFore(SCE_PAS_IDENTIFIER, clYellow); // Pascal specific identifier fore color
      Scintilla.StyleSetBack(SCE_PAS_IDENTIFIER, clBlack); // Pascal specific identifier back color
      Scintilla.StyleSetBold(SCE_PAS_IDENTIFIER, True); // Pascal specific identifier bold font style
      Scintilla.StyleSetUnderline(SCE_PAS_IDENTIFIER, True); // Pascal specific identifier underline font style
      Scintilla.StyleSetFore(SCE_PAS_COMMENT, RGB(243, 236, 255)); // etc.
      Scintilla.StyleSetBack(SCE_PAS_COMMENT, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_COMMENT2, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_COMMENT2, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_COMMENTLINE, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_COMMENTLINE, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_NUMBER, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_NUMBER, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_HEXNUMBER, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_HEXNUMBER, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_WORD, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_WORD, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_STRING, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_STRING, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_STRINGEOL, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_STRINGEOL, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_CHARACTER, RGB(243, 236, 255));
      Scintilla.StyleSetBack(SCE_PAS_CHARACTER, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_OPERATOR, clRed);
      Scintilla.StyleSetBack(SCE_PAS_OPERATOR, clBlack);
      Scintilla.StyleSetFore(SCE_PAS_ASM, clRed);
      Scintilla.StyleSetBack(SCE_PAS_ASM, clBlack);
    end;
    

    【讨论】:

      【解决方案2】:

      我从未这样做过,但似乎您必须设置词法分析器,然后通过 SCI_SETKEYWORDS 消息发送关键字(它只是一个用单个空格分隔的字符串链)。

      这是一个 C++ 示例:

      http://tortoisesvn.googlecode.com/svn/trunk/src/TortoiseBlame/Lexer.cpp

      我看到 dScintilla 已经将它封装在 TDScintilla.SetKeyWords() 中,所以我想它应该以同样的方式工作。

      无论如何,我同意找到有关如何使用 DScintilla 的更完整演示会非常有帮助。

      【讨论】:

      • +1 对于 cpp 示例链接,我有两个很好的答案,但不幸的是只有一个可以被接受。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2010-11-26
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多