Delphi-PRAXiS

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 Menü Shortcuts aktiv, obwohl Form unsichbar (https://www.delphipraxis.net/178448-menue-shortcuts-aktiv-obwohl-form-unsichbar.html)

Shark99 8. Jan 2014 20:18

Menü Shortcuts aktiv, obwohl Form unsichbar
 
Ich bin dabei einen Bug zu fixen in einer alten Delphi 5 Anwendung (die auf Bugfixes nicht mehr weiterentwickelt wird).

Die Mainform wird in den Tray Icon versteckt:
Delphi-Quellcode:
Application.MainForm.Visible := False;
if IsWindowVisible(Application.Handle) then
    ShowWindow(Application.Handle, SW_HIDE);
Durch einen Doppel-Klick auf den Tray Icon wird eine Funktion ausgelöst bei der ein Child-Fenster erzeugt wird (eine Eingabemaske). Funktioniert so weit so gut, jedoch gibt es ein Problem. Alle Shortcuts des Mainmenus der Mainform sind weiterhin aktiv, obwohl die Form unsichtbar ist. Wenn es dort also z.B. einen Ctrl + T Shortcut gibt, kann ich diesen Shortcut nicht on OnKeyDown des Childfensters abfragen, weil automatisch der Shortcut der unsichtbaren Mainform aufgerufen wird. Wie kann ich das verhindern? Muss ich wirklich das Mainmenu beim Verstecken ausschalten?

Perlsau 8. Jan 2014 20:58

AW: Menü Shortcuts aktiv, obwohl Form unsichbar
 
Wenn deine ShortCuts in einer TActionList festgelegt wurden, kannst du TActionListState auf asSuspended setzen:

Zitat:

The actions in the action list do not respond when client objects tell them to "fire". The Enabled property for all actions in the list is unchanged.

Shark99 8. Jan 2014 21:03

AW: Menü Shortcuts aktiv, obwohl Form unsichbar
 
Es ist ja leider eine sehr alte Anwendung. Alle Shortcuts sind direkt in den TMenuItems drin. TMainMenu hat ja leider kein Enabled property. Ich müsste es also auf NIL setzen. Keine elegante Lösung.

Perlsau 8. Jan 2014 21:10

AW: Menü Shortcuts aktiv, obwohl Form unsichbar
 
Dann mußt du wohl oder übel die Main-Items deaktivieren, bevor dein Hauptfenster unsichtbar wird, und beim Sichtbarwerden wieder aktivieren. Dabei mußt du nicht alle Menü-Items behandeln, sondern wie gesagt nur die Main-Items, die Überschriften also.

Gab's denn bei Delphi 5 bereits eine TActionList?

Shark99 8. Jan 2014 21:13

AW: Menü Shortcuts aktiv, obwohl Form unsichbar
 
Zitat:

Zitat von Perlsau (Beitrag 1242770)
Gab's denn bei Delphi 5 bereits eine TActionList?

Ja.

Perlsau 8. Jan 2014 21:17

AW: Menü Shortcuts aktiv, obwohl Form unsichbar
 
Arbeit wirst du damit so oder so haben: Entweder alle Ereignisse aus den Menüs auf TActionList-Ereignisse umstellen, oder eben die Menü-Header deaktiveren (Enabled := False). Die zweite Lösung scheint mir zwar nicht ganz so sauber, ist aber wohl schneller erledigt und dürfte deinen Anforderungen genügen.

Ohne jetzt gehässig sein zu wollen – aber hier rächt sich die unsaubere Implementierung ohne TActionList. Die gibt es nämlich, um genau solche Probleme bewältigen zu können. Außer bei dahingerülzten Testprogrammen verwende ich sie immer ohne Ausnahme.

Shark99 8. Jan 2014 21:19

AW: Menü Shortcuts aktiv, obwohl Form unsichbar
 
Ich setze nun im OnHide Menu auf nil und im Show Menu wieder auf die Komponente. Also nur zwei Zeilen Code und das Problem ist behoben. Trotzdem keine elegante Lösung. Ich dachte das Verstecken selbst ist vielleicht das Problem (also der Code von oben). Ich verstehe nicht wie ein Menü immer noch aktiv sein kann obwohl das Fenster unsichtbar ist und ein anderes den Fokus hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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