2011-10-18 10 views
6

मैंने DScintilla, Scintilla कोड संपादन घटक के लिए डेल्फी वीसीएल रैपर स्थापित किया है, लेकिन मुझे इसका उपयोग करने का कोई मूल उदाहरण नहीं मिल रहा है।क्या DScintilla के लिए सिंटैक्स हाइलाइटिंग का एक उदाहरण है?

क्या आप सिंटैक्स हाइलाइटिंग के कुछ बुनियादी कोड उदाहरण या इसके लिए कोड उदाहरणों का संदर्भ पोस्ट कर सकते हैं?

उत्तर

4

बहुत रोचक लाइब्रेरी लेकिन यह कहना मुश्किल है कि आप इसके साथ क्या करना चाहते हैं। उदाहरण के लिए यहां पास्कल सिंटैक्स हाइलाइटर के लिए कुछ मूल रंग सेटिंग्स के साथ उदाहरण है। ध्यान दें कि आपको अपने प्रोजेक्ट फ़ोल्डर में 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; 
3

मैंने कभी ऐसा नहीं किया, लेकिन ऐसा लगता है कि आपको लेक्सर सेट करना होगा और फिर कीवर्ड को SCI_SETKEYWORDS संदेश के माध्यम से भेजना होगा (यह केवल एक स्ट्रिंग श्रृंखला को एक ही स्थान से अलग किया गया है)।

यहाँ सी में एक उदाहरण है ++:

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

मैं देख रहा हूँ dScintilla कि TDScintilla.SetKeyWords() में लिपटे है, इसलिए मुझे लगता है कि यह उसी तरह काम करना चाहिए।

किसी भी मामले में मैं सहमत हूं कि डीएससींटिला का उपयोग करने के तरीके पर एक और पूर्ण डेमो ढूंढना बहुत उपयोगी होगा।

+1

सीपीपी उदाहरण लिंक के लिए +1, मेरे पास दो अच्छे उत्तर थे, लेकिन दुर्भाग्यवश केवल एक ही स्वीकार किया जा सकता है। धन्यवाद – beerwin

संबंधित मुद्दे