Enter in Delphi unterdrücken
lima-city → Forum → Programmiersprachen → Delphi & Pascal
auslsen
button
denkansto
eigenschaft
eigenstndige prozedur
ereignis
falschen button
formen
formular
hinweis
info
leertaste
lsung
returntaste
sender
sperre
steuerelement
tasten
variable
vielen dank
-
Wie kann ich es machen, dass die Tastatur in einem Delphi-Programm nicht benutzt werden kann?! Oder dass zumindest die Leertatse und die Returntaste nicht angenommen werden, oder eine Prozedur beim Drücken der Returntaste startet, denn bisher kriege ich es hin mit OnKeyDown, aber bei der Returntaste wird dann einfach immer nur ein Button gedrückt, der nur mit der Maus gedrückt werden soll/darf...
Also weiß jemand, wie ich die Return-Taste unterdrücken oder eine eigenständige Prozedur mit ihr auslösen kann?! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Setz' einfach das übergebene Zeichen (ich weiß jetzt nicht, ob das bei OnKeyDown oder bei OnKeyPress ist) auf #0 (wäre ja bei der Return-Taset #13)
Eine eigenständige Prozedur rufst du auf, indem du einfach bei OnKeyDown überprüfst, ob die Return-Taste gedrückt wurde:
if Key = #13 then ...
Wenn du Programm- oder Systemweit die Returntaste abfangen willst, dann kannst du das nur über einen Tastaturhook machen! -
Die Return-Taste beim Button kann man nicht sperren, auch wenn man in dem Ereignis OnKeyDown/OnKeyPress/OnKeyUp die Variable 'Key' zurücksetzt.
Für alle anderen Steuerelemente funktioniert das aber schon.
Hier ein Codebeispiel. Hinweis: In der Form die Eigenschaft KeyPreview auf 'True' stellen.
procedure TForm1.OnKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = Chr(vk_Return)) or (Key = Chr(vk_Space)) then
begin
Key := #0;
MessageDlg('Enter- und Leertaste sind gesperrt', mtInformation, [mbOK], 0);
end
else
begin
//Erlaubte Taste, nichts tun
end
;
end;
Also entweder verwendest du keine Buttons oder du deaktivierst die Tastatur, siehe dazu www.dsdt.info
-
Die Return-Taste beim Button kann man nicht sperren, auch wenn man in dem Ereignis OnKeyDown/OnKeyPress/OnKeyUp die Variable 'Key' zurücksetzt.
Für alle anderen Steuerelemente funktioniert das aber schon.
Hier ein Codebeispiel. Hinweis: In der Form die Eigenschaft KeyPreview auf 'True' stellen.
procedure TForm1.OnKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = Chr(vk_Return)) or (Key = Chr(vk_Space)) then
begin
Key := #0;
MessageDlg('Enter- und Leertaste sind gesperrt', mtInformation, [mbOK], 0);
end
else
begin
//Erlaubte Taste, nichts tun
end
;
end;
Also entweder verwendest du keine Buttons oder du deaktivierst die Tastatur, siehe dazu www.dsdt.info
Wäre dann ein möglicher Workaround, beim KeyDown-Ereignis eine Variable zu setzen, und dafür beim OnButtonClick-Ereignis zu prüfen, ob diese Variable gesetzt ist? Dann sollte man wissen, ob das Ereignis über die Tasatur oder über die Maus ausgelöst wurde?! -
burgi schrieb:
Wäre dann ein möglicher Workaround, beim KeyDown-Ereignis eine Variable zu setzen, und dafür beim OnButtonClick-Ereignis zu prüfen, ob diese Variable gesetzt ist? Dann sollte man wissen, ob das Ereignis über die Tasatur oder über die Maus ausgelöst wurde?!
Ja das würde funktionieren. Allerdings reagieren weder OnKeyDown noch OnKeyPress auf die Taste "Enter" beim Button. Aber es reagiert OnKeyUp.
Hier der Code:
var
Locked: Boolean;
procedure TForm1.OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = vk_Return) Or (Key = vK_Space) then
begin
MessageDlg('Enter- oder Leertaste wurde gedrückt.', mtInformation, [mbOK], 0);
Locked := True;
end
else
begin
MessageDlg('Es wurde "' + Chr(Key) + '" gedrückt.', mtInformation, [mbOK], 0);
Locked := False;
end
;
end;
[...]
-
@cbhp: tut mir leid, dass ich immer nur "Denkanstöße" geben kann, aber ich bin in der Arbeit, und da is nix mit Delphi! :-)
-
Vielen Dank!!!
Waren wirklich tolle Ideen und Lösungen, aber ich habs jezz einfacher gelöst, es sollte halt so sein, dass einer der Buttons nur mit der Maus gedrückt werden darf, nich mit Enter oder Leertaste...
Aber jezz hab ichs so, dass sobald der Button gekllickt wurde, der Fokus auf den nächsten Button geht, d.h. wenn man das mit der Maus amcht, bemerkt mans nicht,w enn man Enter drückt, kommt man auf den falschen button... ;)
-
Du kannst es ja wohl so machen wie meine Vorposter geschrieben haben, indem du die Taste auf #13 überprüfst, nur musst du dann die Eigenschaft KeyPreview deines Formulars auf true setzen, damit du wirklich JEDEN Tastendruck bekommst.
Der Abfang mit "if Key=#13 then Key:=#0" kommt dann in das OnKeyPress-Event des Formulars ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage