AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastatureingabe erkennen

Ein Thema von idefix2 · begonnen am 10. Apr 2010 · letzter Beitrag vom 11. Apr 2010
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Tastatureingabe erkennen

  Alt 10. Apr 2010, 15:43
Hallo,

ich würde gerne wissen, wie ich in einem Formular, in dem gerade kein editierbares Feld den Fokus hat, Tastatureingaben erkennen und darauf reagieren kann.

Konkret:
Ich zeige ein Stringgrid und dazu ein Menü an. Natürlich kann ich den Menüknöpfen Accelerators zuordnen, aber dann muss der User immer die Alt-Taste verwenden, um die entsprechende Funktion zu aktivieren. Ich würde gerne auf irgend einer Ebene (tabsheet, panel oder was auch immer) alle Tastatureingaben erkennen, die nicht schon in untergeordneten Komponenten verarbeitet worden sind. Die Komponenten haben zwar alle Arten von Mouseevents, auf die man reagieren kann, aber eigentlich keine ein OnKeyPressed oder dergleichen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Tastatureingabe erkennen

  Alt 10. Apr 2010, 15:45
Setzt Form.KeyPreview auf True
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Tastatureingabe erkennen

  Alt 10. Apr 2010, 17:16
Danke, das wird mir schon etwas weiterhelfen. Wird damit aber wesentlich komplizierter, als ich erwartet habe, weil die Ereignisse für das ganze Formular gelten und ich bei jedem Tastaturereignis erst einmal feststellen muss, welcher Reiter des Formulars gerade aktiv ist.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Tastatureingabe erkennen

  Alt 10. Apr 2010, 17:24
Wo ist das Problem? ...
Delphi-Quellcode:
case PageControl.ActivePageIndex of
  0: ...
  1: ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Tastatureingabe erkennen

  Alt 10. Apr 2010, 17:52
Was bedeutet für dich "Tastatureingaben" auf einem Formular in dem kein Conrol (insbesonder Edit, Memo, Stringgrid) den Fokus hat?
Willst du beim Drücken bestimmter Tasten (z.B. Funktionstasten) eine Aktion auslösen?
Dann wäre eine ActionList die perfekte Lösung.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Tastatureingabe erkennen

  Alt 10. Apr 2010, 18:37
@omata
Möglicherweise ist es kein grosses Problem - muss die Sache erst einmal durchdenken
Es ist auf jedenfall komplizierter, in meine Formular gibt es auch Bereiche, die nicht immer visible sind, und die beeinflussen auch das Verhalten. Nichts unlösbares, aber eben deutlich komplizierter als wenn man einem beliebigen Control direkt Tastaturereignisse zuordnen könnte.

@sx2008
Genau das will ich, durch Drücken gewisser Tasten Aktionen auslösen. Beispiel: Ich habe eine Taste "Löschen", der kann ich noch einen Shortcut zuweisen, zum Beispiel &Löschen. Jetzt muss der Benutzer immer noch alt-L drücken um die Aktion auszulösen. Ich möchte diese Aktion aber wahlweise auch über die Tasten L und über die Taste <entf> auslösen.

Bei den Actionlists blicke ich überhaupt nicht durch, ich verstehe eigentlich nicht wirklich, wozu die gut sind und wie man sie verwendet. Die Delphi Hilfe ist da auch nicht sehr hilfreich und eher abschreckend:

Zitat:
TActionList wurde in erster Linie zur Verwaltung von Aktionen in plattformübergreifenden Anwendungen konzipiert. Sie können die Aktionen in Ihren Anwendungen zwar auch mit TActionList verwalten, es ist aber einfacher, dazu einen Aktionsmanager zu verwenden.
Daraufhin habe ich mir den Actionmanager angeschaut, mit dem es ja einfacher als mit actionlist gehen soll (Originalzitat Delphi Hilfe, s.o.), der ist für mich aber ebenso unverständlich.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Tastatureingabe erkennen

  Alt 10. Apr 2010, 19:07
Zitat von idefix2:
Bei den Actionlists blicke ich überhaupt nicht durch, ich verstehe eigentlich nicht wirklich, wozu die gut sind und wie man sie verwendet.
Eine ActionList kann beliebig viele Actions enthalten.
Eine Action hat (unter anderem) einen Namen, eine Caption und ein OnExecute-Event.
Wenn die Action ausgeführt wird, bedeutet das dass das OnExecute-Event ausgerufen wird.
Jetzt kommt das coole an den Actions: man kann eine Action gleichzeitig einem Menüpunkt und einen Button zuweisen.

Actionlist auf's Formular setzen, doppelklicken und neue Action anlegen.
Dem Property Caption einen sinnvollen Inhalt geben und bei den Events OnExecute doppelklicken
und Eventhandler mit Inhalt befüllen.
Neuen Menüpunkt im Mainmenu anlegen und das Property Action setzen.
Neuen Button auf's Formular und ebenfalls die Action auswählen.

Ob man jetzt den Menüpunkt wählt oder den Button klickt - es wird immer die Action ausgeführt.
Setzt man das Enabled-Property auf False, wird sowohl der Button als auch der Menüpunkt inaktiv.

Man kann der Action auch einen Shortcut zuweisen (z.B. die Taste F5).
Der Benutzer kann jetzt den Menüpunkt wählen, den Button drücken oder F5 drücken.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

Re: Tastatureingabe erkennen

  Alt 11. Apr 2010, 00:25
Ja ja, so weit, so gut.
Nur wozu das Ganze dienen soll und inwieferne es etwas erleichtern oder auch nur übersichtlicher machen könnte, ist mir nicht klar.

Wenn ich irgend eine Aktion brauche, schreibe ich dazu eine Prozedur, und die nenne ich dann z.B. DoPrint. Wenn ich der dann noch einen Parameter Sender: Tobject verpasse, habe ich eine Ereignisbehandlungsroutine. Und dann kann ich diese Routine zu jedem beliebigen und auch zu mehreren Ereignissen als Behandlungsroutine eintragen - Menüanwahl, Buttonklick, Mausereignis oder was auch immer, während mir nicht klar ist, wie ich so eine Aktion z.B. dem Klick oder dem Doppelklick auf eine Komponente zuordnen kann. enabled nur einmal setzen zu müssen, wenn die Aktion von mehreren Seiten aus aufgerufen werden kann, ist natürlich ein Vorteil, aber es ist eigentlich der einzige, den ich in dem Ganzen sehe, und ist der den zusätzlichen Overhead wirklich wert?

Einer action kann ich zwar sogar mehrere Shortcuts zuordnen, aber eben nur die üblichen Shortcuts - die action z.B. mit einem einfachen Buchstaben ohne strg oder alt aufzurufen scheint mir erst wieder nicht ohne Trickserei möglich zu sein.

Wenn man auf Funktionstasten reagieren will, dürfte eine actionlist allerdings sinnvoll sein, weil es anscheinend die einfachste Möglichkeit ist, im Programm auf Funktionstasten zu reagieren, für die Reaktion auf normale Tasten hilft die actionlist dagegen leider auch nicht.


Liebe Grüsse Franz
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:59 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