![]() |
"echter" Dropdown-Toolbutton...
Wie mache ich einen Toolbutton zu einem "echten" DropDown-Toolbutton (Abbildung links.; Explorer)? Unter Delphi bewirkt der Style tbsDropDown (Abblildung rechts) nur, dass beim Klick rechts auf den Button das Menü aufpoppt... aber im Explorer öffnet der komplette Button das Menü!
![]() |
Re: "echter" Dropdown-Toolbutton...
Du musst auch nicht Popup, sondern DropdownMenu im OI setzen... oder hast du das schon?
mfG mirage228 |
Re: "echter" Dropdown-Toolbutton...
Das hab ich schon :? ...
|
Re: "echter" Dropdown-Toolbutton...
Du kannst im OnClick Ereigniss des Buttons
folgendes angeben:
Code:
Dann Kommt das Menü ganz wie in dem Explorer genau unter dem Button. Wenn du den Button auf Panels sitzen hast und die Left eigenschaft nicht bei 0 liegt musst du die auch noch in die Formel einbauen.
procedure btDropDownClick(Sender: TObject);
begin popmenueDropDownBtn.PopUp(Self.Left + btDropDown.Left + 5, Self.Top + (Self.Hight - Self.ClientHeight) + btDropDown.Top + btDropDown.Height); end; |
Re: "echter" Dropdown-Toolbutton...
@Jonny: Dann hat der Button immernoch nicht den richtigen Style! Ich will auch den blöden "divider" innerhalb des Buttons weg haben... er wäre auch weg, wenn der Style stimmt.
|
Re: "echter" Dropdown-Toolbutton...
Mann könnte höchstens mal einen eigenen Pfeil malen dann in ein BitBtn einfügen und dann wie oben beschrieben verfahren. ist zwar nicht die Eleganteste Lösung es ist aber eine.
|
Re: "echter" Dropdown-Toolbutton...
Nein, solche Basteleien will ich nicht...
Lt. MSDN gibt es einen Style BTNS_WHOLEDROPDOWN =$0080;... nur wie sende ich einem Toolbutton, das ja kein Handle hat, eine Message, dass es diesen Style verwenden soll? |
Re: "echter" Dropdown-Toolbutton...
So gehts:
Delphi-Quellcode:
Wobei iButton der Index des Buttons ist.
uses
CommCtrl; // Nicht vergessen und nicht mit ComCtrls verwechseln procedure TBSetWholeDropDown(hTB : THandle; iButton : integer); var tBB : TTBBUTTON; tBI : TBBUTTONINFO; const BTNS_WHOLEDROPDOWN =$0080; begin FillChar(tBB, SizeOf(tBB), 0); SendMessage (hTB, TB_GETBUTTON, iButton, Integer(@tBB)); FillChar(tBI, SizeOf(tBI), 0); tBI.cbSize := SizeOf(tBI); tBI.dwMask := TBIF_STYLE; SendMessage(hTB, TB_GETBUTTONINFO, tBB.idCommand, Integer(@tBI)); tBI.fsStyle := tBI.fsStyle or BTNS_WHOLEDROPDOWN; SendMessage(hTB, TB_SETBUTTONINFO, tBB.idCommand, Integer(@tBI)); end; procedure TForm1.Button1Click(Sender: TObject); begin TBSetWholeDropDown(ToolBar1.Handle, 0); end; |
Re: "echter" Dropdown-Toolbutton...
Danke ;)
Ich hab den Code noch etwas erweitert, da dieser Style erst ab IE5 verfügbar ist und es mit IE4 (oder früher) zu unerwarteten Verhalten kommen könte:
Delphi-Quellcode:
uses
CommCtrl, Registry; procedure TBSetWholeDropDown(hTB: THandle; iButton: integer); function IEReady: Boolean; var Reg: TRegistry; Tmp: string; begin Result := False; Reg := TRegistry.Create; try Reg.Access := KEY_READ; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('Software\Microsoft\Internet Explorer', False); Tmp := Reg.ReadString('Version'); if pos('.', Tmp) > 0 then Tmp := copy(Tmp, 1, pos('.', Tmp) - 1); Result := StrToIntDef(Trim(Tmp), 0) >= 5; Reg.CloseKey; finally Reg.Free; end; end; var tBB: TTBBUTTON; tBI: TBBUTTONINFO; const BTNS_WHOLEDROPDOWN = $0080; begin if IEReady then begin FillChar(tBB, SizeOf(tBB), 0); SendMessage(hTB, TB_GETBUTTON, iButton, Integer(@tBB)); FillChar(tBI, SizeOf(tBI), 0); tBI.cbSize := SizeOf(tBI); tBI.dwMask := TBIF_STYLE; SendMessage(hTB, TB_GETBUTTONINFO, tBB.idCommand, Integer(@tBI)); tBI.fsStyle := tBI.fsStyle or BTNS_WHOLEDROPDOWN; SendMessage(hTB, TB_SETBUTTONINFO, tBB.idCommand, Integer(@tBI)); end; end; procedure TForm1.Button1Click(Sender: TObject); begin TBSetWholeDropDown(ToolBar1.Handle, 0); end; |
Re: "echter" Dropdown-Toolbutton...
Ein kleines Schönheitsproblem gibt es noch...
Irgendwie ist der bettr. Toolbutton zu breit geraten: ![]() ...obwohl AutoSize=True ist... Der Pfeil sollte schon näher am Glyphen sein :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz