Drücken der Taste "G" abfangen - Wie?
-
Du kannst z.B. mit dem Focus arbeiten.
Also die Aktion nur dann ausführen, wenn 'g' gedrückt wurde und der Focus
auf der Hauptform (oder eben nicht auf einem der Textfelder) liegt.
-
In OnKeyPress Event des Editfeldes
Key=0
setzen
-
@Christian411
Das funktioniert leider nicht. Wenn ich im Edit Feld 'g' drücke wird trotzdem die Key-Abfrage ausgeführt@GIll Bates
Wie genau kann ich denn rausfinden, ob das Forum den Focus hat?
Ich habe es mal so probiert:if(artikel_bearbeiten->Focused() == true)Das funktioniert leider nicht.
-
Tja, überall woanders funktionert es halt -> Sicherlich wird die Abfrage durchgeführt, aber das G sollte nicht mehr im Editfeld stehen (und darauf bezog sich deine Frage)-> wenn doch hast du was falsch gemacht
-
Sorry, dann habe ich mich falsch ausgedrückt. Ich möchte, dass wenn man im Edit-Feld was eingibt die Key-Abfrage nicht ausgeführt wird.
Also das im Edit-Feld der eingegebene Text erscheint.
-
a) Dann versuch im OnEnter des Editfeldes KeyPreview=false und im OnExit wieder auf true
b) Setze im OnEnter eine globale boolsche Variable auf true, die du in deinem Keyevent erst prüfst. Im OnExit wieder auf false
-
also du willst G drücken und in einem eingabefeld soll dann der text erscheinen ? Welcher Text soll denn erscheinen ? Einer aus dem Clipboard oder ner member Variablen ?
-
Firefighter2000 schrieb:
also du willst G drücken und in einem eingabefeld soll dann der text erscheinen ? Welcher Text soll denn erscheinen ? Einer aus dem Clipboard oder ner member Variablen ?
hast du den Thread gelesen?
-
Hi Leute !
Wollt hier nicht noch extra nen Thema für aufmachen ...
Ist es möglich Befehle (Tasten) direkt an eine Komponente zu senden ?
Denn ich hab hier eine Terminalkomponente und die akzeptiert meine Tastenkombinationen nur wenn sie im Fokus ist ... nun die spannende frage ob es auch möglich ist eine Kombination von Tasten an diese Komponente zu senden wenn sie, sagen wir mal, nicht sichtbar ist.Danke
-TheGeek-
-
SendMessage mit WM_KEYDOWN
-
danke für den denkanstoß Christian411 ...
Habe gleich mal die Suche bemüht und bin auf einen Beitrag von dir gestoßen ... jedoch kann ich aus diesem nicht ganz ableiten wie man denn nun ein Tastendruck an eine Komponente schickt. (dort ging es um Farben im Checkbox Dialog) Nett wäre wenn du ein Beispiel Parat hättest um mir den Vorgang noch etwas zu erläutern.
Denn ich hänge hier:
SendMessage(VaTerminal1->Handle,WM_KEYDOWN,?,?);Thx
TheGeek
-
-
ahh siehe da ein einfaches suchen bei google half mir.
denn es klappte mit:
PostMessage(VaTerminal1->Handle,WM_KEYDOWN,0x4D,0);Danke für die Hilfe !

--------------- EDIT ---------------
ähhm wie kann man mit PostMessage die "Strg" taste gedrückt halten ? Um kombinationen wie zb Strg+C oder ähnliches zu erzeugen.
Leider klapptPostMessage(VaTerminal1->Handle,WM_KEYDOWN,0x10,0);nicht

--------------- EDIT ---------------
Okay falsch gegugt hab nach dem suchen doch was passendes gefunden.
MitPostMessage(VaTerminal1->Handle,WM_KEYDOWN,0x03,0);geht's wunderbar.
Eine kurze Erklärung zu Steuerzeichen und CTRL Sequenzen.
Zu Beginn des Computerzeitalters waren Terminals per serieller Schnittstelle an den Rechner angebunden. Wenn man Steuerzeichen senden wollte ( also Zeichen, die nicht auf der Tastatur waren, teilte man dem System das mit der Taste Control mit). So nun lange Rede kurzer Sinn:
CTRL + A = 1
CTRL + C stellt den ASCII Wert 3 da
Deswegen kann man dann mit CTRL+J (10)auch einen "Wagenrücklauf" auslösen und mit CTRL + M (13) eine Zeilenumbruch.
-
Christian411 schrieb:
a) Dann versuch im OnEnter des Editfeldes KeyPreview=false und im OnExit wieder auf true
b) Setze im OnEnter eine globale boolsche Variable auf true, die du in deinem Keyevent erst prüfst. Im OnExit wieder auf false
Danke Christian411. Variante a funktioniert sehr gut. Jetzt habe ich dazu aber noch eine Frage:
- Ich habe auf meinem Form mehrere Edit Felder. Kann ich den Wert für OnEnter und OnExit für alle auf einmal setzen? Z.B. beim Creat oder Active?
Danke im voraus.
-
Weiss jetzt nicht was du meinst
-
Also ich habe z.B. ein Formular mit 13 Edit Felder. Muß ich bei denen deine Variante a von Hand einstellen, oder ich ich das bei Create/Activate des Forms automatisch anlegen?
-
Wenn das alles statische Edits sind, kannst Du die alle gleichzeitig markieren und die gewünschten Ereignismethoden zuweisen.
Oder aber tatsächlich für die Edits im Konstrukor des Forms die Methoden zuweisen.
-
Hallo
ich vermute EPMS will für alle seine Edits solche OnEnter/OnLeave-Überprüfungen.
Nimm statt dem bool-Member (bitte keine globale Variable!) einen Pointer auf TComponent, wo du statt true/false immer den Sender des letzten Aufrufs bzw NULL einträgst, so kannst du nicht nur später vergleichen ob ein Control gerade im OnEnter war, sondern auch welches.
bis bald
akari
-
Genau akari. Das meinte ich.
Allerdings ist mir dein Vorschlag noch etwas zu hoch.

Mit Pointer habe ich mich noch nicht wirklich beschäftigt. Kannst du mir da einen Tipp geben, wie genau ich deinen Vorschlag realisieren kann?
-
Hallo
Form-Header
... privte : TObject* lastenter; // anstatt einfachem bool hinzufügen public :Form-Implementation
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), lastenter(0) // Member initialisieren // Diese beiden Eventmethoden jedem betreffendem Edit zuweisen void __fastcall TForm1::EditEnter(TObject* Sender) { lastenter = Sender; } void __fastcall TForm1::EditExit(TObject* Sender) { lastenter = NULL; }jetzt kannst du an jeder belibigen Stelle deines Forms mit
if (lastenter == Edit1)bis bald
akari
überprüfen, ob Edit1 gerade fokusiert ist