2011-10-18 27 views

Trả lời

4

Thư viện rất thú vị nhưng khó nói chính xác bạn muốn làm gì với nó. Ví dụ ở đây là ví dụ với một số cài đặt màu cơ bản cho công cụ đánh dấu cú pháp Pascal. Lưu ý rằng bạn cần có thư viện SciLexer.dll trong thư mục dự án của bạn (hoặc nơi ứng dụng tìm kiếm nó).

Trình bao bọc thư viện này cung cấp nhiều tính năng với các tên có ý nghĩa, vì vậy, tốt nhất tôi nghĩ là duyệt qua chúng theo cách của riêng bạn.

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

Tôi chưa bao giờ làm điều đó, nhưng có vẻ như bạn phải đặt lexer và sau đó gửi các từ khóa qua tin nhắn SCI_SETKEYWORDS (nó chỉ là một chuỗi ký tự tách biệt với một không gian duy nhất).

Dưới đây là một ví dụ trong C++:

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

Tôi thấy rằng dScintilla có mà bọc trong TDScintilla.SetKeyWords(), vì vậy tôi đoán nó sẽ làm việc cùng một cách.

Trong mọi trường hợp, tôi đồng ý rằng sẽ rất hữu ích khi tìm bản trình diễn hoàn chỉnh hơn về cách sử dụng DScintilla.

+1

+1 cho liên kết mẫu cpp, tôi có hai câu trả lời hay nhưng tiếc là chỉ có một câu trả lời có thể được chấp nhận. Cảm ơn – beerwin

Các vấn đề liên quan