Hoe kan ik een event creeeren bij de toetsen op het numerieke toetsenbord + de CTRL, ALT, SHIFT toetsen bij het actieve form?
Voldoet de OnKeyDown van een TForm niet?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Nee die reageert niet op die toetsen.
Waarschijnlijk moet ik de functie GetKeyState of GetKeyBoardState gebruiken om te achterhalen of die bepaalde toets ingedrukt is. Maar dan moet er wel eerst een event gecreeerd worden en moeten die toetsen door de form worden doorgegeven.
Waarschijnlijk moet ik de functie GetKeyState of GetKeyBoardState gebruiken om te achterhalen of die bepaalde toets ingedrukt is. Maar dan moet er wel eerst een event gecreeerd worden en moeten die toetsen door de form worden doorgegeven.
Verwijderd
Message queue van je applicatie afvangen is een goeie optie:
In deze vorm nog niet echt nuttig, maar 't geeft een indicatie waar je 't zoeken kunt...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // private procedure of the mainform
procedure TForm1.MessageHandler(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_KEYDOWN then
StatusBar1.SimpleText := IntToStr(Msg.wParam) + ' pressed';
if (Msg.message = WM_SYSKEYDOWN) and (Msg.wParam = 18) then
StatusBar1.SimpleText := 'ALT key pressed';
Handled := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := MessageHandler;
end; |
In deze vorm nog niet echt nuttig, maar 't geeft een indicatie waar je 't zoeken kunt...
Ik zit nog met het volgende probleem:
Het systeem reageert de 1e keer goed op de ALT toets. Maar als ik gelijk nog een keer op de ALT toets druk, reageert het systeem daar niet op. Waarschijnlijk omdat het systeem op een andere toets wacht.
Maar hoe kan ik nu code laten uitvoeren bij iedere druk op de ALT-toets?
Het systeem reageert de 1e keer goed op de ALT toets. Maar als ik gelijk nog een keer op de ALT toets druk, reageert het systeem daar niet op. Waarschijnlijk omdat het systeem op een andere toets wacht.
Maar hoe kan ik nu code laten uitvoeren bij iedere druk op de ALT-toets?
Zet keypreview op true (is property van een form)
en in de onkeydown zoiets:
Dit werkt bij mij perfect. Ik gebruik dit om ctrl, shift en alt samen met de cursor toetsen af te vangen. In de help staat dan wel dat alt,shift e.d. geen keydown events genereren.. ze doen het stiekum toch
en in de onkeydown zoiets:
code:
1
2
3
4
5
6
7
8
9
| procedure TMainform.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if shift=[ssAlt] then
showmessage('alt');
if key=VK_LEFT then
showmessagre('cursosleft');
if key=VK_NUMPAD0 then
showmessage('numpad 0');
end; |
Dit werkt bij mij perfect. Ik gebruik dit om ctrl, shift en alt samen met de cursor toetsen af te vangen. In de help staat dan wel dat alt,shift e.d. geen keydown events genereren.. ze doen het stiekum toch
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Ja maar wat ik al zei, probeer maar eens 2 keer achter elkaar op ALT te drukken zonder op een andere toets te drukken. Je zal zien dat dan de 2e keer geen event gecreeerd wordt.
Werkt hiero prima hoor! (keypreview op true??!!)
Kan honder keer op alt drukken.. event wordt elke keer aangeroepen..
Zet anders aan het einde van de functie key op 0 en shift op []. Dan voorkom je dat andere objecten die key nog doorkrijgen.
Kan honder keer op alt drukken.. event wordt elke keer aangeroepen..
Zet anders aan het einde van de functie key op 0 en shift op []. Dan voorkom je dat andere objecten die key nog doorkrijgen.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Pagina: 1