![]() |
Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgelöst
Liste der Anhänge anzeigen (Anzahl: 2)
Liebe Community,
ich bin gerade dabei zu Testen, ob ich nicht das TMainMenu durch ein TActionMainMenuBar ersetze. Hintergrund ist vor allem, dass ich bei einem TActionMainMenuBar flexibler in der Gestaltung bin. So wird der Look eines TMainMenu standardmäßig von Windows vorgegeben und sieht nach meinem Geschmack etwas altbacken aus. Sehr schnell hat man ein identisches Menü mit einem TActionManager und einer TActionMainMenuBar zusammengeklickt. Leider stoße ich hier schon sehr schnell auf ein erstes Problem. Jedem Menüeintrag ist logischerweise eine Action zugeordnet. Enthält ein Menüeintrag nun allerdings Untermenüeinträge, so wird die Action dies Hauptitems nicht mehr ausgelöst. Ich habe ein Minimalbeispiel angehängt. "Action 2" wird nicht mehr ausgelöst. Habe ich hier einen Denkfehler oder ist oder ist das "by design"? Viele Grüße Headbucket |
AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel
Zitat:
Der erste Eintrag ist ein Standard Menu Eintrag dieser muss eine Aktion auslösen. Der zweite Eintrag ist ein Menu mit SubMenus.. die einzige Funktion dieses Eintrages wenn Submenus existieren ist diese Aufzurufen eine andere Aktion kannst du damit nicht auslösen. Zitat:
Welchen tieferen sinn bezweckst du nun das Action 2 etwas anderes Ausführen soll als deine Submenus zu öffnen? gruss |
AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel
Guten Morgen EWeiss,
vielen Dank für deine Antwort. Wir haben in einem Programm von uns die Anforderung, dass wir je nach aktuellem Programmstatus nur ganz bestimmte Untermenüeinträge anzeigen. Bei einem Klick auf den Hauptmenüpunkt sollen diese Untermenüpunkte aktualisiert werden. Sicher lässt sich das ganze auch an einer anderen Stelle durchführen - dann aber sicher nicht so elegant. Bei einem "normalen" TMainMenu jedoch ging das bisher und ich hatte lediglich geprüft, ob ich die bisherigen Funktionalitäten mit einem TActionMainMenuBar umsetzen kann. Viele Grüße Headbucket |
AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel
Es wundert mich doch sehr das dass TMainMenu überhaupt ein Event beim klick auf einen Eintrag mit Submenus weiterleitet.
Ich behaupte das hier ein Fehler im TMainMenu vorliegt. Ob ich VB6 oder eine andere Programmiersprache nehme nirgendwo kann man mit dem MainMenu ein Event auslösen wenn ein Submenu vorhanden ist. Es funktioniert ja auch nicht wenn du ein Untermenü von einem Submenu erstellst und dann versuchst das Submenu anzuklicken. Es sehr bedenkliches (Ich behaupte ein Fehler) verhalten beim TMainMenu. Zitat:
Wenn man die Menus dynamisch erstellt. Dann hast du vollen zugriff darauf welches Submenu du anzeigen(deaktivieren) möchtest oder nicht. Bsp. Erstelle jeweils immer NUR den ersten Eintrag. In deinem Fall Action 1 und Action 2.. Jetzt hast du dein Klickverhalten so wie du es möchtest. Action 2 sollte dann ein Click Event haben. Wenn du dich nun im OnClick befindest vom Action 2 dann erstelle die Submenus die du anzeigen möchtest Dynamisch und fertig. gruss |
AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel
Hallo EWeiss,
höchstwahrscheinlich hast du Recht. Dann sollte ich meinen Code wohl wirklich mal ausbessern. Ansonsten funktioniert er möglicherweise nach einem Delphi-Update nicht mehr. Wobei wir diesen Code schon seit Delphi 2007 bis XE10.1 verwenden :-D Das komplette dynamische Erzeugen von Menüs ist eine gute Idee. Dann muss ich mir nur noch überlegen, an welcher Stelle ich das Menü wieder "zestöre". Ansonsten wurde es ja zumindest ab dem zweiten Klick schon erzeugt, womit mein Event nicht mehr ausgelöst wird. Aber das sollte machbar sein. Viele Grüße Headbucket |
AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel
Zumindest kannst du dir dann das hin und her verschieben der benötigten\nicht benötigten Menu Items ersparen ;)
Weil zur Laufzeit nur die erstellt werden die auch benötigt werden. Zitat:
gruss |
AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel
Zitat:
bsp.
Delphi-Quellcode:
MenuWahl := TrackPopupMenuEx(hMainMenu, TPM_RETURNCMD, 0, 0, WinHandle, nil);
direkt nach dem erstellen deiner SubMenus aufrufen und ein anschließendes
Delphi-Quellcode:
DestroyMenu(hMainMenu);
Danach kannst du über MenuWahl auslesen welche Aktion ausgeführt werden soll bei einem klick auf einem Item vorausgesetzt du hast eines angeklickt andernfalls ist MenuWahl halt false, dann wird nichts ausgeführt und dein Menu ist zerstört. (Frei gegeben)
Delphi-Quellcode:
Wenn du das nun auf die VCL umlegst sollte es keine Probleme geben.
if MenuWahl then
SendMessage(WinHandle, WM_COMMAND, Makelong(word(MenuWahl), 0), 0); Setze einen Breakpoint auf "if MenuWahl then" und du wirst sehen das es erst aufgerufen wird nach einer von dir ausgelösten Aktion. Ein zweimaliges erstellen des gleichen Menus ist also nicht möglich da es vorher zerstört wurde. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz