Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Hauptmenü mit Toolbar verbinden (https://www.delphipraxis.net/39938-hauptmenue-mit-toolbar-verbinden.html)

schöni 9. Feb 2005 10:49


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:
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 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.

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:
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;
Wer kann mir helfen?

In guter Hoffnung verbleibt

schöni

Progcoder 9. Feb 2005 12:03

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

alcaeus 9. Feb 2005 12:18

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 Delphi-Referenz durchsuchenActionBands nach, da müsste auch eine Verwendungsanleitung stehn. Evtl. helfen dir auch noch ein paar andere Suchbegriffe: [oh]TActionManager, TActionMainMenuBar, TActionToolBar[/oh]

Greetz
alcaeus

schöni 9. Feb 2005 12:33

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

delphifan2004 9. Feb 2005 16:17

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

mirage228 9. Feb 2005 16:22

Re: Hauptmenü mit Toolbar verbinden
 
Hi,

Du kannst auch mit den Standardkomponenten ganz einfach Dein Vorhaben realisieren.

Gehe dabei wie folgt vor
  • TMainMenu auf die Form, TToolbar auf die Form
  • Im MainMenu Deine Einträge entwerfen
  • Anschließend im Objekt Inspektor die "MainMenu" Eigenschaftes des Formulares leeren (das Menü sollte nun aus der Form veschwinden)
  • Bei der Toolbar die Eigenschaft "Menu" auf das MainMenu setzen
  • Vóila ;)

mfG
mirage228

schöni 9. Feb 2005 17:46

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

profmaster 9. Feb 2005 18:19

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.

Progcoder 9. Feb 2005 19:49

Re: Hauptmenü mit Toolbar verbinden
 
Hallo profmaster!

Schau dir mal folgenden Link an: http://<img src="styles/elise/misc/i...clxtoolbar</a>

Viel Erfolg

Progcoder

profmaster 9. Feb 2005 22:03

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 14:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz