AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hauptmenü mit Toolbar verbinden

Ein Thema von schöni · begonnen am 9. Feb 2005 · letzter Beitrag vom 10. Jan 2019
 
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Hauptmenü mit Toolbar verbinden

  Alt 9. Feb 2005, 10:49
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
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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