21. juli 2000 - 11:15Der er
22 kommentarer og 1 løsning
Press Any key
Hvordan laves en simpel \'Press Any Key\' user control, som beholder focus (og ikke gør andet) indtil der trykkes på tastaturet? Når der trykkes på en vikårlig tast, skal programmet fortsætte hvor det slap, da PressAnyKey.setFocus blev kaldt!
ultik>>hvis jeg fjerner $ fra a$, får jeg: \"compile error: expected: (\"
mikker>>jo, textbox\'en kunne være den sidste udvej, men det giver to problemer: cursoren blinker for input, og man kan bruge TAB til at skifte til en anden control. Kan textbox-cursoren skjules? Kan man disable TAB?
Jeg bruger VB 5.0 Det gode ved denne funktion er, at du også kan fange \"keypres\" LIGEMEGET om det er på din form! Lav følgende function i et modul:
------------------ Start kopiering:
Public Declare Function GetAsyncKeyState Lib \"user32\" (ByVal vKey As Long) As Integer Public CurrentKeyPressed(255) As Boolean
Public Function GetAllKeys() Dim nr As Integer
For nr = 0 To 255 If GetAsyncKeyState(nr) = -32767 Then CurrenctKeyPressed(nr) = True End If Next End Function
------------------ Stop kopering
Du kan så fra din form, tjekke hvilke knapper der er trykket på. Husk at musen bruger nr 1-3 (tror jeg) og HUSK at der ikke bruges ANSCII koder, så du skal lige prøve dig frem. Send en mail for mere hjælp.
Dog skal jeg lige gøre opmærksom på, at responsen fra GetASyncKeyState vist har følgende 3 responses: 0 - Knappen holdes ikke inde 1 - Knappen er blevet trykket på -32767 - Knappen er trykket ind -32768 - Knappen er stadig trykket ind, Dvs at den ikke er blevet sluppen siden sidst du spurgte.
GetAsyncKeyState synes at være funktionen der skal anvendes. Men jeg kan ikke få følgende programstump (uddrag) til at virke:
[module key code] Public Declare Function GetAsyncKeyState Lib \"user32\" (ByVal vKey As Long) As Integer
[form code] . . do label1.caption = key.GetAsyncKeyState(1) loop .
label1 skulle gerne udskrive returværdien af funktionskaldet key.GetAsyncKeyState(1), der undersøger om venstre museknap holdes nede. Men der bliver ingenting udskrevet, uanset hvor mange gange eller hvor hårdt jeg trykker på min venstre museknap! Hvad har jeg overset her? Skulle jeg få eksemplet her til at virke, tror jeg PressAnyKey-problemet er løst. :)
Det er fordi, at do og loop kører lige så hurtigt, som din pc kan klare, og derfor bruger alle resourcer. Derfor er der ikke resourcer til at opdatere label1. Dette kan løses ved at sætte en \"DoEvents\" ind. do Doevents label1 = bla bla bla loop
Men dette bør kun være til afprøvning, da doevents gør at andre events også køres. Jeg har en ide, der nok er bedre. Lav en Timer (Timer1), og sæt interval til 1.
Private Sub Timer1_Timer() Label1.Caption = GetAsyncKeyState(1) End Sub
Sådan kan det jo gå når man er en travl softwareudvikler :) Jeg undskylder den lange ventetid, og 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.