2008-10-24 27 views

cevap

6

Tabi. Sayfaya bir araç çubuğu koyun. Araç çubuğunu sağ tıklayın, bir düğme ekleyin. Düğmenin stilini tbsDropDown olarak ayarlayın. Sayfada bir PopupMenu koyun. Menü öğelerini tanımlamak için PopupMenu'ya çift tıklayın. Ardından, oluşturduğunuz düğmeye geri dönün ve yeni oluşturduğunuz PopupMenu'ya işaret etmek için DropdownMenu özelliğini ayarlayın. Bir araç çubuğunu kullanmak istemiyorsanız

1

, raize (www.raize.com) ve ekspres editörler (www.DevExpress.com) kütüphaneler yapabilirsiniz bileşenlere sahiptir.

10

Sana tıklandığında bir menü aşağı düşer bir düğme anlamına varsayıyorum.

Ayrıca sadece manuel altında bir TPopupMenu aşağı düşmesi için düğmeye tıklayın kod.

Örnek: Formunuzdaki bir TClickEvent (belki bir TButton) ve bir TPopupMenu ile bir şey düşürün. Bazı menü öğelerini ekle. Sonra aşağıdaki OnClick olay işleyicisini ekleyin:

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; 

Ve viyola! Tıpkı sihir gibi. Yeniden kullanmayı planlıyorsanız, bir bileşeni tamamıyla paketleyebilirsiniz. Belki de çevrimiçi olarak satarım.

Not: Bir gecikme istiyorsanız, sonra başka yöntemde bu kodu ayıklamak ve daha sonra bir zamanlayıcı OnClick ayarlayabilir ve OnMouseLeave zamanlayýcýsý çevirin. Daha sonra zamanlayıcı patlarsa, ayıklanan yöntemi çağırabilirsiniz. Bir klavye tıklamasıyla nasıl yapacağınızdan emin değilsiniz. Firefox, vb. Bunu destekliyor mu bilmiyorum.

+0

Bu TButton'un menü görüntülenirken Aşağıya bakan bir TSpeedButton olmasını istiyorsanız ve kullanıcı menüden VEYA öğenin herhangi bir yerine bir öğeyi tıklattığında açılır. Ama bu farklı bir soru ve farklı bir konu ... – gabr

+0

Sadece speedbutton'ın onclick etkinliğine bir zamanlayıcı koymadı ve popupmenu'nun hala görünüp görünmeyeceğini görmek için zamanlayıcı olay testine sahip değildiniz mi? – Argalatyr

+0

Düğme, ekranın alt kısmına yakın yerleştirilirse, menü, düğmenin altından başlayarak aşağıya doğru dizilir ve böylece onu kaplar, bu sizin istediğiniz gibi olmayabilir. (. Muhtemelen hiçbir sorun burada, ben sadece bunu belirtmekte fayda var) – dummzeuch

8

Jim cevabı harika ama ilk başta benim için oldukça işe yoktu. ClientToScreen, yalnızca doğrudan formda olduğunda doğru olan Form86'nın yöntemini kullanır.

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; 

Bu düğme nerede olursa olsun çalışır: Şöyle, denir düğmenin ClientToScreen yöntem olmalıdır.

+0

Çok iyi - yukarıya hem başparmak! – user1580348

İlgili konular