![]() |
Hauptmenü mit Toolbar verbinden
Hallo Delphi Kenner!
Ich will einen Toolbar verwenden, um ein Menü anzuzeigen. Es gibt ja diese schönen sogenannten Floating Toolbars. Mein Problem: Die ActionBand-Kompos fehlen in der D7 Personal. Es gibt zwar schöne Drittanbieterkompos für sowas. Aber wie macht man das selber. Kann man ja nur von lernen. Ich hab es zuerst mit Popup-Menüs versucht, da der ToolBar nur Popupmenüs zuläßt. Auch die Toolbuttons akzeptieren nur Popup-Menüs. Das Problem dabei ist, daß das Maustracking dann nicht optimal funzt. Wenn ich ein Menü in einer sonstigen Anwendung offen habe und mit der Maus die Menüleiste enltangfahre, öffnet sich jeweils dasjenige Menü, das ich mit dem Mauszeiger anwähle. Und genau dieses Verhalten kriege ich bei meinem Menü-ToolBar nicht hin. Will ich aber haben. Jedoch muß ich bisher jedes Menü neu anklicken, damit es sich öffnet. Deshalb habe ich folgendes versucht:
Delphi-Quellcode:
Ich will damit erreichen, das einem ToolButton der Caption des jeweiligen Hauptmenüs zugewiesen wird und die Menüs, die dann aufklappen, dem jeweiligen Menü des ToolButtons zuweisen. Jedoch akzeptiert ein Standard-ToolButton nur Popup-Menüs, womit das Problem mit dem Maustracking bestehen bliebe. Deshalb habe ich die Unterfunktion AssignedMenu geschrieben, mit der ich ein generisches Menü zuweisen will. Aber Delphi beschwert sich mit EAbstractError. Wenn ich aber in AssignedMenu(src: TMainMenu; Index: Integer): TMenu; schreibe, gibt es Typkonflikt bzw. Feler: Menü wurde zweimal zugewiesen.
procedure TMenuToolBar.CreateButtons;
var btn: array of TMenuToolButton; i: Integer; function AssignedMenu(Src: TMenu; Index: Integer): TMenu; var j: Integer; Dst: TMainMenu; begin Dst := nil; Result := nil; if Assigned(Src) then begin if (Index >= 0) and (Index <= Src.Items.Count-1) then begin Dst := TMenu.Create(self); for j := 0 to Src.Items[Index].Count-1 do Dst.Items.Add(Src.Items[Index].Items[j]); end; end; Result := Dst; end; begin if Menu <> NIL then begin SetLength(btn, Menu.Items.Count); for i:=0 to Menu.Items.Count-1 do begin btn[i] := TMenuToolButton.Create(self); btn[i].Parent := TMenuToolBar; btn[i].ToolBar := TMenuToolBar; btn[i].AutoSize := true; if Menu<>NIL then begin btn[i].Caption := Menu.Items[i].Caption; btn[i].Menu := AssignedMenu(Menu,i); // btn[i].PopupMenu := TPopupMenu(btn[i].Menu); // PopupMenü will ich eigentlch vermeiden, Es sei denn, das Maustracking ist irgenwie // hinzukriegen. Dann konnte ich vielleicht auch ein Popup-Menü erzeugen, dem ich die // Menu.Items vom entspr. Hauptmenü zuweise. Aber ohne Maustracking? end; end; end; end; Ich will eine Toolbarkompo entwickeln, der ich ein TMainMenu zuweisen kann. Um alles andere soll sich die Methode CreateButtons kümmern. Die Klassendefinition ist wie folgt:
Delphi-Quellcode:
Wer kann mir helfen?
type
TMenuToolbar = class(TToolbar) ..... //was sonst noch so geraucht wird FMenu: TMainMenu; procedure SetMenu: value: TMainMenu); procedure CreateButtons; public constructor create(AOwner: TComponent); published Menu: TMainMenu read FMenu write SetMenu; ..... //anderes Zeug end; procedure SetMenu(value: TMainMenu); begin if value <> nil then if value <> FMenu then FMenu := value; CreateButtons; end; In guter Hoffnung verbleibt schöni |
Re: Hauptmenü mit Toolbar verbinden
Hallo schöni!
Da wird Dit nichts weiter übrig bleiben, als eine neue Menükomponente abzuleiten, die sich genau so, wie ein Hauptmenü verhält. Und ein neuer ToolButton, der die Items des jeweiligen Hauptmenüs aufnehmen kann, ist ebenfalls Pflicht. Ich hoffe, Dir damit ein Stück geholfen zu haben. Tschüß Progcoder |
Re: Hauptmenü mit Toolbar verbinden
Hallo Schöni,
mit den ActionBands kannst du das ganze etwas einfacher lösen. Sieh einfach mal in der Online-Hilfe unter ![]() Greetz alcaeus |
Re: Hauptmenü mit Toolbar verbinden
Hallo alcaeus!
Das Problem ist, dass in der D7 Personal die ActionBand Kompos fehlen. Und da dachte ich mir, machst das mal selber, kannst ja dabei nur lernen. Und ich brauche noch bissl Übung mit der Verwendung der einzelnen Ereignisse. Na ja, und da selber programmieren am meisten bildet, mach ich das halt. Auch wenn Dein Rat erst mal nicht weiterhilft, weil D7 Personal... sei trotzdem gegrüßt von schöni |
Re: Hauptmenü mit Toolbar verbinden
Hallo schöni!
Ich weiß nicht ob das klappt, aber versuch mal, Deine Menu-Items zuerst in eine Stringliste zu laden, dann das Hauptmenü freizugeben und dann die Items aus der Stringliste der Eigenschaft DropDownMenu.Items zuzuweisen. Damit ist das Maustracking zwar noch nicht gelöst, aber die Menüzuweisung dürfte dann erst mal klappen. Mehr kann ich Dir momentan auch nicht raten. Ich hoffe, das hilft erst mal n Stück Mfg Delphifan2004 |
Re: Hauptmenü mit Toolbar verbinden
Hi,
Du kannst auch mit den Standardkomponenten ganz einfach Dein Vorhaben realisieren. Gehe dabei wie folgt vor
mfG mirage228 |
Re: Hauptmenü mit Toolbar verbinden
Hallo mirage228!
Perfekt. Genau, was ich wollte. Danke. Da mache ich das jetzt auch so. Es grüßt Dich schöni |
Re: Hauptmenü mit Toolbar verbinden
Hallo!
Ich beschäftige mich grad mit der Toolbar-Kompo und beim Stöbern in der Delphi Praxis bin ich auf das Thema hier gestoßen. Hab das auch gleich mal ausprobiert. Funzt auch. Aber nur für eine VCL Anwendung. Wie kriege ich das gleiche mit einer CLX Anwendung hin? Da fehlt dem Toolbar die Eigenschaft Menu. Zumindest erscheint sie nicht im Objektinspektor. Es gibt ein DropDownMenu, das ist aber vom Typ PopupMenu. Und es gibt die PopupMenu Eigenschaft, aber eben kein MainMenu. Wer kann mir den richtigen Tipp für eine CLX Anwendung geben? Profmaster grüßt Euch und dankt schon jetzt für Eure Hilfe. |
Re: Hauptmenü mit Toolbar verbinden
Hallo profmaster!
Schau dir mal folgenden Link an: ![]() Viel Erfolg Progcoder |
Re: Hauptmenü mit Toolbar verbinden
Danke progcoder, werde mir die Kompo kaufen. Ist kommerziell, aber igr Geld wert.
Sei gegrüßt von profmaster |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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