![]() |
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 01:46 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