मैं Microsoft VBA संपादक में कस्टम रंगों का उपयोग कैसे कर सकता हूं?


33

मैं एक्सेल और VBA का उपयोग करके काम के लिए कुछ परियोजनाओं पर काम कर रहा हूं, इसलिए मेरे पास Microsoft Visual Basic संपादक का उपयोग करने के अलावा कोई विकल्प नहीं है। मैं सामान्य तौर पर बुरा नहीं मानूंगा, लेकिन मैं यह नहीं जान सकता कि संपादक के लिए एक कस्टम रंग कैसे सेट किया जाए (मैं केवल डिफ़ॉल्ट पैलेट से चुन सकता हूं)।

वर्तमान में रंग बदलने के लिए, मैं करने के लिए जाना Tools -> Options -> Editor Format... हालांकि, अपने विकल्पों केवल डिफ़ॉल्ट (और बुनियादी) तक ही सीमित हैं 16 रंगों - और जब मैं बुनियादी कहना, मेरा मतलब है बुनियादी ,, गुलाबी नीले, काले, सफेद, आदि जैसे ..

क्या किसी को पता है कि या तो कस्टम रंग निर्दिष्ट करना है, या बहुत कम से कम, कुछ रंगों को बदलना है जो डिफ़ॉल्ट पैलेट में दिखाई देते हैं?


मुझे लगता है कि Microsoft हमें यह बताने की कोशिश कर रहा है कि वे नहीं चाहते कि लोग VBA में प्रोग्राम करें। या हो सकता है कि बिल गेट्स दर्द निवारक के उत्पादकों में भारी हैं।
होलेन

जवाबों:


19

VBA इन रजिस्ट्री कुंजियों से रंगों के लिए सेटिंग्स पढ़ता है:

HKEY_CURRENT_USER \ Software \ Microsoft \ VBA \ 6.0 \ Common \ CodeForeColors HKEY_CURRENT_USER \ Software \ Microsoft \ VBA \ 6.0 \ Common \ CodeBackColors

इन कुंजियों में से प्रत्येक में उपकरण के अंदर प्रत्येक प्रविष्टि के लिए मूल्यों (अंतरिक्ष द्वारा अलग) की सूची है -> विकल्प -> संपादक प्रारूप। उदाहरण के लिए, CodeBackColors के अंदर पहला मान पृष्ठभूमि का रंग है और CodeForeColors के अंदर पहला मान सामान्य पाठ के लिए अग्रभूमि रंग है। मान रंग के लिए आंतरिक आईडी हैं, 0 का अर्थ है ऑटो रंग, 11 शो सियान, 5 लाल आदि।

इसे आज़माने के लिए: Excel को बंद करें, CodeBackColors के पहले मान को 5 में बदलें और Excel को पुनरारंभ करें। कोड संपादक की पृष्ठभूमि अब लाल होगी।

समस्या यह है कि VBA संपादक केवल इन आंतरिक मूल्यों का समर्थन करता है और उच्चतम संख्या यह समझता है कि 16 है। किसी भी अन्य मूल्य को स्वीकार नहीं किया जाएगा और यह ऑटो में वापस आ जाता है।

मैंने विभिन्न मूल्यों (जैसे 128255128, 16777215, # भाग्य, 255 या "170,255,238") में प्रवेश करने के कई विकल्पों की कोशिश की है और उनमें से किसी ने भी काम नहीं किया है।

इसलिए मुझे लगता है कि अन्य रंगों को असाइन करना तकनीकी रूप से संभव नहीं है।


1
जवाब के लिए धन्यवाद। IIRC, आप इनाम नहीं निकाल सकते हैं, लेकिन यदि आप सचमुच ऐसा नहीं कर सकते हैं, तो मैं आपको सबसे सही उत्तर के लिए पुरस्कार दूंगा। मैं यह देखने के लिए थोड़ा और इंतजार करना चाहता हूं कि क्या कोई और उत्तर पोस्ट किया गया है, लेकिन आपकी प्रतिक्रिया के लिए धन्यवाद, +1।
ब्रेकथ्रू

1
मुझे स्वीकार करना होगा, यह और भी अच्छा लगता है :)
टेक्स हेक्स

FMS से "टोटल विजुअल कोडटूल" ( fmsinc.com/vb6/CodingTools.html ) में एक टूल है "VBE कलर स्कीम मैनेजर को आसानी से देखने और अपने एडिटर के लिए रंग सेट करने के लिए"। यदि आप उपयोगकर्ता पुस्तिका (एक पीडीएफ) डाउनलोड करते हैं, तो यह स्क्रीनशॉट दिखाता है कि रंगों को सेट करना आसान बनाते हुए अभी भी 16 रंग पैलेट तक सीमित है। सोचेंगे कि क्या कस्टम रंग का उपयोग करने का एक सीधा तरीका था जो उन्होंने इसे इस उपकरण में शामिल किया होगा। ऐसा लगता है जैसे टेक्स हेक्स सही है।
ब्रायन

जैसा कि अब नीचे दिए गए उत्तरों के साथ दिखाया गया है कि यह संभव है, इस उत्तर को संशोधित किया जाना चाहिए। वीबीए संपादक में एचईएक्स संपादक का उपयोग करके रंगों को मज़बूती से बदलना संभव है।
स्टीवन मार्टिन

16

मैंने यहां मिली जानकारी के आधार पर एक एप्लिकेशन बनाया: https://github.com/dimitropoulos/VBECustomColors

यह मूल रूप से VBE6 / VBE7 .dll फ़ाइल का बैकअप लेता है और हेक्स संपादक का उपयोग किए बिना कस्टम रंगों के उपयोग की अनुमति देता है।

एस एस

आप इसे यहाँ डाउनलोड कर सकते हैं: https://github.com/gallaux/VBEThemeColorEditor

का आनंद लें

संपादित करें: स्रोत कोड अब उपलब्ध है!


वाह सुपर कूल, साझा करने के लिए धन्यवाद @gallaux - मैं निश्चित रूप से इसे देखूंगा। क्या आप उत्सुकता से सोर्स कोड जारी करने की योजना बना रहे हैं?
ब्रेकथ्रू

हां मैं जल्द ही, मुझे इसे थोड़ा साफ करने की जरूरत है;)
गैलक्स

धन्यवाद Gallaux, मैं एक ही बात करने के लिए अर्थ किया गया था, लेकिन एक बार मैं अपने vba संपादक को रंग योजना पसंद आया, मुझे वह प्रेरणा खो गई क्योंकि मैं "16 रंग आंख तनाव के रूप में निराश नहीं था" अब और नहीं!
स्टीवन मार्टिन

1
क्षमा करें कि यह कैसे लागू होता है, मुझे मदद की ज़रूरत है
पेड्रो मिगुएल पिमिनेरा मोरालेस

1
@YouCrackedMeUp आपको regedit ( github.com/dimitropoulos/VBECustomColors पर आधारित ) का उपयोग करके रजिस्ट्री कुंजी को अपडेट करने की आवश्यकता है : [1] regedit में नेविगेट करें HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common। [2] परिवर्तन CodeBackColorsकरने के लिए: 2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0। [3] परिवर्तन CodeForeColorsकरने के लिए: 13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0। [4] परिवर्तन FontFaceकरने के लिए: Consolas
टाइग्रेगेलिस

7

TeX HeX पर हाजिर है। हालांकि, यह अपने स्वयं के साथ 16 निर्मित रंगों को बदलना संभव है। इसके लिए बस थोड़ी सी हेक्स एडिटिंग की जरूरत होती है। यहां एक चरण-दर-चरण मार्गदर्शिका है। (नोट: यह वीबी 6 एसपी 6, फ़ाइल संस्करण 6.0.97.82 के लिए है)।

  1. अपने VB98 प्रोग्राम फ़ोल्डर में अपनी VB6.EXE फ़ाइल का बैकअप लें। (वैकल्पिक, लेकिन अनुशंसित)।

  2. अपने पसंदीदा हेक्स संपादक (HxD को चिल्लाओ) और VB6.EXE खोलें।

  3. पता 0xE22F4 पर जाएं। यह रंग तालिका की शुरुआत है।

आपको चार शून्य देखना चाहिए। यह RRGGBBAA प्रारूप में रंग काला का प्रतिनिधित्व करता है (अल्फा समर्थित नहीं है इसलिए यह वास्तव में सिर्फ RRGGBB00 प्रारूप है)। अगले चार बाइट्स अगले रंग को निर्दिष्ट करते हैं और इसी तरह जब तक आप FFFFFF00 (सफ़ेद) ऑफ़सेट 0xE2333 पर समाप्त नहीं हो जाते।

  1. अपने चयन के लिए इनमें से किसी भी चार-बाइट मान को संपादित करें। बस आरजीबी प्रारूप में उपयुक्त हेक्स मूल्यों का उपयोग करें, इसके बाद एक शून्य बाइट। उदाहरण के लिए, RGB (64, 128, 192) 40 80 C0 00 होगा।

  2. EXE में अपने परिवर्तनों को सहेजें और VB6 को आग दें। आपको पहले से निर्मित VB रंगों के कब्जे वाले स्लॉट में अपना नया रंग देखना चाहिए।


1
हम्म, मैंने ऑफिस 2003 के साथ सिस्टम पर सब कुछ टूल के साथ खोजा और इसे VB6.exe या एक फ़ोल्डर VB98 नामक कोई फ़ाइल नहीं मिली। क्या यह उत्तर केवल कार्यालय 2007 के लिए है जैसे ओपी के पास है? हालांकि संस्करण 6.0.97.82 कार्यालय 2003 के साथ खान की तुलना में पुराना है।
निक्से

1
@nixda मेरे सिस्टम पर कुछ भी नहीं - मुझे लगता है कि बॉन्ड अपने सिस्टम पर VB6 एप्लिकेशन का उल्लेख कर रहा है, एक्सेल में VBA एकीकृत नहीं। मैं एक्सेल निष्पादन योग्य और कुछ VBA DLL के माध्यम से एक नज़र रखने जा रहा हूं, और देख सकता हूं कि क्या मुझे कोई रंग तालिका मिल सकती है।
ब्रेकथ्रू

1
मेरे पास अपने पीसी पर Office 2010 है इसलिए मेरे पास VBE7.DLL है, VBE6.DLL नहीं है, लेकिन यह एक ही प्रक्रिया होनी चाहिए। रंग समान हैं। यदि आप प्रदर्शित किए गए क्रम में रंगों को देखते हैं, तो उन्हें होना चाहिए: ब्लैक = 00 00 00 00 नौसेना = 00 00 80 00 ग्रीन = 00 80 00 00 Turqoise = 00 80 80 00 Magenta = 80 00 00 00 बैंगनी = 80 00 80 00 ओलिव = 80 80 00 00 Lgt Grey = C0 C0 C0 00 Drk Grey = 80 80 80 00 ... मैंने प्रत्येक के आगे हेक्स रंग कोड जोड़े हैं। तो बस VBE6.DLL को एक हेक्स एडिटर में खोलें और निम्न हेक्स स्ट्रिंग की खोज करें:
बॉन्ड

1
00000000000080080080000000808000800000008000800080800000C0C0C00080808000 यह कई बार हो सकता है, लेकिन मैंने पाया है कि पहली रंग तालिका को संशोधित किया जाना चाहिए। देखें कि क्या यह आपके लिए काम करता है।
बंधन

1
बहुत बढ़िया जवाब, बॉन्ड। भविष्य के पाठकों के लिए, मुझे जिस कुंजी को बदलने की ज़रूरत थी वह हेक्स एडिट (बाइट नंबर 1,200,308) का उपयोग करके `12 50B4 'पर स्थित दूसरा (कार्यालय 2013, विंडोज 8.1) था
एंडी टेरा

5

जैसा कि कई ने उल्लेख किया है, बॉन्ड का समाधान (VB6.exe में रंगों की तालिका को संपादित करना) काम करेगा लेकिन आपको वीबी 6 शुरू करने पर हर बार विकल्प संवाद में अपने रंगों को रीसेट करना होगा। मैंने एक AutoIt स्क्रिप्ट बनाई है जो आपके लिए सभी काम करेगी, बस इसे आवश्यक रूप से संपादित करें जहां सभी CallSyntaxColoring () किए गए हैं:

Opt("WinTitleMatchMode", 2)
Opt("MouseClickDelay", 1)
Opt("MouseClickDownDelay", 1)
Opt("MouseClickDragDelay", 1)
Opt("SendKeyDelay", 1)
Opt("SendKeyDownDelay", 1)

Const $NORMALTEXT = 0
Const $SELECTIONTEXT = 1
Const $SYNTAXERRORTEXT = 2
Const $EXECUTIONPOINTTEXT = 3
Const $BREAKPOINTTEXT = 4
Const $COMMENTTEXT = 5
Const $KEYWORDTEXT = 6
Const $IDENTIFIERTEXT = 7
Const $BOOKMARKTEXT = 8
Const $CALLRETURNTEXT = 9

Const $AUTO = 0
Const $BLACK = 1
Const $DARKBLUE = 2
Const $DARKGREEN = 3
Const $DARKRED = 4
Const $DARKBABYBLUE = 5
Const $DARKPINK = 6
Const $DARKYELLOW = 7
Const $LIGHTGRAY = 8
Const $DARKGRAY = 9
Const $BLUE = 10
Const $GREEN = 11
Const $BABYBLUE = 12
Const $RED = 13
Const $PINK = 14
Const $YELLOW = 15
Const $WHITE = 16

If WinExists( "Microsoft Visual Basic" ) Then
   WinActivate("Microsoft Visual Basic") ; activates the visual basic window
   Send("!+to") ; opens the options menu
   Sleep(10)
   WinMove("Options", "", 0, 0) ; moves the options menu to the upper left corner of the screen
   MouseClick("primary", 100, 50, 1, 0) ; clicks the editor tab

   SetSyntaxColoring($NORMALTEXT, $WHITE, $BLACK)
   SetSyntaxColoring($SELECTIONTEXT, $AUTO, $AUTO)
   SetSyntaxColoring($SYNTAXERRORTEXT, $BLACK, $YELLOW)
   SetSyntaxColoring($EXECUTIONPOINTTEXT, $AUTO, $YELLOW)
   SetSyntaxColoring($BREAKPOINTTEXT, $WHITE, $DARKRED)
   SetSyntaxColoring($COMMENTTEXT, $DARKGREEN, $BLACK)
   SetSyntaxColoring($KEYWORDTEXT, $GREEN, $BLACK)
   SetSyntaxColoring($IDENTIFIERTEXT, $WHITE, $BLACK)
   SetSyntaxColoring($BOOKMARKTEXT, $WHITE, $BLACK)
   SetSyntaxColoring($CALLRETURNTEXT, $WHITE, $GREEN)

   MouseClick("primary", 210, 340, 1, 0) ; hit the ok button to apply the changes
EndIf

Func SetSyntaxColoring($syntax, $forecolor, $backcolor)
   SelectSyntax($syntax)
   SelectForecolor($forecolor)
   SelectBackcolor($backcolor)
EndFunc

Func SelectSyntax($syntax)
   ResetSyntaxList()
   RptSend("{DOWN}", $syntax)
EndFunc

Func SelectForecolor($color)
   ResetForecolorCbo()
   RptSend("{DOWN}", $color)
EndFunc

Func SelectBackcolor($color)
   ResetBackcolorCbo()
   RptSend("{DOWN}", $color)
EndFunc

Func ResetSyntaxList()
   MouseClick("primary", 50, 95, 1, 0)
   RptSend("{UP}", 9)
EndFunc

Func ResetForecolorCbo()
   MouseClick("primary", 50, 235, 1, 0)
   MouseClick("primary", 50, 235, 1, 0)
   RptSend("{UP}", 16)
EndFunc

Func ResetBackcolorCbo()
   MouseClick("primary", 125, 235, 1, 0)
   MouseClick("primary", 125, 235, 1, 0)
   RptSend("{UP}", 16)
EndFunc

Func RptSend($text, $rpt)
   For $i = 1 To $rpt
      Send($text)
   Next
EndFunc

मैं इसे अपने डेस्कटॉप पर रखता हूं और अब जब भी vb6 खोलना होता है तो मैं सिर्फ इसे डबल क्लिक करता हूं और ठीक उसी तरह जैसे सिंटैक्स कलरिंग आपके नियंत्रण में है।

संपादित करें 1: स्क्रिप्ट को थोड़ा तेज करें ताकि इसे जल्दी चलाया जा सके। मैं एक कार्यक्रम को एक साथ रखने के बारे में सोच रहा हूं जो आपके लिए VB6.EXE को संपादित करेगा ताकि रंग चयन आसान हो सके। मुझे आश्चर्य है कि अगर वीएस के लिए एक प्लगइन बनाकर ऑटो इट स्क्रिप्ट को खोदने का कोई तरीका है?

संपादित करें 2: एक उपयोगिता बनाई गई है जो आपको हेक्स संपादक का उपयोग किए बिना रंगों को एक्सई में संपादित करने की अनुमति देती है: VbClassicColorEditor । वह लिंक बिटकॉइन पर पब्लिक रिपॉजिटरी में जाता है।


स्क्रिप्ट और योगदान के लिए धन्यवाद! कोई भी मौका हमें VbClassicColorEditor पर एक अद्यतन लिंक मिल सकता है? आपने जो 404d पोस्ट किया है ...
एंडी टेरा

3

मैं सिर्फ पिछले उत्तरों का सारांश पोस्ट करना चाहता था क्योंकि यह पूरी तरह से स्पष्ट नहीं है कि Excel VBA में रंगों को बदलने के लिए क्या किया जाना चाहिए

नीचे दिए गए उदाहरण में मैं सोलराइज्ड के लिए रंग योजना जोड़ रहा हूं और मैं कार्यालय 2010 का उपयोग कर रहा हूं

चरण 0: इसे संशोधित करने से पहले VBE7.dll का बैकअप बनाएं - आपको चेतावनी दी गई है !!!

चरण 1: हेक्स संपादक में, VBE7.dll स्थित @ खोलें

"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL" 64 बिट के लिए

या

"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL" 32 बिट के लिए

चरण 2: का पता लगाएं 1 के घटित होने की

ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00`

और के साथ बदलें

00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00

चरण 3: इसका दूसरा पता लगाएं (सुनिश्चित करें कि आप फ़ाइल के ऊपर से खोज करें)

00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00

और के साथ बदलें

00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00

चरण 4: dll फ़ाइल सहेजें और फिर Excel> VBA संपादक> उपकरण> विकल्प> संपादक प्रारूप खोलें और कोड रंग सेट करें।

दोनों तारों को बदलना नेकेरियरी है क्योंकि यह रंगों को शटडाउन पर सही ढंग से सहेजने की अनुमति देता है और कलर एडिटर को एक्सेल क्रैशिंग के साथ खोलने की अनुमति देता है।

यह पता लगाने के लिए समय लगाने के लिए सभी पिछले उत्तरदाताओं के लिए धन्यवाद!


3

मैंने एक प्रोग्राम बनाया है जो इस सब को स्वचालित करता है, इस पर बहुत लंबा समय बिताया है, एक रंग बीनने का मज़ा लिया है। VB6 में बनाया गया है क्योंकि क्यों नहीं। संकलित कार्यक्रम और स्रोत कोड यहां उपलब्ध है । केवल DLL और VB6 के मेरे संस्करणों पर परीक्षण किया गया, कृपया कुछ भी बदलने से पहले बैकअप बनाएं - कोड में स्थान तय किए गए हैं।



यह एक बहुत पुराना सवाल है लेकिन मैं पूर्णता के लिए तौलना चाहूंगा

VBA या VB6 IDE में VS2012 कलर्स के लिए: VBE6.DLL / VBE7.DLL या VBA6.DLL खोलें

C:\Program Files (x86)\Common Files\microsoft shared\VBA\
or
C:\Program Files (x86)\VB98\ (Your VB6 install location)

अपने हेक्स संपादक के साथ

की पहली घटना को बदलें

ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00

साथ में

ff ff ff 00 1e 1e 1e 00 d4 d4 d4 00 00 00 00 00
ff 00 00 00 26 4f 78 00 ff ff 00 00 d6 9d 85 00
00 ff 00 00 60 8b 4e 00 00 ff ff 00 00 80 80 00
00 00 ff 00 56 9c d6 00 ff 00 ff 00 9f 74 b1 00

फिर शीर्ष पर लौटें और दूसरी घटना की जगह लें

00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00

साथ में

00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00

फिर रजिस्ट्री में निम्नलिखित को संशोधित करें

(For VBA)
HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common    
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common

(For VB6)
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic 

FontFace = 'Consolas'
CodeForeColors = '8 3 5 4 1 10 14 3 4 4 0 0 0 0 0 0 '
CodeBackColors = '2 6 4 8 10 2 2 2 16 10 11 12 13 14 15 0 '

यदि आप VBA के लिए संशोधन कर रहे हैं, तो VB6 के लिए अब अपने Hex संपादक में 'VB6.exe' खोलें और पहली घटना को संशोधित करें।

00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00

साथ में

00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00

यह VB6 के इंटरफ़ेस में प्रदर्शित रंग को सही करता है ताकि यदि आप चाहें तो रंगों में अन्य परिवर्तन कर सकें।

अन्य सभी जवाबों के लिए धन्यवाद, मैं खुद इस बारे में नहीं आया था, बस यह सोचा था कि यह एक ही पोस्ट में आवश्यक सभी जानकारी के लिए उपयोगी था (कहीं मैंने VB6.exe और VBA6.dll को एक साथ संशोधित करते हुए नहीं देखा था)। इस पद्धति का उपयोग करके आप उपलब्ध रंगों में से स्वतंत्र रूप से चयन करने में सक्षम होना चाहिए।

मैंने कुछ अन्य उत्तरों से भी रंगों को फिर से व्यवस्थित किया है ताकि vbRed, vbBlue, vbWhite आदि न बदलें ताकि आपको अभी भी कोड में वांछित परिणाम मिलें। यह पूरी तरह से परीक्षण नहीं किया गया है इसलिए हमेशा अपने जोखिम पर कार्यक्रमों को संशोधित करें।

एक छोटा सा कार्यक्रम एक साथ रखना अच्छा होगा जो आपके लिए ऐसा करेगा (जैसे कि गैलक्स ने किया था), मेरे पास उस प्रोग्राम का उपयोग करके रजिस्ट्री और वीबी 6 आईडीई के साथ लिखने के मुद्दे थे, और पूर्वावलोकन विंडो की तरह आना अच्छा होगा।

सीमाएं जो मैंने पाया है: यह संकेतक आइकनों का रंग नहीं बदलता है, आपको इसे स्वयं करना चाहिए।


2

Dnissley की प्रतिक्रिया से चारा लेना (जहां वह पूछता है कि क्या कोई ऐड-इन कर सकता है), मैंने VB6 के लिए ऐड-इन बनाया है। यह थोड़ा कच्चा है (और मैं समझाऊंगा कि क्यों जल्द ही), लेकिन यह काम करता है।

मैंने VB6 में एक नया ऐड-इन प्रोजेक्ट बनाया, जिसने मुझे डिफ़ॉल्ट "frmAddin" फॉर्म (जिसका मैं उपयोग नहीं करता) और "कनेक्ट" डिजाइनर दिया। मैंने स्वयं एक कलर क्लास जोड़ी है जिसमें निम्नलिखित शामिल हैं:

विकल्प स्पष्ट

Dim m_iForeColour इंटेगर के रूप में
डिगर m_iBackColour इंटेगर के रूप में
Dim m_iIndicatorColour इंटेगर के रूप में

सार्वजनिक संपत्ति को हमेशा के लिए छोड़ दें (पूर्णांक के रूप में बायल आईआईडी)
    m_iForeColour = iID
अंतिम संपत्ति
सार्वजनिक संपत्ति हमेशा के लिए प्राप्त करें () पूर्णांक के रूप में
    फ़ोरकॉलर = m_iForeColour
अंतिम संपत्ति

सार्वजनिक संपत्ति बैककॉलर (इंटीजर के रूप में बायवाल आईआईडी)
    m_iBackColour = iID
अंतिम संपत्ति
सार्वजनिक संपत्ति GetColour () पूर्णांक के रूप में
    बैककॉल = m_iBackColour
अंतिम संपत्ति

सार्वजनिक संपत्ति संकेतक इंगित करें (पूर्णांक के रूप में बायवाल IID)
    m_iIndicatorColour = iID
अंतिम संपत्ति
सार्वजनिक संपत्ति संकेतक के रूप में संकेतक () प्राप्त करें
    इंडिकेटरकॉलर = m_iIndicatorColour
अंतिम संपत्ति

और फिर मैंने "कनेक्ट" डिजाइनर में कोड में संशोधन किया है जो निम्नानुसार है:

विकल्प स्पष्ट

सार्वजनिक रूप से बूलियन के रूप में परिभाषित किया गया
सार्वजनिक VBnstance VBIDE.VBE के रूप में
कार्यालय के रूप में मंद mcbMenuCommandBar.ommandBarControl
नई frmAddIn के रूप में मंद mfrmAddIn
सार्वजनिक WithEvents MenuHandler CommandBarEvents कमांड बार इवेंट हैंडलर के रूप में

कार्यालय के रूप में मंद mcbToolbar.CommandBarControl
सार्वजनिक WithEvents MenuHandler2 CommandBarEvents के रूप में

रंग के रूप में मंद कोडकॉल्स ()

'************************************************* ****************************
'रनस्क्रिप्ट सब
'------------------------------------------------- ----------------------------
' विवरण:
'उस कोड को चलाता है जो कोड विंडो के लिए आवश्यक रंग सेट करता है
'सक्रिय आईडीई।
'*** एक साबित होने से पहले ही काम किया जाना चाहिए ***
'************************************************* ****************************
उप रनस्क्रिप्ट ()
    ReadColoursFile

    'उपकरण> विकल्प चुनें
    SendKeys "% to", 5
    'टैब पर जाएं, "विकल्प" चुनें
    SendKeys "+ {TAB}"
    SendKeys "{RIGHT}"

    'सूची बॉक्स चुनें
    SendKeys "{TAB}"

    रंग के रूप में मंद colourSetting
    आईगर के रूप में मंद iColour

    IColour के लिए = 0 से 9
        सेटकोर्स iColour, codeColours (iColour)
    अगला iColour

    SendKeys "~"
अंत उप

'************************************************* ****************************
'ReadColoursFile उप
'------------------------------------------------- ----------------------------
' विवरण:
'रंग फ़ाइल को डिस्क से पढ़ता है और कोडकॉल सरणी को पॉप्युलेट करता है
'SetColour * द्वारा सही रंगों के चयन के लिए विधियों द्वारा उपयोग किया जाता है
'विकल्प स्क्रीन।
'************************************************* ****************************
उप ReadColoursFile ()
    स्ट्रिंग के रूप में मंद कोलोरलाइन
    मंद colourArray () स्ट्रिंग के रूप में
    रंग के रूप में मंद colourSetting
    FileSystemObject के रूप में डिम ओएफएसओ

    सेट OFSO = नई FileSystemObject

    यदि OFSO.FileExists नहीं है (App.Path & "\ VB6CodeColours.dat") तो
        MsgBox "VB6CodeColours.dat" और App.Path में नहीं मिला, vbOKOnly, "VB6CodeColours सेटिंग्स फ़ाइल नहीं मिली!"
        उप से बाहर निकलें
    अगर अंत

    सेट ओएफएसओ = कुछ भी नहीं

    # 1 के रूप में App.Path और "\ VB6CodeColours.dat" खोलें
    रंग के रूप में कोडिमोल (9) को फिर से करें

    जबकि ईओएफ (1) नहीं
        लाइन इनपुट # 1, कोलोरलाइन
        colourArray = विभाजन (colourLine, ",")

        यदि IsNumeric (colourArray (0)) तब
            अगर codeColours (colourArray (0)) तो कुछ भी नहीं है
                ColourSetting = नया रंग सेट करें

                यदि IsNumeric (colourArray (1)) तब
                    colourSetting.ForeColour = CInt (colourArray (1))
                अगर अंत

                यदि IsNumeric (colourArray (2)) तब
                    colourSetting.BackColour = CInt (colourArray (2))
                अगर अंत

                यदि IsNumeric (colourArray (3)) तब
                    colourSetting.IndicatorColour = CInt (colourArray (3))
                अगर अंत

                कोड कोड सेट करें (colourArray (0)) = colourSetting
            अगर अंत
        अगर अंत
    बीतना

    # 1 बंद करें

    ColourSetting सेट करें = कुछ भी नहीं
अंत उप

'************************************************* ****************************
'सेटकोलॉज उप
'------------------------------------------------- ----------------------------
' विवरण:
'सूची से रंग आइटम का चयन करता है और फिर रंग चयनकर्ता को पुन: प्रसारित करता है
'उस आइटम से जुड़े नियंत्रण और उन्हें मूल्यों के अनुसार सेट करता है
'VB6CodeColours.dat फ़ाइल में सेट किया गया।
'************************************************* ****************************
उप SetColours (ByVal iColour इंटेगर के रूप में, रंग के रूप में ColourSetting)
    डिम iKey As Integer

    SendKeys "{HOME}"

    IKey = 1 को iColour के लिए
        SendKeys "{DOWN}"
    अगला iKey

    SetColourSelector colourSetting.ForeColour
    SetColourSelector colourSetting.BackColour
    SetColourSelector colourSetting.IndicatorColour

    SendKeys "+ {TAB}"
    SendKeys "+ {TAB}"
    SendKeys "+ {TAB}"
अंत उप

'************************************************* ****************************
'सेटकोलॉरसेलर सब
'------------------------------------------------- ----------------------------
' विवरण:
'चयनकर्ता कॉम्बो में रंग सेट करता है। मान लिया गया है कि इस पर ध्यान केंद्रित किया गया है
'कोड चलाने से पहले नियंत्रण से पहले (पहली पंक्ति टैब के लिए)
'मान लिया गया नियंत्रण)।
'************************************************* ****************************
उप SetColourSelector (पूर्णांक के रूप में ByVal iColour)
    डिम iKey As Integer

    SendKeys "{TAB}"
    SendKeys "{HOME}"

    IKey = 1 को iColour के लिए
        SendKeys "{DOWN}"
    अगला iKey
अंत उप

'************************************************* ****************************
'AddinInstance_OnConnection उप
'------------------------------------------------- ----------------------------
' विवरण:
'यह विधि तब चलती है जब Addin IDE द्वारा लोड किया जाता है
'************************************************* ****************************
निजी उप AddinInstance_OnConnection (ByVal Application as Object, ByVal ConnectMode as AddInDesignerObjects.ext_ConnectMode, ByVal AddInstst as ऑब्जेक्ट, रिवाज (आदि) के रूप में वेरिएंट)
    त्रुटि GoTo ErrorHandler पर

    'vb उदाहरण सहेजें
    VBInstance = एप्लिकेशन सेट करें

    यदि ConnectMode ext_cm_External फिर
        McbMenuCommandBar = AddToAddInCommandBar ("VB6 रंग वीडियो") सेट करें
        'घटना को डुबाओ
        मुझे सेट करें। MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)

        कार्यालय के रूप में मंद oStdToolbar.ommandBar
        कार्यालय के रूप में डिम oStdToolbarItem.CommandBarControl

        सेट करें OStdToolbar = VBInstance.CommandBars ("मानक")
        सेट oStdToolbarItem = oStdToolbar.Controls.Add (प्रकार: = msoControlButton)
        oStdToolbarItem.Style = msoButtonCaption
        oStdToolbarItem.Caption = "आईडीई रंग सेट करें"
        oStdToolbarItem.BeginGroup = True
        मुझे सेट करें। MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
    अगर अंत

    उप से बाहर निकलें
ErrorHandler:
    MsgBox Err.Description
अंत उप

'************************************************* ****************************
'AddinInstance_OnDisconnection उप
'------------------------------------------------- ----------------------------
' विवरण:
'यह विधि तब चलती है जब आईडीई द्वारा एडिन को हटा दिया जाता है और किसी को साफ कर देता है
'संदर्भ आदि।
'************************************************* ****************************
निजी उप व्यसन
    त्रुटि फिर से शुरू पर

    'कमांड बार प्रविष्टि को हटाएं
    mcbMenuCommandBar.Delete

    ऐड-इन बंद करें
    अगर FormDisplayed तब
        SaveSetting App.Title, "Settings", "DisplayOnConnect", "1"
        फॉर्मडाइप्लेड = गलत
    अन्य
        SaveSetting App.Title, "Settings", "DisplayOnConnect", "0"
    अगर अंत

    अनलोड mfrmAddIn
    MfrmAddIn = कुछ भी नहीं सेट करें

    मेनूहैंडलर सेट करें = कुछ भी नहीं
    MenuHandler2 = कुछ भी नहीं सेट करें
अंत उप

'************************************************* ****************************
'MenuHandler_Click उप
'------------------------------------------------- ----------------------------
' विवरण:
'जब मेनू आइटम पर क्लिक किया जाता है तो यह विधि आवश्यक कार्य करती है।
'************************************************* ****************************
निजी सब मेनूहैंडलर_क्लिक (बायल कमांडबार्करोल ऑब्जेक्ट के रूप में, बूलियन के रूप में संभाला, बूलियन के रूप में रद्द करें)
    RunScript
अंत उप

'************************************************* ****************************
'MenuHandler2_Click उप
'------------------------------------------------- ----------------------------
' विवरण:
'टूलबार बटन पर क्लिक करने पर यह विधि आवश्यक कार्य करती है।
'************************************************* ****************************
निजी उप मेनूहैंडलर 2_क्लिक करें (ऑब्जेक्ट के रूप में बायल कमांडबर्कंट्रोल, बूलियन के रूप में संभाला, बूलियन के रूप में रद्द करें)
    RunScript
अंत उप

'************************************************* ****************************
'AddToAddInCommandBar उप
'------------------------------------------------- ----------------------------
' विवरण:
'निर्दिष्ट आइटम को मेनू सूची में जोड़ता है।
'************************************************* ****************************
AddToAddInCommandBar (स्ट्रिंग के रूप में अनुकूलन) कार्यालय के रूप में। CommandBarControl
    मंद cbMenuCommandBar Office के रूप में। CommandBarControl 'कमांड बार ऑब्जेक्ट
    वस्तु के रूप में मंद cbMenu

    त्रुटि फिर से शुरू पर

    'देखें कि क्या हमें ऐड-इन्स मेनू मिल सकता है
    सेट cbMenu = VBInstance.CommandBars ("ऐड-इन्स")
    अगर cbMenu कुछ भी नहीं है
        'उपलब्ध नहीं है इसलिए हम असफल हैं
        कार्य से बाहर निकलें
    अगर अंत

    त्रुटि GoTo ErrorHandler पर

    'इसे कमांड बार में जोड़ें
    CbMenuCommandBar = cbMenu.Controls.Add (1) सेट करें
    'कैप्शन सेट करें
    cbMenuCommandBar.Caption = sCaption

    AddToAddInCommandBar = cbMenuCommandBar सेट करें

    कार्य से बाहर निकलें
ErrorHandler:
    'शान से बाहर निकलें
अंत समारोह

यह कोड एप्लिकेशन को मेरे द्वारा वांछित फ़ाइल के रंगों को पढ़ने की अनुमति देता है जो .dll (VB6CodeColours.dat) के समान निर्देशिका में रहता है। इस फ़ाइल में निम्नलिखित शामिल हैं (और यह VB6.EXE में आपके द्वारा प्रतिस्थापित किए जाने वाले रंगों के आधार पर भिन्न होगा, इसलिए एक सीधी प्रतिलिपि और पेस्ट काम नहीं करेगा।

0,14,12,0
1,0,0,0
2,16,13,0
3,0,15,15
4,16,5,5
5,7,12,0
6,11,12,0
7,8,12,0
8,16,10,10
9,16,3,3

जिह्वा लगती है, लेकिन मैं समझाता हूँ। इसमें प्रारूप "कोड कलर", "फोरग्राउंड", "बैकग्राउंड", इंडिकेटर "है, इसलिए शीर्ष पंक्ति फोरग्राउंड के लिए कॉम्बो में 14 वें आइटम के लिए" सामान्य पाठ ", पृष्ठभूमि के लिए 12 वें और संकेतक के लिए 1 सेट करेगी। ।

क्यों मैंने कहा कि यह एक बहुत ही क्रूड समाधान है: * यह SendKeys का उपयोग करता है। कोई और स्पष्टीकरण की आवश्यकता नहीं है, मुझे यकीन है कि :) * उपयोगकर्ता को प्रभावी होने के लिए मेनू / टूलबार विकल्प पर क्लिक करना होगा। * कोड सबसे अच्छा संरचित नहीं है (मेरी राय में) लेकिन उस समय की मात्रा पर आधारित था जिसे मैं उस समय समर्पित कर सकता था। मैं भविष्य में इसे बेहतर बनाने का लक्ष्य रखता हूं, लेकिन यह वर्तमान स्थिति में मेरे लिए ठीक काम करता है (इसलिए मैं शायद इसे छोड़ दूंगा!)।

शायद आधार के साथ, कोई व्यक्ति इस पर और विस्तार कर सकता है।


2

यहां बताया गया है कि अपने रंग चयन को कैसे स्थायी रखें। थोड़ा और अधिक हेक्स संपादन। यदि आपने बॉन्ड द्वारा सुझाए गए प्रतिस्थापन का सुझाव दिया है तो आपके हाथ में निम्नलिखित होना चाहिए: बेसिक (क्लासिक) के लिए RGBA मान 0 से 15 तक अनुक्रमित किए गए, और आपके कस्टम रंगों के RGBG मान उसी तरह अनुक्रमित हुए। अब अनुक्रमित के निम्नलिखित अनुक्रम में "क्लासिक" RGBA मूल्यों से निर्मित बाइट्स अनुक्रम के लिए VBEx.DLL खोजें: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (यानी सफेद, ग्रे, गहरे भूरे, काले, लाल, गहरे लाल, आदि)। पैटर्न यादृच्छिक नहीं है, यह मानों से लिया गया है, जो रजिस्ट्री में संग्रहीत है, टेक्स हेक्स की पोस्ट देखें। खोज के लिए हेक्स स्ट्रिंग को 'FFFFFF00C0C0C000808080000000000FFFF000000 ...' आदि की तरह दिखना चाहिए। "कस्टम" रंगों के RGBA मानों के साथ पाया गया बाइट्स अनुक्रम बदलें, जैसे 15, 7, 8, आदि। उसी तरह अब वीएस यूआई में आपके द्वारा चुने गए सभी रंगों को रजिस्ट्री में संग्रहीत किया जाएगा और आवेदन पुनः आरंभ होने के बाद लागू किया जाएगा। खैर, सभी, लेकिन "संकेतक" रंग। ये हमेशा डिफॉल्ट करने के लिए रीसेट होते हैं। टिप्पणियाँ:

  1. VBE7.DLL (MSO2010) में मुझे 0x15A98C पर इस तरह से ऑर्डर किए गए बाइट्स का केवल एक ही क्रम मिला है।
  2. जैसा कि बॉन्ड की पोस्ट में उल्लेख किया गया है कि पहले प्रतिस्थापन के लिए कई बाइट्स सीक्वेंस हैं (मूल आरजीबीए मान 0 से 15 तक सीधे ऑर्डर किए गए हैं)। मैंने केवल एक ही परिवर्तन किया है, पिछले नोट से ऑफसेट (0x15A5AC पर पाया गया)।
  3. ऊपर आप अपने जोखिम पर कर रहे हैं :) और बैकअप के लिए मत भूलना।

प्रारंभिक शोध के लिए टेक्स हेक्स और बॉन्ड का धन्यवाद ।

UPD: MSO2007 (VBE6.DLL) और MSO2013 (VBE7.DLL) के साथ परीक्षण किया गया। एक आकर्षण की तरह काम करते हैं।


2

बॉन्ड का समाधान (VB6.exe में रंग तालिका को संपादित करना) VB6 IDE में रंग तालिका को संशोधित करने के लिए पूरी तरह से काम करता है। हालाँकि, मैंने पाया कि जब एक संशोधित रंग चुना जाता है और VB6 बंद हो जाता है, तो VB6 रजिस्ट्री में संशोधित रंग को ठीक से सहेजने में सक्षम नहीं होता है।

आम तौर पर, VB6 प्रत्येक पाठ आइटम के लिए 16-मूल्य रंग तालिका में एक सूचकांक लिखेगा जिसमें उसका रंग संशोधित हो सकता है।

रंग सूचकांक यहां रजिस्ट्री को लिखे गए हैं:

HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeForeColors
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeBackColors

उदाहरण के लिए, CodeForeColors मूल्य कुछ इस तरह दिखेगा:

6 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0

1 से 16 तक के मान रंग तालिका में एक रंग का प्रतिनिधित्व करते हैं और 0 का मतलब 'ऑटो' है।

हालाँकि, जब एक संशोधित रंग का चयन किया जाता है, तो VB6, इंडेक्स रेंज के बाहर की संख्या को रजिस्ट्री में लिख देगा और CodeForeColors मूल्य कुछ इस तरह दिखाई देगा:

5245006 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0

अगली बार जब वीबी 6 शुरू किया जाता है, तो यह उस आइटम के लिए सही रंग सेट करने में सक्षम नहीं होगा जिसे संशोधित रंग में सेट किया गया था।

मैं अभी भी एक समाधान निकालने की कोशिश कर रहा हूं, लेकिन जो मैंने अभी तक पाया है उसे पोस्ट करना चाहता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.