Gå til innhold

skru av knapper i visual basic


Anbefalte innlegg

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 av nahoy
Lenke til kommentar
Videoannonse
Annonse

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 av Jonas
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...