2011-10-18 8 views

risposta

4

Libreria molto interessante ma difficile da dire che cosa esattamente vuoi che tu faccia con esso. Qui, ad esempio, c'è l'esempio con alcune impostazioni di base per l'evidenziatore della sintassi di Pascal. Si noti che è necessario avere la libreria SciLexer.dll nella cartella del progetto (o quella in cui l'applicazione lo cerca).

Questo wrapper di libreria offre molte funzionalità con nomi significativi, quindi il migliore che ritengo sarebbe di sfogliarli da soli.

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

Non l'ho mai fatto, ma sembra che tu debba impostare il lexer e quindi inviare le parole chiave tramite il messaggio SCI_SETKEYWORDS (è solo una catena di stringhe separata con un singolo spazio).

Ecco un esempio in C++:

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

vedo che ha dScintilla che avvolto in TDScintilla.SetKeyWords(), quindi immagino dovrebbe funzionare allo stesso modo.

In ogni caso sono d'accordo che sarà molto utile trovare una demo più completa su come usare DScintilla.

+1

+1 per il collegamento di esempio cpp, ho avuto due buone risposte, ma sfortunatamente solo una può essere accettata. Grazie – beerwin