2008-10-24 31 views

उत्तर

6

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

1

यदि आप टूलबार का उपयोग नहीं करना चाहते हैं, तो राइज (www.raize.com) और एक्सप्रेस एडिटर्स (www.DevExpress.com) पुस्तकालयों में ऐसे घटक होते हैं जो ऐसा कर सकते हैं।

10

मुझे लगता है कि आप एक बटन का मतलब है जो क्लिक करते समय मेनू को छोड़ देता है।

आप अपने बटन को मैन्युअल रूप से कोड कर सकते हैं इसके तहत एक TPopupMenu ड्रॉप करने के लिए क्लिक करें।

उदाहरण: अपने फॉर्म पर एक TClickEvent (शायद एक TButton) और एक TPopupMenu के साथ कुछ भी ड्रॉप करें। कुछ मेनू आइटम जोड़ें। फिर निम्न ऑनक्लिक ईवेंट हैंडलर जोड़ें:

procedure TForm86.Button1Click(Sender: TObject); 
var 
    button: TControl; 
    lowerLeft: TPoint; 
begin 
    if Sender is TControl then 
    begin 
    button := TControl(Sender); 
    lowerLeft := Point(button.Left, button.Top + Button.Height); 
    lowerLeft := ClientToScreen(lowerLeft); 
    PopupMenu1.Popup(lowerLeft.X, lowerLeft.Y); 
    end; 
end; 

और व्हायोला! जादू की तरह। यदि आप इसका पुन: उपयोग करने की योजना बना रहे हैं तो आप इसे एक घटक में लपेट सकते हैं। शायद इसे ऑनलाइन भी बेच दें।

नोट: आप एक देरी चाहते हैं, तो एक और तरीका है कि कोड को निकालने और उसके बाद एक टाइमर OnClick सेट और OnMouseLeave की घड़ी बदल जाते हैं। फिर यदि टाइमर आग लगती है तो आप निकाली गई विधि को कॉल कर सकते हैं। सुनिश्चित नहीं है कि आप कीबोर्ड क्लिक पर इसे कैसे करेंगे। मुझे नहीं पता कि फ़ायरफ़ॉक्स, आदि या तो इसका समर्थन करता है।

+0

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

+0

क्या आप स्पीडबटन के ऑनक्लिक ईवेंट में टाइमर नहीं लगा सकते हैं, और टाइमर का निष्पादन ईवेंट परीक्षण यह देखने के लिए है कि पॉपअपमेनू अभी भी दिखाई दे रहा है या नहीं? – Argalatyr

+0

यदि बटन स्क्रीन के निचले भाग के पास रखा गया है, तो बटन बटन के निचले हिस्से से शुरू होने पर नीचे रखेगा, इस प्रकार इसे कवर करेगा, जो शायद आप नहीं चाहते हैं। (शायद कोई समस्या नहीं है, मैंने सोचा कि मैं इसका उल्लेख करूंगा।) – dummzeuch

8

जिम का जवाब बहुत अच्छा है, लेकिन पहले मेरे लिए काफी काम नहीं किया। क्लाइंटटोक्रीन फॉर्म 86 की विधि का उपयोग करता है, जो बटन केवल सीधे फॉर्म पर है, तो यह सही है।

procedure TForm86.Button1Click(Sender: TObject); 
var 
    button: TControl; 
    lowerLeft: TPoint; 
begin 
    if Sender is TControl then 
    begin 
    button := TControl(Sender); 
    lowerLeft := Point(0, button.Height); 
    lowerLeft := button.ClientToScreen(lowerLeft); 
    PopupMenu1.Popup(lowerLeft.X, lowerLeft.Y); 
    end; 
end; 

यह कोई फर्क नहीं पड़ता कि बटन कहां है काम करता है: यह बटन के ClientToScreen विधि है कि, कहा जाता है इस तरह होना चाहिए।

+0

बहुत अच्छा - दोनों अंगूठे ऊपर! – user1580348

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