मैं कैनवास पर कुछ सिस्टम तत्वों को आकर्षित करने के लिए DrawThemeBackground
फ़ंक्शन का उपयोग कर रहा हूं, और मुझे किसी फ़ॉर्म के शीर्षक बटनों को आकर्षित करने की आवश्यकता है, मुझे याद आया कि एकमात्र हिस्सा यह है कि मैं शीर्षक बटन के default
आकार कैसे प्राप्त कर सकता हूं। Exist any Uxtheme function to get that info?
क्या Uxtheme फ़ंक्शन को न्यूनतम, अधिकतम और बंद बटन के डिफ़ॉल्ट आकार के लिए उपयोग करना चाहिए?
उत्तर
ऐसा लगता है कि यह अधिक कठिन है तो यह लगता है।
पहले 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)
उपयोग करने के लिए। यदि एरो सक्षम है, तो थीम के सक्षम होने पर आपको कुछ अनुमानों को कसरत करने की आवश्यकता होगी।
मुझे लगता है कि SystemParametersInfoSPI_GETNONCLIENTMETRICS
साथ आप जो खोज रहे हैं है। मुझे लगता है कि कम से कम बटन NONCLIENTMETRICS का उपयोग करें। iSmCaptionWidth
जबकि चौड़ाई निर्धारित करने के लिए करीब iCaptionWidth
का उपयोग करता है।
मुझे संदेह है कि यह यह है। यह निश्चित रूप से विंडोज क्लासिक के लिए मूल्य देगा। –