2010-01-06 18 views
9

माइक्रोसॉफ्ट के User Experience Interaction Guidelines एक मेनू बटन बनाना है जब एक मेनू बटन का उपयोग करने के लिए कुछ यूआई के दिशा निर्देशों दे:Windows में

http://i.msdn.microsoft.com/Aa511453.command51(en-us,MSDN.10).png

कैसे मैं इन मेनू बटनों में से एक बना सकता हूँ? मैं

  • के बारे में जानकारी मिल गया है Vista में एक विभाजन बटन बनाने के लिए कैसे और
  • ऊपर एक लटकती मेनू के साथ एक उपकरण पट्टी बटन बनाने का तरीका
  • एक नियमित पुशबटन बना सकते हैं और मैन्युअल रूप से करने के लिए कैसे एक onclick ऊपर तार ईवेंट हैंडलर कि एक मेनू

पॉप अप होता है लेकिन वहाँ किसी भी मानक तरीका एक बटन, एक उपकरण पट्टी में नहीं बनाने के लिए है त्रिकोण थोड़ा नीचे के साथ, कि स्वचालित रूप से जब क्लिक एक मेनू दिखाई नहीं देता?

(मैं डेल्फी/सी ++ बिल्डर का उपयोग कर रहा है, लेकिन अन्य समाधान का स्वागत है।)

उत्तर

11

आप पॉपअप को मजबूर करने के लिए ऑनक्लिक का उपयोग कर सकते हैं, और स्थिरता के लिए कर्सर की स्थिति का उपयोग नहीं करते हैं, बल्कि नियंत्रण स्थिति का उपयोग नहीं करते हैं।

procedure TForm1.Button1Click(Sender: TObject); 
var 
    pt : TPoint; 
begin 
    Pt.X := Button1.Left; 
    Pt.Y := Button1.Top+Button1.Height; 
    pt := ClientToScreen(Pt); 
    PopupMenu1.Popup(pt.x,pt.y); 
end; 

फिर आप या तो एक डेल्फी 2010 बटन, या किसी पिछले संस्करण का उपयोग कर TBitBtn "ग्लिफ़" और एक उचित छवि के लिए बिटमैप/ग्लिफ़ संपत्ति आवंटित और दाएं संरेखित जोड़ सकते हैं।

+3

आप डाउन पॉइंटिंग छोटे त्रिभुज चरित्र ▾ (http://www.fileformat.info/info/unicode/char/25be/index.htm) का उपयोग भी कर सकते हैं –

+0

क्या मुझे त्रिभुज दिखाने के लिए कुछ भी करने की ज़रूरत है ऊपर? यह मेरे नियंत्रण में कोशिश करते समय एक बॉक्स (अपरिचित चरित्र) के रूप में प्रस्तुत करता है। –

+0

यदि आपको वांछित चरित्र के साथ फ़ॉन्ट रखने का आश्वासन नहीं दिया जा सकता है, तो दाईं ओर गठबंधन वाले ग्लाइफ वाला थोड़ा-सा बटन शायद बेहतर विचार है। आप उचित अंतर्निहित छवि के लिए ओएस से पूछने में सक्षम हो सकते हैं, लेकिन यह एक अलग प्रश्न के लिए एक विषय है। –

4

आप डेल्फी का कौन सा संस्करण उपयोग कर रहे हैं का उल्लेख नहीं है, लेकिन डेल्फी 2010 में TButton इस के लिए नए गुण है : DropDownList जिसे मेनू आइटम को परिभाषित करने के लिए TPopupMenu से जोड़ा जा सकता है, और स्टाइल जिसे bsSplitButton पर सेट किया जा सकता है।

यह एक बटन बनाता है जिसे आप दबा सकते हैं, इसके दाईं ओर एक ड्रॉपडाउन तीर भी है, जब आप बटन में इस कोड को तीर के बाईं ओर क्लिक करते हैं तो मेनू पॉपअप बनाने के लिए हैंडलर को नौकरी करना चाहिए।

procedure TForm1.Button1Click(Sender: TObject); 
var 
    CursorPos: TPoint; 
begin 
    GetCursorPos(CursorPos); 
    PopupMenu1.Popup(CursorPos.X, CursorPos.Y); 
end; 

डेल्फी के पिछले संस्करणों में मुझे लगता है कि आप TToolBar का इस्तेमाल किया था।

+0

bsSplitButton ड्रॉपडाउन करता है, लेकिन जब बटन को विभाजक के बाईं ओर क्लिक नहीं किया जाता है। दोनों विधियों को संसाधित करने के लिए केवल क्लिक करने के लिए आसान है। – skamradt

+0

मैंने देखा कि स्प्लिट बटन कैसे करें (डेल्फी 200 9 में भी उपलब्ध है, जिसे हम उपयोग कर रहे हैं), लेकिन माइक्रोसॉफ्ट के दस्तावेज़ मेनू बटन को स्प्लिट बटन और पुश बटन दोनों से अलग करते हैं, और ऐसा लगता है कि ऐसा करने का एकमात्र तरीका मेनू बटन ऑनक्लिक के साथ अनुकरण करना है। –

+1

यह शायद ही कभी * सिमुलेशन *, जोश है। आपको लगता है कि "असली" मेनू बटन क्या करते हैं, अगर मेनू पर क्लिक नहीं किया जाता है? मेरा मतलब है, आप एक टीएमएनयू बटन घटक बना सकते हैं, लेकिन यह सब 'ऑनक्लिक' ईवेंट हैंडलर को कॉल करने के बजाय अपनी 'पॉपअपमेनू' प्रॉपर्टी को प्रदर्शित करने के लिए 'क्लिक' विधि को ओवरराइड कर देगा। तो आप वास्तव में केवल एक फ़ंक्शन कॉल को सहेज लेंगे। –