AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgelöst

Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgelöst

Ein Thema von Headbucket · begonnen am 16. Nov 2018 · letzter Beitrag vom 19. Nov 2018
Antwort Antwort
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgelöst

  Alt 16. Nov 2018, 15:38
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
Miniaturansicht angehängter Grafiken
actionmenu.png  
Angehängte Dateien
Dateityp: zip ActionBarSample.zip (100,0 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel

  Alt 17. Nov 2018, 02:37
Zitat:
Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgelöst
Macht auch keinen sinn und ist vollkommen in Ordnung so!

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:
so wird die Action dies Hauptitems nicht mehr ausgelöst.
Doch! Es wird etwas ausgelöst und zwar das öffnen deiner Submenu Einträge aber nicht das was du dir vielleicht erhoffst.

Welchen tieferen sinn bezweckst du nun das Action 2 etwas anderes Ausführen soll als deine Submenus zu öffnen?

gruss

Geändert von EWeiss (17. Nov 2018 um 16:00 Uhr)
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel

  Alt 19. Nov 2018, 08:54
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel

  Alt 19. Nov 2018, 15:20
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:
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.
Es geht sehr elegant
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

Geändert von EWeiss (19. Nov 2018 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel

  Alt 19. Nov 2018, 17:43
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

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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel

  Alt 19. Nov 2018, 17:50
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:
Wobei wir diesen Code schon seit Delphi 2007 bis XE10.1 verwenden..
Wie gesagt. Ich habe es extra nochmal mit VB6, C++ und C# getestet keine Chance du kannst kein klick Event auslösen wenn das MainMenu subitems enthält.

gruss

Geändert von EWeiss (19. Nov 2018 um 21:14 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Actions in ActionMainMenuBar werden bei vorhandenen Subitems nicht richtig ausgel

  Alt 19. Nov 2018, 21:15
Zitat:
Ansonsten wurde es ja zumindest ab dem zweiten Klick schon erzeugt
Um das zu verhindern gibt es die Api TrackPopupMenuEx diese wartet solange bis du eine Aktion ausgeführt hast wie immer sie auch aussieht.

bsp.
MenuWahl := TrackPopupMenuEx(hMainMenu, TPM_RETURNCMD, 0, 0, WinHandle, nil);

direkt nach dem erstellen deiner SubMenus aufrufen
und ein anschließendes

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:
if MenuWahl then
  SendMessage(WinHandle, WM_COMMAND, Makelong(word(MenuWahl), 0), 0);
Wenn du das nun auf die VCL umlegst sollte es keine Probleme geben.

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

Geändert von EWeiss (19. Nov 2018 um 21:26 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:15 Uhr.
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