Toon posts:

[Delphi] Event voor numeriek toetsen + CTRL, enz..

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik een event creeeren bij de toetsen op het numerieke toetsenbord + de CTRL, ALT, SHIFT toetsen bij het actieve form?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Voldoet de OnKeyDown van een TForm niet?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Topicstarter
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.

Verwijderd

Message queue van je applicatie afvangen is een goeie optie:
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...

Verwijderd

Topicstarter
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?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:46

Creepy

Tactical Espionage Splatterer

Zet keypreview op true (is property van een form)

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


Verwijderd

Topicstarter
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.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:46

Creepy

Tactical Espionage Splatterer

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.

"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


Verwijderd

Topicstarter
Thnx, de oplossing was om Key := 0 te zetten
Pagina: 1