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üpunkte ohne ALT-Taste aufrufen (https://www.delphipraxis.net/137469-menuepunkte-ohne-alt-taste-aufrufen.html)

uligerhardt 21. Jul 2009 16:06


Menüpunkte ohne ALT-Taste aufrufen
 
Hallo zusammen!

Unter Windows kann man Menüpunkte ja auch mit Tastatur aufrufen, z.B. "&Neu" per ALT-N. Unsere Benutzer sind es nun aus DOS-Zeiten gewöhnt, dass das auch ohne ALT-Taste funktioniert, also im Beispiel schon durch "N" allein. Das habe ich prinzipiell auch hingekriegt, indem ich in unserer Basisformklasse IsShortCut überladen habe. Das hat allerdings den Nachteil, dass man jetzt z.B. in Editboxen nur noch Buchstaben eingeben kann, die nicht als Menüpunkt vergeben sind.
Mir schwebt jetzt eine Lösung vor, in der ich meine Tastendrücke für das Menü erst in Betracht ziehe, nachdem Editboxen etc. ihre Chance hatten. Allerdings habe ich bis jetzt keine passende Stelle dafür gefunden. Hat jemand einen Tipp für mich?

Bye,
Uli.

himitsu 21. Jul 2009 16:43

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Also wenn das Menü geöffnet ist, dann kann ich den Buchstaben auch so ohne Alt benutzen.

z.B. F10, D und dann F = "&Datei > Datei Ö&ffnen..." im FireFox (oder statt F10 ein ALT)

Und ich kann mich nicht erinnern, daß es in DOS früher "standardmäßig" ohne Alt gin, wenn wenn damü noch zugeklappt war. :gruebel:
Es sei denn ein Programmierer harre die Tasten selber "global" abgefangen.

uligerhardt 21. Jul 2009 16:54

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von himitsu
Also wenn das Menü geöffnet ist, dann kann ich den Buchstaben auch so ohne Alt benutzen.

z.B. F10, D und dann F = "&Datei > Datei Ö&ffnen..." im FireFox (oder statt F10 ein ALT)

Damit das das Problem löst, müsste meine Anwendung aber dauernd in der Menüschleife stehen, oder? Dann wäre es sogar noch schwieriger, Text in ne Editbox zu kriegen. :mrgreen:

Zitat:

Zitat von himitsu
Und ich kann mich nicht erinnern, daß es in DOS früher "standardmäßig" ohne Alt gin, wenn wenn damü noch zugeklappt war. :gruebel:
Es sei denn ein Programmierer harre die Tasten selber "global" abgefangen.

"Standardmäßig" ging unter DOS vermutlich gar nix. Aber in alten Versionen unserer Software war's halt so. Und letzthin wurde mir vorgerechnet, dass unsere Anwender jetzt 1500mal öfter am Tag ALT drücken müssen als anno dunnemals. :)

DeddyH 21. Jul 2009 16:57

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Was installieren die sich auch so einen neumodischen Kram wie Windows :mrgreen:

Namenloser 21. Jul 2009 17:04

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Kannst du nicht einfach prüfen, ob das aktive Control ein Eingabefeld ist?

DeddyH 21. Jul 2009 17:06

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Wobei auch das in meinen Augen Murks wäre, da man dann entweder doch die ALT-Taste braucht oder ein paar mal mit dem Tabulator den Fokus auf ein Nicht-Eingabefeld setzen müsste, damit das klappt.

uligerhardt 21. Jul 2009 17:08

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von NamenLozer
Kannst du nicht einfach prüfen, ob das aktive Control ein Eingabefeld ist?

Hab ich auch schon überlegt. Aber es ist ja nicht mit Editboxen getan: In Listboxen kannst du per Eingabe per Anfangsbuchstaben Einträge selektieren, Grids können Inplace-Edits haben und was weiß ich nicht alles. Drum hätte ich gerne eine Möglichkeit, dem fokussierten Control erstmal den Vortritt zu lassen, und erst, wenn dieses kein Interesse bekundet hat, mit meinen Menüpunkten zu kommen.

Namenloser 21. Jul 2009 17:13

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von uligerhardt
Drum hätte ich gerne eine Möglichkeit, dem fokussierten Control erstmal den Vortritt zu lassen, und erst, wenn dieses kein Interesse bekundet hat, mit meinen Menüpunkten zu kommen.

Hast du Zugriff auf die Sourcen der VCL? Du könntest dir ja mal anschauen, wie Borland/CodeGear/Embarcadero die Eigenschaft KeyPreview von TForm implementiert hat. Vielleicht könntest du dir davon was abgucken.

DeddyH 21. Jul 2009 17:15

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Aber bei z.B. Edits oder ComboBoxen bekommst Du dann immer noch Probleme (es sei denn, Du kannst Gedanken lesen), denn soll bei Druck auf "S" nun gespeichert werden oder war das eine Eingabe? Wir drehen uns im Kreis.

uligerhardt 21. Jul 2009 17:16

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von DeddyH
Wobei auch das in meinen Augen Murks wäre, da man dann entweder doch die ALT-Taste braucht oder ein paar mal mit dem Tabulator den Fokus auf ein Nicht-Eingabefeld setzen müsste, damit das klappt.

Das wäre ein akzeptabler Kompromiss, da unsere Anwendung auch andere Uralt-Gebräuche befolgt. Zum Beispiel sind Menüs oft nur dann vorhanden/aktiv, wenn man nix eingeben kann. (Ich kann nix dafür :mrgreen:. War halt auch ne Abwägung zwischen Rückwärts- und Systemkompatibilität.)

uligerhardt 21. Jul 2009 17:19

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von DeddyH
Aber bei z.B. Edits oder ComboBoxen bekommst Du dann immer noch Probleme (es sei denn, Du kannst Gedanken lesen), denn soll bei Druck auf "S" nun gespeichert werden oder war das eine Eingabe? Wir drehen uns im Kreis.

Meinst du mich? Wo ein Tastendruck eine Eingabe sein kann, soll er auch so interpretiert werden. Siehe hier und hier.

uligerhardt 21. Jul 2009 17:23

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von NamenLozer
Hast du Zugriff auf die Sourcen der VCL?

Ja. Hab auch schon einiges davon für meine IsShortCut-Implementierung recycled.

Zitat:

Zitat von NamenLozer
Du könntest dir ja mal anschauen, wie Borland/CodeGear/Embarcadero die Eigenschaft KeyPreview von TForm implementiert hat. Vielleicht könntest du dir davon was abgucken.

Gute Idee! Mal sehen, was ich noch finde.

himitsu 21. Jul 2009 17:29

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von uligerhardt
Damit das das Problem löst, müsste meine Anwendung aber dauernd in der Menüschleife stehen, oder? Dann wäre es sogar noch schwieriger, Text in ne Editbox zu kriegen.

nö?
einfach nur grad nochmals mit 'nem TMainMenü ausprobiert und bei TPopupMenü sollte es das Selbe sein (die arbeiten ja gleich)

halt solange das Menü geöffnet ist :angel2:

aber sonst wird es wohl recht schwierig ... du könntest .B. in die Buttons und So (außer Edits, Memos ...) eine OnKeyPress-Methode implementieren, welche deine Wunschtasten ans Menü weiterleitet oder die Funktionen direkt aufruft


allerdings geht ja windows immer mehr von Tasten auf Maussteuerung über, oder wodurch erklärt es sich sonst, daß "neuerdings" die Markierungen der Menü-HotKeys ausgeblendet sind?
Zitat:

Zitat von uligerhardt
"Standardmäßig" ging unter DOS vermutlich gar nix. Aber in alten Versionen unserer Software war's halt so. Und letzthin wurde mir vorgerechnet, dass unsere Anwender jetzt 1500mal öfter am Tag ALT drücken müssen als anno dunnemals. :)

wer rechnet denn sowas? :shock;

nja, "standardmäßig" in Bezug auf z.B. die Menüleite, welche man sich per TurboPascal einbauen konnte :angel2:

uligerhardt 21. Jul 2009 17:39

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von himitsu
nö?
einfach nur grad nochmals mit 'nem TMainMenü ausprobiert und bei TPopupMenü sollte es das Selbe sein (die arbeiten ja gleich)

halt solange das Menü geöffnet ist :angel2:

Nönö, das mit F10, loslassen, N und so funktioniert schon. Ich sehe nur nicht, wie ich damit unser Problem lösen kann.

Zitat:

Zitat von himitsu
aber sonst wird es wohl recht schwierig ... du könntest .B. in die Buttons und So (außer Edits, Memos ...) eine OnKeyPress-Methode implementieren, welche deine Wunschtasten ans Menü weiterleitet oder die Funktionen direkt aufruft

Das hört sich an, als würde es aufwändig werden.

Zitat:

Zitat von himitsu
Zitat:

Zitat von uligerhardt
"Standardmäßig" ging unter DOS vermutlich gar nix. Aber in alten Versionen unserer Software war's halt so. Und letzthin wurde mir vorgerechnet, dass unsere Anwender jetzt 1500mal öfter am Tag ALT drücken müssen als anno dunnemals. :)

wer rechnet denn sowas? :shock;

Wir haben pingelige Anwender. :lol:

Zitat:

Zitat von himitsu
nja, "standardmäßig" in Bezug auf z.B. die Menüleite, welche man sich per TurboPascal einbauen konnte :angel2:

Schon klar. Bei uns war zu DOS-Zeiten alles Eigenbau - nix TurboVision oder so. War lang vor meiner Zeit. :)

