2012-03-28 3 views
12

मैं रेड स्टूडियो आईडीई (बाहरी उपकरण के रूप में इस उपकरण का वर्तमान संस्करण) के साथ Delphi IDE Theme Editor को एकीकृत करने के लिए एक प्लगइन लिख रहा हूं, अब तक सबकुछ ठीक काम कर रहा है (नीचे दी गई छवि देखें), इस तथ्य को छोड़कर कि मैं ' टी यह पता लगाने कैसे, डेल्फी आईडीई में चयनित वाक्य रचना प्रकाश डाला रंग ताज़ा मानक विकल्प मेंडेल्फी आईडीई को ओटीए (ओपन टूल्स एपीआई) का उपयोग करके संशोधित वाक्यविन्यास हाइलाइट रंगों को कैसे ताज़ा करें?

enter image description here

मुझे स्पष्ट करने दें वाक्य रचना प्रकाश डाला रंग बदलने के (संपादक विकल्प> रंग) आप किसी भी तत्व को अनुकूलित कर सकते हैं और एक नया अग्रभूमि और पृष्ठभूमि रंग असाइन करें, फिर यदि आप दबाते हैं। ठीक । बटन आईडीई परिवर्तन लागू करता है और आईडीई संपादक विंडोज़ नई सेटिंग्स के साथ अपडेट होते हैं।

वर्तमान में मैं नए मानों को संशोधित और संग्रहीत कर सकता हूं, लेकिन मैं नई कॉन्फ़िगरेशन लागू करने के लिए डेल्फी आईडीई को निर्देश नहीं दे सकता, परिवर्तन केवल तभी दिखाई दे रहे हैं जब आईडीई पुनरारंभ होता है।

मैंने टूलएपीआई इकाई की खोज की और मुझे IOTAEditOptions, IOTAHighlighter और IOTAHighlightServices इंटरफेस मिला लेकिन इसमें कोई भी संशोधित सेटिंग रीफ्रेश (पुनः लोड) करने का विकल्प शामिल नहीं है।

इसके अलावा मैंने unmangle (tdump का उपयोग करके) की कोशिश की और coreide1XX.bpl फ़ाइल के कार्यों को सीधे कॉल किया, लेकिन यह भी काम नहीं किया।

00420B94 17411 1F39 Editcolorpage::TEditorColor:: 
00422188 17400 1F3A __fastcall Editcolorpage::TEditorColor::ColorClick(System::TObject *) 
0042174C 17407 1F3B __fastcall Editcolorpage::TEditorColor::ColorSpeedSettingClick(System::TObject *) 
004224BC 17396 1F3C __fastcall Editcolorpage::TEditorColor::DefaultClick(System::TObject *) 
00422414 17397 1F3D __fastcall Editcolorpage::TEditorColor::EditorColorBroadcast(System::TObject *, Winapi::Messages::TMessage&) 
00421584 17409 1F3E __fastcall Editcolorpage::TEditorColor::EditorColorCreate(System::TObject *) 
00421730 17408 1F3F __fastcall Editcolorpage::TEditorColor::EditorColorDestroy(System::TObject *) 
004217B0 17406 1F40 __fastcall Editcolorpage::TEditorColor::ElementListClick(System::TObject *) 
004222E8 17399 1F41 __fastcall Editcolorpage::TEditorColor::FontClick(System::TObject *) 
004225DC 17395 1F42 __fastcall Editcolorpage::TEditorColor::HelpClick(System::TObject *) 
00421AE8 17404 1F43 __fastcall Editcolorpage::TEditorColor::InitLineFlags(const System::DelphiInterface<Toolsapi::IOTAHighlighterPreview>) 
004219B8 17405 1F44 __fastcall Editcolorpage::TEditorColor::InitSamplePane() 
00421BC8 17403 1F45 __fastcall Editcolorpage::TEditorColor::InitSyntaxEditView(const System::DelphiInterface<Toolsapi::IOTAHighlighterPreview>) 
0042262C 17393 1F46 __fastcall Editcolorpage::TEditorColor::LoadHighlightPreviews() 
004225F4 17394 1F47 __fastcall Editcolorpage::TEditorColor::MarkDirty() 
004220E4 17401 1F48 __fastcall Editcolorpage::TEditorColor::SampleClick(System::TObject *) 
00422080 17402 1F49 __fastcall Editcolorpage::TEditorColor::SetColorSpeedSetting(Vedopts::TColorSpeedSetting) 
0042238C 17398 1F4A __fastcall Editcolorpage::TEditorColor::UpdateSamplePane() 
00422814 17392 1F4B __fastcall Editcolorpage::TEditorColor::tbsetPreviewsChange(System::TObject *, int, bool&) 
004AA8D4 17390 1F4C __fastcall Editcolorpage::initialization() 
00423C38 17413 1F4D __fastcall Editdisplaypage::Finalization() 

How I can instruct to the Delphi IDE refresh the modified syntax highlight colors using OTA (Open Tools API)?

अगर आप अधिक जानकारी की आवश्यकता है या अगर सवाल स्पष्ट नहीं है मुझे जानते हैं।

+0

यह एक लंबा शॉट है, लेकिन शायद 'IOTAEditView को कॉल करें।प्रत्येक सक्रिय मॉड्यूल संपादक के लिए पेंट '? – NGLN

+0

मुझे नहीं लगता कि यह @NGLN काम करेगा, क्योंकि जैसा कि मैं समझता हूं कि आईडीई केवल इनटाइलाइजेशन पर रंग सेटिंग्स लोड करता है। मुझे यह भी विश्वास नहीं है कि ओटीएपीआई में कोई इंटरफेस है जो आपको उन विशेषताओं को फिर से शुरू करने की अनुमति देता है। – LaKraven

+0

सुधार: जब आप पर्यावरण विकल्प संवाद बंद करते हैं तो उन सेटिंग्स को फिर से शुरू किया जा सकता है। धोखाधड़ी सिर्फ आपके प्लगइन को पर्यावरण विकल्प संवाद लाने के लिए हो सकती है, और उपयोगकर्ता को इसे मैन्युअल रूप से बंद करने का निर्देश दे सकता है। बहुत सुरुचिपूर्ण नहीं है, लेकिन प्रभावी होना चाहिए। – LaKraven

उत्तर

2

वांछित प्रभाव होने वाला एक मामूली हैक आपके प्लगइन को पर्यावरण विकल्प संवाद लाने के लिए होगा, और ऑपरेटर इसे मैन्युअल रूप से बंद कर देगा। यह आईडीई को सबमिट की गई सेटिंग्स के आधार पर इसकी कॉन्फ़िगरेशन को फिर से शुरू करने का कारण बनता है।

ऐसा करते हैं, एक परियोजना (IOTAProject वस्तु) पर एक हैंडल प्राप्त करने और कॉल करने के लिए ...

AProject.ProjectOptions.EditOptions;

कहाँ AProjectAProject: IOTAProject के रूप में परिभाषित किया गया है।

मुझे पता है कि यह समाधान का सबसे सुंदर नहीं है, लेकिन यदि इसका वांछित प्रभाव है, कम से कम यह कुछ हद तक व्यावहारिक है।

+0

साइमन, अच्छा सुझाव, लेकिन यदि आईडीई रंग सेटिंग्स के "मूल" नियंत्रण में परिवर्तनों का पता नहीं लगाता है तो आईडीई रीफ्रेश नहीं करता है। (याद रखें कि मैं सिंटेक्स हाइलाइट रंगों को सेट करने के लिए अपने स्वयं के नियंत्रण का उपयोग कर रहा हूं) – RRUZ

+0

@ सिमॉन, प्रोजेक्टऑप्शन। एडिटऑप्शन एक टीडील्फीप्रोजेक्टऑप्शन डायलॉग खोलता है, लेकिन पर्यावरण विकल्प संवाद एक टीडीफॉल्ट एंटरटेनमेंट डियालॉग है ... मुझे नहीं लगता कि यह वही जानवर है। –

+0

यह निर्भर करता है कि आप सेटिंग्स को कैसे सहेज रहे हैं। यदि वे रजिस्ट्री में हैं जहां आईडीई अपनी सेटिंग्स सहेजता है, तो परिवर्तनों को प्रभावी होना चाहिए (यह मेरा अनुभव है, वैसे भी) – LaKraven

2

मैं कहना चाहता हूँ आपका सर्वश्रेष्ठ दांव तांक-झांक करना होगा चारों ओर coreide*[email protected]@[email protected] या coreide*[email protected]@[email protected]

ये जब ठीक बटन क्लिक किया जाता है कहा जाता है मिलता है। मैं असेंबली पढ़ने में बहुत अच्छा नहीं हूं लेकिन इसके दिखने से पर्यावरण विकल्पों को आईडीई प्रारंभिकरण के दौरान रजिस्टर से लोड किया जाता है और किए गए किसी भी बदलाव को आवश्यकतानुसार वापस लिखा जाता है लेकिन आईडीई TEnvironmentOptions के मेमोरी इंस्टेंस पर आधिकारिक होने के लिए निर्भर करता है सभी पर्यावरण विकल्पों का प्रतिनिधित्व।

coreide*[email protected]@[email protected] जहां रंग TEditorColor

यह इन कक्षाओं की दुर्भाग्यपूर्ण कोई भी ओटीए या NTA के संपर्क में है है द्वारा संपादन के लिए पर्यावरण विकल्पों में से प्राप्त किए गए हैं प्रतीत होता है।

+1

धन्यवाद, मैंने पिछले कुछ महीनों में इन तरीकों में से कुछ पाया। मैं उम्मीद कर रहा था कि एक निम्न स्तर हैक का उपयोग न करें। लेकिन यह एकमात्र विकल्प लगता है। – RRUZ

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