Hvis du skriver tmessage i et delphi program og med cursoren på ordet trykker f1 får du en defination af tmessage.
I denne defination er en parameter, lparam.
Når en program modtager sådan en message, som fortæller at der er trykket på en tast, vil lparam indeholde tasten \"virtuelle\" værdi.
Den virtuelle værdi, også kaldet virtual keycode, vil jeg gerne isolere (f.eks. via. en AND) ud af lparam.
Der står i hjælpen, at det er bit 16 til 23, der indeholder denne værdi.
Jeg skal have konstrueret en sætning, der kopierer disse bits ud af værdien til en ny variabel, således at jeg ikke får andre dele af lparam med end det jeg skal bruge.
jammen dine scan kodet siger noget om noget fysisk, fx. er tasten på vej op eller på vej ned. Er det højre eller venstre shift taste. Etc. Hvorimod en virtual key er en integer der repræsenterer den tast der er trykket ned.
Hvis kigger på et onKeyDownEvent :
procedure TForm1.ButtonGoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin
end;
Så Sender er Det objekt der kaldte funktionen (Surprise) key : Er din Virdual key. VK_RETURN, VK_A etc. Shift bliver til ud fra din Scancode, dog kan du ikke i den (Shift: TShiftState) skelne mellem de to ShiftTaster .....
Hele eventet er også blevet til i en Keyboard hook, hvor det før viste check er blevet lavet :
if (HiWord(lParam) and KF_DOWN) <> 0) then begin //Kald til OnKeyDown(); end;
Det, jeg er i gang med, er at lave en \"hotkey\" funktionalitet til et program. På et tidspunkt, får jeg brug for at brugeren kan vælge den hotkey. Derfor er jeg programmeringsmæssigt ligeglad med hvilken tast der trykkes på, så for at gøre det nemmest, ønsker jeg sådan set bare en tal værdi for tasten og om den er trykket eller sluppet. Det kan jeg vel ikke få fra via. hiword (lparam) fordi at skankoden ligger i bits 16-23 ? De højere bits indeholder jo info. om blandt andet om tasten er extended og om den er trykket ned, gentrykket eller sluppet. Jeg skal vel bare egentlig kopiere bits 16-23 ud af lparam og så har jeg en værdi for tasten, eller hvad mener du?
Nu har jeg kigget på det, men jeg tror ikke rigtigt kan bruge det til mit projekt.
Hvis jeg tager wparam fra keyboard message\'n får jeg jo \"virtual keycode\", hvilket er nogenlunde godt. Desværre skelnes der ikke imellem f.eks. venstre shift og højre shift.
Jeg gør det iøjeblikket med et keyboard hook. Her modtager hovedprogrammet Windows keyboard messages, som den kigger på for at afgøre om en tast er trykket.
jeg prøvede men jeg synes ikke at det virker. Det er også lige meget - det er vigtigere at der skelnes mellem venstre og højre shift, ctrl og alt tasterne.
Nå... Det er da også ved at være gammelt det her spørgsmål. Lige for en opsumerings skyld, her er lige hvad der sket siden sidst:
Jeg prøvede at inplementere din hotkey i programmet men det endte med at jeg fjernede den igen fordi jeg ikke var helt tilfreds med hvordan den virkede til formålet.
Jeg har dog imidlertid fundet et lille stykke kode, der hiver scankoden ud af en keyboardmessage, men tilsyneladende giver det ingen forskel på venstre og højre alt.
Det kan være det ender med at jeg bruger din komponent, men sandsynligvis bruger jeg nok mine hook rutiner.
Men du har da mere end rigeligt fortjent pointene og jeg takker for hjælpen :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.