himitsu 21. Jul 2009 18:24

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von uligerhardt
Das hört sich an, als würde es aufwändig werden.

du brauchst eigentlich nur eine OnKeyPress-Prozedur erstellen, worin entweder per CASE auf die Buchstaben reagiert wird,
oder man geht das Menü durch, schaut darin, ob dort ein Alt+Buchstabe Hotkey existiert und ruft die zugehörige OnClick-Prozedur auf.
Letzteres hätte auch den Vorteil, daß man keine weitere Tastenliste anlegen muß.

Und dann weißt man entweder im OI allen Komponenten, welche kein Edit/Memo sind, diese Prozedur zu.
Man kann ja mehrere Markieren und ihren zusammen die Ereignisprozedur zuweisen.
Oder man geht im OnCreate der Form alle Komponenten durch prüft auf not X is TCustomEdit und weißt diesen die Prozedur zu.

uligerhardt 21. Jul 2009 19:23

Re: Menüpunkte ohne ALT-Taste aufrufen
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von uligerhardt
Das hört sich an, als würde es aufwändig werden.

du brauchst eigentlich nur [...snip]

Ich meinte eher, alle Eventualitäten zu berücksichtigen - z.B. die oben erwähnten Inplace-Edits eines Grids. Ich werde es morgen mal ausprobieren; vielleicht war ich ja mal wieder übertrieben skeptisch. :)

himitsu 21. Jul 2009 19:51

Re: Menüpunkte ohne ALT-Taste aufrufen
 
wenn du es als OnKeyDown-Procedur nur in Komponenten integrierst, wo keine derartigen Tasten nötig sind, dann dürfte es keine Probleme (auch mit den InPlace-Sachen) geben


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