2010-11-26 15 views
6

मुझे त्रुटि/चेतावनी/जानकारी के लिए 16x16 पिक्सेल आइकन प्रदर्शित करने की आवश्यकता है। दुर्भाग्य से LoadIcon(0, IDI_*) और LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED) हमेशा मुझे आइकन का 32x32 संस्करण दें।एक छोटा सिस्टम आइकन कैसे लोड करें?

मैंने ShGetStockIconInfo पढ़ा है, लेकिन यह केवल Vista से उपलब्ध है और मुझे अभी भी XP का समर्थन करने की आवश्यकता है।

कोई विचार?

मैं TImage घटक के साथ डेल्फी 2010 का उपयोग कर रहा हूं, यदि यह मायने रखता है।

+0

क्या वह आइकन है जिसे आप 16x16 के रूप में लोड करने का प्रयास कर रहे हैं? यदि आइकन केवल 32x32 है, तो आप हमेशा 32x32 प्राप्त करते हैं। –

+0

ये आइकन 16/32/48 पीएक्स –

उत्तर

15

समस्या यह है कि जब आप ऐसा करते हैं तो आपको आइकन का कैश संस्करण मिलता है, जो सिस्टम लोड होता है। यह बड़े आकार का आइकन होगा, आमतौर पर 32x32। यह महत्वपूर्ण नहीं है कि आप किस आकार को निर्दिष्ट करते हैं।

आप क्या कर सकते user32.dll में वांछित संसाधन ID का पता लगा और कुछ इस तरह का उपयोग करें:

LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON, 
    16, 16, LR_DEFAULTCOLOR); 

आप बेहतर होगा GetSystemMetrics(SM_CXSMICON) कॉल करने के लिए करने के लिए के बजाय चिह्न आकार की पकड़ पाने के लिए हार्ड कोड 16, लेकिन आप शायद पहले ही यह जानते हैं।

मुझे यकीन नहीं है कि आपको उपयोगकर्ता 32 में संसाधनों के लिए संसाधन आईडी कहां मिलती है, या भले ही वे गारंटी दें कि वे विभिन्न विंडोज संस्करणों में निरंतर बने रहेंगे। मेरा अनुमान है कि वे करेंगे क्योंकि बहुत सारे कार्यक्रम तोड़ेंगे, लेकिन यह सिर्फ शुद्ध अनुमान है।

+0

में उपलब्ध हैं उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद कि यह क्यों काम नहीं कर रहा है! –

+5

100: आईडीआई_एपलाइजेशन, 101: आईडीआई_ चेतावनी, 102: आईडीआई_क्वेशन, 103: आईडीआई_ईआरआरओआर, 104: आईडीआईइफॉर्मेशन, 105: आईडीआई_विनलोज़, 106: आईडीआई_SHIELD, रिसोर्सहेकर का उपयोग इंजीनियर को रिवर्स करने के लिए किया गया –

+0

अब यह काम कर रहा है। अभी भी विभिन्न विंडोज संस्करणों पर परीक्षण करने की आवश्यकता है लेकिन अब तक अच्छा लग रहा है! धन्यवाद! –

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