Avatar billede nolle_k Nybegynder
02. januar 2001 - 11:56 Der er 16 kommentarer og
1 løsning

WM_LBUTTONDOWN

Hej!!

Kan det ikke lade sig gøre at fange et Museklik uden for en form der er vist i Modal mode???

Avatar billede pstric Nybegynder
02. januar 2001 - 14:35 #1
Jo, du kan bruge SetCapture til at fange alle museinput. Se mere på http://msdn.microsoft.com/library/psdk/winui/mousinpt_4fol.htm
Avatar billede nolle_k Nybegynder
02. januar 2001 - 16:05 #2
Ja, men hvordan fanger jeg det rent faktisk i et VB modul eller en form eller event???
Avatar billede chris2k Nybegynder
04. januar 2001 - 21:30 #3
Public Declare Function GetAsyncKeyState Lib \"user32\" (ByVal vKey As Long) As Integer

Denne funktion fortæller dig hvis en tast er blevet aktiveret et sted i windows. Put denne linie ind i en timer, også skulle det nok funke:

If GetAsyncKeyState(vbKeyRButton) Then
  Msgbox \"Rightbutton click detected\"
End If

(husk at indstille timerens interval til 1)
Avatar billede jennemaan Nybegynder
04. januar 2001 - 22:22 #4
Du skal da ikke sætte timerens interval til 1 medmindre du vil have en app. der totalt dræner din maskine for cpu!

/Jennemaan :)
Avatar billede chris2k Nybegynder
04. januar 2001 - 22:31 #5
Ved du overhovedet hvad funktionen gør? Den har jo ikke nogen event, så du er nødt til at checke heletiden, ellers får du ikke svaret, inden det er blevet overskrevet af en anden key.
Avatar billede pstric Nybegynder
04. januar 2001 - 22:36 #6
Lige netop derfor ville jeg også foretrække at kalde SetCapture. Derefter bliver alle museevents sendt til formen. At kalde GetAsyncKeyState hele tiden, tvinger jo maskinen i knæ, som jennemaan skriver.
Avatar billede chris2k Nybegynder
04. januar 2001 - 22:38 #7
Ikke nødvendigvis...måske med de gode gamle 486\'ere...

Anyways, gør som du vil, i dont care!
Avatar billede jennemaan Nybegynder
04. januar 2001 - 22:48 #8
chris2k > selv en PIIII1500Mhz med quadro cpu og dobbelt overliggende knastaksel vil have et betydeligt cpuforbrug ved timerinterval på 1... Du tvinger den til at kalde GetAsyncKeyState hvert millisekund! -og med Marshalling ned til user32.dll skal du bare se løjer!

SetCapture er den rigtige at bruge...

Alternativt skal du kalde GetAsyncKeystate i lostfocus event\'en af formen (for at fange klik uden for formen) og bruge den almindelige on_click for kliks på formen...

Så slipper du for grimme timerdræn :)


/Jennemaan
Avatar billede chris2k Nybegynder
04. januar 2001 - 22:51 #9
Ja, du har nok ret i at den er bedst at bruge i procedurer.
Avatar billede nolle_k Nybegynder
05. januar 2001 - 08:23 #10
Holdt stop Stands!!

Sådan som jeg har løst det nu bruger jeg GetAsyncKeyState med et interval på 50 m. sek.
Der er bare uhensigtsmæssigheder med GetAsyncKeyState i det tilfælde hvor jeg skal bruge det.

Jeg ville meget gerne kunne bruge SetCapture!! Mit problem er bare at jeg ikke ved hvordan jeg fange de museklik, der falder uden for Formen! De falder i hvertfald ikke i Form_MouseDown eventet!! I hvert fald ikke i min form i hvert fald!
Avatar billede nolle_k Nybegynder
05. januar 2001 - 08:25 #11
Jeg bruger en form vist Modal så jeg kan ikke tester for at formen mister focus da den altid vil have focus med mindre en kontrol i formen tager focus. Og det er ikke dette jeg søger!
Avatar billede pstric Nybegynder
05. januar 2001 - 09:00 #12
nolle_k>> Jeg har vist vildledt dig. SetCapture kan kun fange klik fra forme, der er oprettet af det samme program, der oprettede din modale form. Jeg gik ud fra, at det var den type klik, du var interesseret i, men hvis du også vil fange klik, der ligger på andre programmers forme eller på desktoppen, så kan du ikke bruge SetCapture. Og jeg har en mistanke om, at det vist er det du vil.
Avatar billede nolle_k Nybegynder
05. januar 2001 - 09:03 #13
Nej du her nøjagtig fat i det jeg vil!

I den periode hvor min form er vist SKAL ALLE museklik gå til denne. Dette kan gøre i VC++ via SetCapture!! Det jeg ikke kan finde ud af er hvordan jeg fange museklikken. Det er FULDSTÆNDIG lige meget, hvor der klikkes!

//Nolle_K
Avatar billede pstric Nybegynder
05. januar 2001 - 09:14 #14
nolle_k>> Hvis du kalder SetCapture, og brugeren derefter klikker på f.eks. et IE vindue, så vil din applikation ikke få noget at vide om det klik.

Det, du kan gøre med SetCapture er, at du kan forhindre musen i at gå udenfor din form så længe brugeren holder knappen nede. Hver gang du modtager en mousemove, sørger du bare for at placere musen indenfor din form. Men så snart brugeren slipper musetasten, så får du ikke længere mouseevents, og det tror jeg altså heller ikke at du kan i VC++.
Avatar billede pstric Nybegynder
05. januar 2001 - 09:16 #15
nolle_k>> Jeg har selv tit brugt SetCapture i forbindelse med drag and drop operationer indenfor samme applikation. Her kan det tit være en fordel at hjælpe brugeren med at holde sig indenfor formen.
Avatar billede nolle_k Nybegynder
05. januar 2001 - 09:41 #16
Nej det er forkert!

SetCapture omdirigerer ALLE muse operationer til det vindue, der har kaldt SetCapture! Tro mig! Jeg har brugt det i stor stil i VC++!!

Jeg er ikke interesseret i at brugeren holder musen inden for formen! Og det kan forresten gøres meget mere enkelt med API kaldet ClipCursor!
Avatar billede pstric Nybegynder
26. januar 2001 - 13:58 #17
nolle_k>> Lukker du her?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester