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.