![]() |
Im OnKeyDown Taste abfangen
Hallo!
Im OnKeyPress kann man eine taste ja allgemein so abfangen:
Delphi-Quellcode:
da dort Key vom Typ Char ist. Im OnKeyDown ist es jedoch ein Word. Folgendes geht leider nicht:
Key := #0;
Delphi-Quellcode:
Da passiert einfach nichts, der Text wird normal eingefügt. Wie löse ich das Problem?
Key := 0;
|
Re: Im OnKeyDown Taste abfangen
Wenn Du in einer TForm die Verarbeitung von Tasten per OnKeyDown/Up abfangen willst, müsstest Du doch KeyPreview := True setzen, ansonsten wird der Event der TForm erst NACH der Abarbeitung durch das Client-Control aufgerufen.
|
Re: Im OnKeyDown Taste abfangen
Ich habe vergessen zu erwähnen, dass es um ein SynEdit geht, blöd von mir. Das müsste sich eigentlich verhalten wie ein Memo oder ähnliches.
|
Re: Im OnKeyDown Taste abfangen
Geht das gar nicht? :stupid:
|
Re: Im OnKeyDown Taste abfangen
Ord(#0) ?
..vielleicht so? nicht getestet |
Re: Im OnKeyDown Taste abfangen
Hallo Tyrael!
Danke, aber auch das geht nicht. Das seltsame ist, dass Key := 0; bei der Enter-Taste funktioniert:
Delphi-Quellcode:
if ssShift in Shift then
begin Case Key of //Geht ==> ' ' VK_RETURN: begin Form1.InsertAtCaret(' ', ActSynEdit.CaretX, ActSynEdit.CaretY); Key := 0; end; //geht nicht ==> ' ' (Leerzeichen am Ende) VK_SPACE : begin Form1.InsertAtCaret('', ActSynEdit.CaretX, ActSynEdit.CaretY); Key := Ord(#0); end; end; end; |
Re: Im OnKeyDown Taste abfangen
Hab mal grad die Virtual Key Codes angeguckt
1-254 ist deklariert, aber die Null nicht, einer würde ja noch fehlen und sollte ja dann die Null sein, aber in meiner Windows-Unit kann ich keinen VK-Code für Null finden... ..merkwürdig ist mir nie aufgefallen :gruebel: |
Re: Im OnKeyDown Taste abfangen
Bei mir steht in der Hilfe von Delphi 6 einiges unter "Virtual Key Codes":
Zitat:
Gruß ManuMF P.S.: Den roten Kasten hab ich gesehen, aber vielleicht findet sich doch was in der Liste. |
Re: Im OnKeyDown Taste abfangen
Das sind ja die normalen Key-Codes von 1-254, aber es müssten 255 sein, sprich einer fehlt und mit hoher wahrscheinlich eben die Null.....
|
Re: Im OnKeyDown Taste abfangen
Sowas würde gehen:
Delphi-Quellcode:
Aber auch nicht so die super Lösung. ;)
VK_SPACE : begin
Form1.InsertAtCaret(' ', ActSynEdit.CaretX, ActSynEdit.CaretY); Key := VK_BACK; end; |
Re: Im OnKeyDown Taste abfangen
Hi Matze,
ich hab hier eine Lösung, ist IMHO auch nicht die Beste, finde ich aber schöner wie deine ;) Du brauchst auf deiner Form ein TApplicationEvents. Danach ein Variable:
Delphi-Quellcode:
Im OnCreate stellst du die Variable auf false.
IsShift: Boolean;
Danach machst du im OnKeyDown deiner Form (vorausgesetzt KeyPreview ist auf true):
Delphi-Quellcode:
Danach brauchst du noch das OnMessage des TApplicationEvents:
IsShift := ssShift in Shift;
Delphi-Quellcode:
Wie gesagt, ist zwar nicht beste Lösung, aber besser wie deine ;)
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if Msg.message = WM_KEYDOWN then begin if (Msg.wParam = VK_SPACE) and (IsShift) then begin SynEdit1.Lines.Add('Blubb'); Handled := true; end; end; end; |
Re: Im OnKeyDown Taste abfangen
Zitat:
|
Re: Im OnKeyDown Taste abfangen
Zitat:
|
Re: Im OnKeyDown Taste abfangen
Zitat:
|
Re: Im OnKeyDown Taste abfangen
Hi Matze,
ich hab nochmal ein bisschen rumprobiert und zu folgender Lösung gekommen: Klopp das TApplicationEvents erstmal in die Tonne. Die Variable IsShift behälst du aber bei. Dann folgender Code im OnKeyPress deiner Form:
Delphi-Quellcode:
if IsShift then
Key := Chr(0); |
Re: Im OnKeyDown Taste abfangen
Zitat:
:gruebel: Was spricht gegen OnKeyPress, bei einem Edit-Felt/Memo funzt das so: (habe kein SynEdit)
Delphi-Quellcode:
:gruebel: ...Man muss halt nur noch den verflixten Cursor richtig positionieren.
// OnKeyPress Edit1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case key of #13: begin Edit1.Text := Edit1.Text + ' '; Key := #0; end; #32: begin Edit1.Text := Edit1.Text +''; Key := #0; end; 'a': begin Edit1.Text := Edit1.Text +'ä'; Key := #0; end; end; end; |
Re: Im OnKeyDown Taste abfangen
Zitat:
|
Re: Im OnKeyDown Taste abfangen
Zitat:
Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var mgsTemp: TMsg; begin case key of VK_Return: begin memo1.Text := memo1.Text + ' '; PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; VK_Space: begin memo1.Text := memo1.Text +''; PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; 65: begin memo1.Text := memo1.Text +'ae'; PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 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