我已经安装DScintilla
了用于代码编辑组件的 Delphi VCL 包装器Scintilla
,但我找不到任何关于如何使用它的基本示例。
您能否发布一些语法突出显示的基本代码示例或对其代码示例的引用?
我已经安装DScintilla
了用于代码编辑组件的 Delphi VCL 包装器Scintilla
,但我找不到任何关于如何使用它的基本示例。
您能否发布一些语法突出显示的基本代码示例或对其代码示例的引用?
我从来没有这样做过,但似乎你必须设置词法分析器,然后通过 SCI_SETKEYWORDS 消息发送关键字(它只是一个用单个空格分隔的字符串链)。
以下是 C++ 中的示例:
http://tortoisesvn.googlecode.com/svn/trunk/src/TortoiseBlame/Lexer.cpp
我看到 dScintilla 包含在 TDScintilla.SetKeyWords() 中,所以我想它应该以相同的方式工作。
无论如何,我同意找到一个关于如何使用 DScintilla 的更完整的演示会非常有帮助。
非常有趣的图书馆,但很难说你到底想用它做什么。例如,这里是 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;