Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - problem mit Hotkey ( Entertaste auf Nummernblock )
MephistoFFF - Fr 08.08.08 11:29
Titel: problem mit Hotkey ( Entertaste auf Nummernblock )
Hallo!
Ich hab vor kurzem einen Taschenrechner programmiert. Also einen ganzen simplen - wie der WIndows Taschenrechner im StandartModus... halt zum "üben"
Jetzt wollte ich das Ding auch per Numpad steuern können... geht soweit auch... mit Onkeydown...
Delphi-Quelltext
1: 2: 3: 4:
| if (key = VK_DIVIDE) then B_DurchClick(B_Durch); if (key = VK_SUBTRACT) then B_MinusClick(B_Minus); if (key = VK_ADD) then B_PlusClick(B_Plus); if (key = VK_Multiply) then B_MalClick(B_Mal); |
Das funktioniert wunderbar, aber
Delphi-Quelltext
1:
| if (key = VK_RETURN) then B_ErgebnisClick(B_Ergebnis); |
funktioniert eben nicht. Da kann ich "enter" drücken wie ich will, er macht nur einen "klick" auf den aktuell aktiven button... die hotkey-funktion funktioniert aber nicht.
Was hab ich ich falsch gemacht, bzw vergessen?
Bin für jede Hilfe dankbar.
mfG
Hidden - Fr 08.08.08 11:58
Hi,
Erstmal ein Vorschlag: Du kannst deine vielen If-Abfragen durch eine Case-Verzweigung ersetzen ;)
Nun zu deinem Problem: Es gibt unter den Eigenschaften der Form eine Eigenschaft 'KeyPreview', das sollte helfen.
Es wäre allerdings performanter, ein Edit-Feld zu verwenden; dort könnte der User den Therm dann eintippen und mit Enter bestätigen ;)
mfG,
MephistoFFF - Fr 08.08.08 12:01
KeyPreview ist aktiviert, ist es deaktiviert geht garkein Hotkey mehr.
Und das mit dem Therm eingeben... so wollte ich das eben grade nicht^^
Hidden - Fr 08.08.08 15:01
Hi,
Eventuell bringt ein Wechsel auf ein anderes Key-Event etwas.. Definitiv solltest du den Key danach aber zerstören(Key := #0), da sonst zusätzlich der Button betätigt wird.
Imho ist das übrigens immernoch der falsche Ansatz: Ein Term wird nicht über Hotkeys eingegeben, sondern über ein Edit-Feld. Hotkeys sind wirklich nur für Shortcuts da :?
mfG,
GTA-Place - Fr 08.08.08 15:05
@Hidden: Dafür sind doch grad die Tasten auf dem Nummernblock da - und Hotkeys sind das nicht. Außerdem schon den Win-Taschenrechner benutzt? Dort kann man ebenfalls die Tasten auf dem Nummernblock verwenden. Die Tastatur-Macher haben ja auch nicht umsonst da Rechenzeichen draufgemalt.
EDIT: Achso, warum Enter nicht geht: Weil Enter kein Ereignis auslöst. Siehe Delphi-Hilfe zu "KeyPreview".
Lannes - Fr 08.08.08 15:45
Hallo,
das Auslösen des OnClick-Events des Buttons der den Focus hat ist Windows-Standard, und auch gut so. In dem Fall wird der Key direkt an den Button geschickt, er wird auch bei KeyPreview = True nicht erkannt. Wenn man das verhindern will muss man sich vorher einklinken(Stichwort CM_DIALOGKEY) oder dafür sorgen das kein Button den Focus hat, z.B. Focus auf ein Edit setzen.
MephistoFFF - Fr 08.08.08 15:49
das mit dem fokus klingt gut... und wie funktioniert das beides? also den fokus setzen und das mit dem dialogkey?
mfG
MephistoFFF - Sa 09.08.08 12:30
Danke für die Hilfe.
Allerdings funtioniert das noch nicht so richitg. Wenn ich die Procedure so einbaue wie du es beshcirben hast, dann funktioniert die Tast auch, allerdings nur solnage ich nicht anderes im Programm gemacht habe... also nach dem starten drücke ich Enter auf dem Nummerblock und es kommt ne Message ( zum testen ) ... sobald ich aber irgendwas anderes mache funktioniert die entertaste nicht mehr...
mfG
Lannes - Sa 09.08.08 19:41
Hallo,
MephistoFFF hat folgendes geschrieben: |
...allerdings nur solnage ich nicht anderes im Programm gemacht habe...
... sobald ich aber irgendwas anderes mache funktioniert die entertaste nicht mehr... |
könntest Du das näher erläutern, mit den Infos kann man wenig anfangen :nixweiss:
MephistoFFF - Sa 09.08.08 23:00
Also, ich habe die procedur für das abfangen der standartfunktion + zuweisen neuer funktion für die entertaste genau so, wie es in deinem verlinkten thread stand, "eingabaut"...
zum test habe ich auf die entertaste einen "showmessage" befehl gelegt.
Wenn ich das programm jetzt starte und nichts anklicke bzw mache, dann funktioniert die entertaste und die message wird angezeigt. Drücke ich jetzt allerdings irgendeinen button oder eine andere taste auf dem nummernblock funktioniert die funktion der entertaste danach nicht mehr.
Ich hoffe du verstehst mein problem^^
danke im vorraus
mfG
Lannes - Sa 09.08.08 23:15
Hallo,
kannst Du Deinen Code hier mal reinsetzen, wenn es zuviel ist, dann als Anhang.
Ich schau mir das dann mal an.
MephistoFFF - So 10.08.08 00:03
Ok, hier mal das komplette Zeugs... wie gesagt, es ist nix besonderes... nur zum rumprobieren und "üben" ^^
( Es gibt bestimmt einiges was man hätte weniger umständlich lösen können^^ )
Lannes - So 10.08.08 01:37
Hallo,
Du nutzt in Deinem Code beide Varianten die ich vorgeschlagen habe.
Nimm das SetFocus mal raus, dann funktioniert es.
Bei jedem Botton-Click setzt Du den Focus auf das Edit.
Die Eigenschaft Edit.WantReturns hast Du auf True stehen, also wird der Enter-Key dort aufgefangen, ist also sozusagen kein DialogKey mehr.
MephistoFFF - So 10.08.08 10:27
Ok, das mit dem Fokus werde ich mal rausnehmen...
Gibt es irgendeine möglichkeit den fokus zu deaktivieren? weil ich finde es nicht grade optisch schön wenn ein button anders aussieht als alle anderen, eben weil er fokusiert ist...
Danke^^
mfG
Lannes - So 10.08.08 12:24
Hallo,
indem Du den Focus auf eine andere Komponente setzt(SetFocus) oder:
dann ist keine Komponente focusiert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!