![]() |
Actions schlagen zu (sollen sie aber nicht immer)
Hallo, ich habe folgendes Problem:
In meiner Anwendung gibt es mehrere Actions, die einen einzelnen Shortcut haben. z.B. 'O' für Online 'P' für Print. Aus gutem Grund (Einhandbedienung & merkbar) soll das auch so bleiben. Die Actions hängen in einem Actionmanager auf dem Hauptformular einer MDI Anwendung. Nun hat jedoch eines meiner MDI Childwindows ein Eingabefeld. Blöderweise kann man in dieses Feld weder 'P' noch 'O' eintragen, weil die Actions die Tastendrücke vorher wegfangen. Außer der Möglichkeit, aus dem MDI Child heraus die globalen Actions zu deaktivieren, sobald das Eingabefeld betreten wird, fällt mir nichts ein. Den Ansatz finde ich allerdings ziemlich hässlich, weil das MDI Child in sich geschlossen ist und nicht auf globale Objekte zugreifen soll. Hat noch jemand eine bessere Idee? Gruß -Lübbe |
Re: Actions schlagen zu (sollen sie aber nicht immer)
Herzlich willkommen in der Delphi-PRAXiS, Lübbe.
Du umgehst das Problem geschickt, wenn du für deine ShortCuts einen Shift-Key zum Kennbuchstaben dazu nimmst - mit Strg+P bzw. Strg+D wird auch in vielen anderen Windows-Programmen gedruckt. Freundliche Grüße vom marabu |
Re: Actions schlagen zu (sollen sie aber nicht immer)
Zitat:
Zitat:
Ich benötige eine Lösung für Eintastenaktionen, normale Buchstaben, die ich: - entweder selektiv abschalten kann, (weiss ich wie's geht, ist für mich aber die zweitbeste Lösung) - oder einen Tipp, wie ich in einem TEdit sicher jeden Tastendruck bekomme, auch wenn z.B. eine Action mit dem Shortcut "P" aktiv ist. Gruß -Lübbe |
Re: Actions schlagen zu (sollen sie aber nicht immer)
Ich muss zugeben, dass für mich Einhandbedienung und Strg+D für Drucken vereinbar erscheinen. Auch ist ein simples D als ShortCut kontraproduktiv, wenn alle anderen Anwendungen Strg+D verwenden, aberseisdrum. Unter Berücksichtigung deiner Anforderung würde ich das Problem so lösen:
Delphi-Quellcode:
Grüße vom marabu
// shortcut = D
procedure TDemoForm.PrintActionUpdate(Sender: TObject); begin with Sender as TAction do Enabled := true // deine eigenen Bedingungen and not (ActiveControl is TCustomEdit); end; |
Re: Actions schlagen zu (sollen sie aber nicht immer)
Zitat:
Zitat:
Gruß & Danke -Lübbe |
Re: Actions schlagen zu (sollen sie aber nicht immer)
Mir scheint du hast eine spezielle Zielgruppe im Auge. Nur linke Hand und die verkehrt herum - arbeiten deine Benutzer in der Regierung?
Mein Lösungsansatz erfordert übrigens keine formular-übergreifenden Zugriffe, da üblicherweise nur der Action-Code zentralisiert wird - die event handler bleiben in der jeweiligen Form. Viel Erfolg mit deinem Projekt. marabu |
Re: Actions schlagen zu (sollen sie aber nicht immer)
Zitat:
Ich meinte: "linke Hand hinter den Rücken und mit der rechten Hand alleine tippen" Zitat:
Delphi-Quellcode:
und sie schalten sich brav aus und wieder an. Mir war nicht klar, dass ActionUpdate von der Anwendung selber ausgelöst wird. Das macht das Leben natürlich einfacher.
procedure TMainForm.SpecialActionUpdate(Sender: TObject);
begin with Sender as TAction do Enabled := not (Screen.ActiveControl is TEdit); end; Gruß & Danke -Lübbe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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-2025 by Thomas Breitkreuz