nahoy Skrevet 25. november 2004 Del Skrevet 25. november 2004 (endret) hei, Skal skru av et par knapper i et program jeg lager(blant annet enter), slik at det ikke skjer noe når jeg trykker på dem. Enter skal ikke virke fordi man bare skal kunne klikke med musen.. Hvordan gjøres dette? Endret 25. november 2004 av nahoy Lenke til kommentar
abcd423417984 Skrevet 25. november 2004 Del Skrevet 25. november 2004 knappnavn.enable = false Lenke til kommentar
nahoy Skrevet 25. november 2004 Forfatter Del Skrevet 25. november 2004 skal gjøre slik at man kan trykke med musen, ikke enter.. Lenke til kommentar
abcd423417984 Skrevet 25. november 2004 Del Skrevet 25. november 2004 Ahh beklager. Du kan vel fjerne TabIndex property'en så vil du ikke kunne markere knappen ved hjelp av tastaturet? Lenke til kommentar
nahoy Skrevet 25. november 2004 Forfatter Del Skrevet 25. november 2004 min feil, burde nevnt det i stad.. Prøvde det med tabindex , prøvd bare å stryke ut tallet, men fikk da denne feilmeldingen: "Invalid property value" Lenke til kommentar
nahoy Skrevet 25. november 2004 Forfatter Del Skrevet 25. november 2004 ah, nå skjønte jeg hva du mente, TabStop, funket nesten perfekt.. men når jeg trykker på knappen blir den selektert allikevel, vil helst unngå det.. men hvis det er umulig, så får det bare være Lenke til kommentar
Blib Skrevet 25. november 2004 Del Skrevet 25. november 2004 Hva med å fjerne knappen og heller legge til en label der som det skal skje noe med når du trykker på den? Lenke til kommentar
nahoy Skrevet 25. november 2004 Forfatter Del Skrevet 25. november 2004 funka flott, det, tusen takk! Ikke at jeg må gjøre det... men er det egentlig i det hele tatt mulig å skru av enter helt? Lenke til kommentar
Jonas Skrevet 25. november 2004 Del Skrevet 25. november 2004 (endret) Enter knappen er litt spesiell. Dette funker: Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) Command1Click End Sub Private Sub Command1_KeyPress(Key As Integer) Command1Click End Sub Private Sub Command1Click() MsgBox "Knappen er trykket på" End Sub Edit: Andre knapper kan man bruke dette: (Bruker textbox som eksempel. Lettere å se der) Private Sub Text1_KeyPress(Key As Integer) Key = 0 End Sub Endret 25. november 2004 av Jonas Lenke til kommentar
nahoy Skrevet 25. november 2004 Forfatter Del Skrevet 25. november 2004 snålt... virket ikke hos meg. gjeesp prøver mer i morgen.. Lenke til kommentar
aadnk Skrevet 25. november 2004 Del Skrevet 25. november 2004 Det virker som om det finnes kun en måte å gjøre dette på, og det er med subclassing. Denne teknikken er ofte brukt når VB Classic (og .NET forøvrig, dog er ikke subclassing slik vi gjør det nå nødvendig) ikke strekker til, og vi må kommunisere direkte med Windows. Dette gjør vi ved å endre funksjonspekeren til hvilken prossedyre som skal kjøres når meldinger sendes fra Windows. Legg følgende kode i en modul. Option Explicit Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hwnd As Long, ByVal lpString As String) As Long Public Const WM_KILLFOCUS = &H8 Public Const WM_SETFOCUS = &H7 Public Const WM_KEYDOWN = &H100 Public Const GWL_WNDPROC = (-4) Public Sub SubclassControl(Control As Object) SetProp Control.hwnd, "PrevProc", SetWindowLong(Control.hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnsubclassControl(Control As Object) SetWindowLong Control.hwnd, GWL_WNDPROC, GetProp(Control.hwnd, "PrevProc") RemoveProp Control.hwnd, "PrevProc" End Sub Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long On Local Error Resume Next Dim PrevProc As Long PrevProc = GetProp(hwnd, "PrevProc") ' Hva vi i praksis gjør med denne koden er å hindre alle meldinger, med intensjon om å sette fokus ' til denne kontrollen, å komme fram. If uMsg = WM_KILLFOCUS Or uMsg = WM_SETFOCUS Then Exit Function End If WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam) End Function Deretter kan du bruke denne koden for å subclasse knappen Command1: Private Sub Form_Load() ' Kjør koden som endrer pekeren til hvilken prosedyre som skal kalles når en melding blir sendt til vinduet SubclassControl Command1 End Sub Private Sub Form_Unload(Cancel As Integer) ' Rensk opp alt (Meget viktig! Fjernes denne vil IDE-en (VB) avsluttes umiddelbart!) UnsubclassControl Command1 End Sub Private Sub Command1_Click() MsgBox "Click()-hendelsen er kjørt." End Sub Hvis du i tillegg ønsker å fjerne muligheten for å trykke på knappen via Space og andre taster, må du endre til følgende i modulen: If uMsg = WM_KILLFOCUS Or uMsg = WM_SETFOCUS Or uMsg = WM_KEYDOWN Then Exit Function End If Hvis du bare ønsker å hindre Space, må du endre det til følgende: If uMsg = WM_KILLFOCUS Or uMsg = WM_SETFOCUS Or (uMsg = WM_KEYDOWN And wParam = vbKeySpace) Then Exit Function End If Lenke til kommentar
d0ppler Skrevet 26. november 2004 Del Skrevet 26. november 2004 vil bare skyte inn en ting. Ikke det at jeg skal bry meg om programmet, men hvorfor i alle dager vil du at en knapp bare skal kunne benyttes med musa, og ikke med tastaturet?? Lenke til kommentar
GeirGrusom Skrevet 26. november 2004 Del Skrevet 26. november 2004 A very just question indeed. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå