2012-12-25 19 views
6

में केवल एक वीसीएल घटक स्टाइलिंग मुझे पता है कि घटकों के लिए कस्टम स्टाइल को अक्षम करना संभव है, लेकिन मैं केवल एक घटक वर्ग के लिए शैलियों को कैसे सक्षम कर सकता हूं? उदाहरण के लिए पूरे फॉर्म और सभी घटकों को अनस्किन छोड़ दें, और त्वचा केवल टीबटन छोड़ दें। इस छवि की तरह।डेल्फी

enter image description here

+3

जैसे कुछ घटक के साथ काम नहीं करता है, तो आप सिर्फ स्टाइल बटन की जरूरत है - स्टाइल खोजने की कोशिश बटन - 'टीबटन' वंश घटक जो सामान्य 'टीबटन' की तरह दिखता नहीं है। परियोजना के लिए वीसीएल स्टाइल कार्यक्षमता जोड़ना और फिर इसे 'टीबटन' को छोड़कर, पूरी परियोजना के लिए इसे अक्षम करना, परियोजना में केवल एक बटन को त्वचा के लिए अच्छा तरीका नहीं है। – teran

+0

डेल्फी में स्टाइलिंग मज़ेदारता के लिए यह अजीब लग रहा है और पूरे एप्लिकेशन पर आवेदन किए बिना इसका उपयोग करने में सक्षम नहीं है। – Zelenov

+0

@Zelenov मुझे यह अजीब नहीं लगता - यह उस उद्देश्य के लिए डिज़ाइन किया गया था। जब तक आप थीम लागू कर रहे हों, तब तक आप पूरे एप्लिकेशन को स्किनिंग मानते हैं। व्यक्तिगत रूप से मुझे इन शैलियों का उपयोग केवल त्वचा के लिए कुछ अजीब लगता है - यह कैसे काम करता है में तंत्र दिया जाता है। आपके उद्देश्य के लिए, मैं अपना खुद का कस्टम बटन नियंत्रण बनाउंगा, जो कि तुच्छ है। –

उत्तर

13

VCL के अधिकांश आंतरिक रूप से नियंत्रित करता है StyleServices वैश्विक समारोह तरीकों नियंत्रण आकर्षित करने के लिए प्राप्त करने के लिए उपयोग करता है। इसलिए यदि आप वीसीएल स्टाइल का उपयोग नहीं कर रहे हैं, तो StyleServices थीम्ड नियंत्रण (UxTheme API) को आकर्षित करने के लिए विंडोज एपीआई फ़ंक्शंस में एक उदाहरण लौटाएं। क्योंकि त्वचा के लिए कोई रास्ता नहीं है (वीसीएल शैलियां लागू करें) केवल एक वर्ग नियंत्रण (कम से कम आप स्वयं नियंत्रण को आकर्षित करते हैं)।

तो एकमात्र विकल्प एक वीसीएल स्टाइल लागू होता है और फिर एक ही प्रकार को छोड़कर सभी नियंत्रणों के लिए अक्षम होता है जिसे आप ढूंढ रहे हैं।

आप एक VCL शैली

enter image description here

और अब के बाद फोन उपरोक्त विधि

DisableVclStyles(Self,'TButton'); 

enter image description here

के साथ इस रूप की तरह इस

procedure DisableVclStyles(Control : TControl;const ClassToIgnore:string); 
var 
    i : Integer; 
begin 
    if Control=nil then 
    Exit; 

    if not Control.ClassNameIs(ClassToIgnore) then 
    Control.StyleElements:=[]; 

    if Control is TWinControl then 
    for i := 0 to TWinControl(Control).ControlCount-1 do 
     DisableVclStyles(TWinControl(Control).Controls[i], ClassToIgnore); 
end; 

चेक कुछ का उपयोग कर सकते

नोट: StyleElements संपत्ति का उपयोग कर ओ vcl शैलियों को निष्क्रिय सक्षम करने के लिए (TStringGrid, TBitBtn, TSpeedButton और इसी तरह)

+0

मैं इसे XE2 में कोशिश कर रहा हूं और 'टीकंट्रोल' में कोई संपत्ति नहीं है 'स्टाइल एलीमेंट्स' –

+0

मुझे लगता है कि मुझे अभी आपका दूसरा जवाब नहीं मिला है: http://stackoverflow.com/questions/16538890/how-to-color-the -बैकग्राउंड-ऑफ-ए-टॉकबोबॉक्स-साथ-vcl-शैलियों-सक्षम –

+0

क्या होगा यदि मेरा घटक डेटा मॉड्यूल में बनाया गया हो? जब मैं "DisableVclStyles (Self, 'TButton') डालता हूं;" डेटा मॉड्यूल में आईडीई मुझे यह त्रुटि देता है: असंगत प्रकार: 'TControl' और 'TDMRotinas' –