2012-01-08 9 views
9

मैं कैनवास पर कुछ सिस्टम तत्वों को आकर्षित करने के लिए DrawThemeBackground फ़ंक्शन का उपयोग कर रहा हूं, और मुझे किसी फ़ॉर्म के शीर्षक बटनों को आकर्षित करने की आवश्यकता है, मुझे याद आया कि एकमात्र हिस्सा यह है कि मैं शीर्षक बटन के default आकार कैसे प्राप्त कर सकता हूं। Exist any Uxtheme function to get that info?क्या Uxtheme फ़ंक्शन को न्यूनतम, अधिकतम और बंद बटन के डिफ़ॉल्ट आकार के लिए उपयोग करना चाहिए?

enter image description here

उत्तर

7

ऐसा लगता है कि यह अधिक कठिन है तो यह लगता है।

पहले GetThemeMetric या GetThemeInt है। लेकिन आप बहुत सारे संदर्भ देखेंगे कि ये फ़ंक्शन लौटाते हैं, कुछ "तत्व नहीं मिला", जब आप कैप्शन बटन के गुण पुनर्प्राप्त करने का प्रयास करते हैं।

फिर GetThemePartSize है। यह कुछ काम करने लगता है। उदाहरण के लिए यह WP_CLOSEBUTTON के लिए ठीक काम करता है, लेकिन यह WP_MINBUTTON के लिए उदाहरण के लिए बकवास देता है। मैं इस फ़ंक्शन के उपयोग का सुझाव नहीं दूंगा क्योंकि यह डिफ़ॉल्ट बटन के आयामों को पुनर्प्राप्त करता है। उदाहरण के लिए उपयोगकर्ता ने शीर्षक आकार बदल दिया है, तो आपको सही मान नहीं मिलेगा। वैसे भी, इसे इस तरह कहा जा सकता है:

uses 
    uxtheme, themes; 
... 

var 
    Err: HRESULT; 
    Size: TSize; 
begin 
    Err := GetThemePartSize(ThemeServices.Theme[teWindow], 0, 
          WP_CLOSEBUTTON, CBS_NORMAL, nil, TS_TRUE, Size); 

मुझे नहीं पता कि क्या पूर्व दो कार्यों वापसी होगी अगर वे (वर्तमान शीर्षक पट्टी आकार या डिफ़ॉल्ट शीर्षक पट्टी आकार के लिए बटन के आयाम) में काम किया है।


सटीक परिणाम प्राप्त करने का एकमात्र संभावित तरीका WM_GETTITLEBARINFOEX संदेश का उपयोग करना प्रतीत होता है। लेकिन एक कमी है; यह केवल Vista और ऊपर के लिए काम करता है। आपके द्वारा उपयोग किए जाने वाले डेल्फी संस्करण (D2007) के आधार पर आपको उस संदेश और संरचना को परिभाषित करने की आवश्यकता हो सकती है।

const 
    CCHILDREN_TITLEBAR = 5; 
    WM_GETTITLEBARINFOEX = $033F; 

type 
    tagTITLEBARINFOEX = record 
    cbSize: DWORD; 
    rcTitleBar: TRect; 
    rgstate: array[0..CCHILDREN_TITLEBAR] of DWORD; 
    rgrect: array [0..CCHILDREN_TITLEBAR] of TRect; 
    end; 
    TITLEBARINFOEX = tagTITLEBARINFOEX; 
    TTitleBarInfoEx = tagTITLEBARINFOEX; 
    PTitleBarInfoEx = ^TTitleBarInfoEx; 

... 

var 
    TitleInfo: TTitleBarInfoEx; 
begin 
    SendMessage(Handle, WM_GETTITLEBARINFOEX, 0, NativeInt(@TitleInfo)); 

उसके बाद, आप रेक्ट TitleInfo.rgrect[5] से बंद करें बटन के लिए आकार प्राप्त कर सकते हैं। विवरण के लिए "TITLEBARINFOEX structure" देखें। ध्यान दें कि मान स्क्रीन निर्देशांक में हैं।


आप XP और/नीचे या समर्थन करने के लिए की जरूरत है, मैं सुझाव है कि आप (", एक खिड़की शीर्षक या शीर्षक पट्टी में एक बटन की चौड़ाई पिक्सल में" ) अच्छे पुराने GetSystemMetrics(SM_CXSIZE) और GetSystemMetrics(SM_CYSIZE) उपयोग करने के लिए। यदि एरो सक्षम है, तो थीम के सक्षम होने पर आपको कुछ अनुमानों को कसरत करने की आवश्यकता होगी।

0

मुझे लगता है कि SystemParametersInfoSPI_GETNONCLIENTMETRICS साथ आप जो खोज रहे हैं है। मुझे लगता है कि कम से कम बटन NONCLIENTMETRICS का उपयोग करें। iSmCaptionWidth जबकि चौड़ाई निर्धारित करने के लिए करीब iCaptionWidth का उपयोग करता है।

+0

मुझे संदेह है कि यह यह है। यह निश्चित रूप से विंडोज क्लासिक के लिए मूल्य देगा। –

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

  • कोई संबंधित समस्या नहीं^_^