[VB6] Met keypress softreturn voorkomen

Pagina: 1
Acties:

  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
hoe kan ik met keypress een softreturn voorkomen, want ik weet alleen maar hoe je 1 toets kan ondervangen, maar softreturn = shift + enter. Met keydown kan ik de toetsen wel ondervangen, maar dan kan ik de actie niet veranderen, alleen maar de waarde opvragen van de ingedrukte toetsen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Kijk eens in MSDN Library Online bij GetShiftState en GetKeyboardState.

Daarnaast gaat WM_KEYDOWN ook gewoon by-reference, dus lijkt me sterk dat je in de OnKeyDown de waarde niet kunt veranderen in VB (kan bijv. in Delphi nl. ook)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

* curry684 programmeert te weinig onder Win32 tegenwoordig... :/

Ik bedoelde dus GetKeyState ipv GetShiftState... :Y)

Professionele website nodig?


  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
Ehm, ik kan niets met die info, in mn library staat geen VB6 code voor getkeystate

  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
wat is het nummer van een softreturn? een hardreturn is 13 dacht ik. Is de officiele naam trouwens carriage return of linefeed?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ehm, ik kan niets met die info, in mn library staat geen VB6 code voor getkeystate
Ja euh dan maak je die :?

13 is CR oftewel carriage return, 10 is LF oftewel linefeed. Soft-return is volgens mij niet officieel gedefinieerd (maar dat kun je uitproberen ;) )

Professionele website nodig?


Verwijderd

Wanneer je het event KeyDown gebruikt krijg je twee parameters gratis en voor niets mee.

Visual Basic:
1
Private Sub Text8_KeyDown(KeyCode As Integer, Shift As Integer)

Met keycode kan je de toets (Return) afvragen in dit geval dus 13 en met Shift kan je de status van de verschillende toetsen (ALT, SHIFT, CTRL) afvragen. Wanneer je CTRL en SHIFT tegelijk indrukt krijg je som van die twee toetsen. In de help staat nog veeeeeel meer hierover :)

Sorry topicstart niet volledig gelezen! :9 Wat je wel kan doen is wanneer die actie voor komt hem terug draaien, door het laatste ingevoerde karakter weer te verwijderen.

Ik krijg het nu even niet naar boven maar volgens mij komt KeyDown eerder voor dan KeyPress. Als je nu de combinatie afvangt in KeyDown een module globale boolean variabele (mblnSoftReturn) op true zet en dan die weer afvragen in Change. Wanneer blnSoftReturn = True dan blnSoftReturn = Not blnSoftReturn

Dus in code, om je het wel heel makkelijk te maken:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Text8_BeforeUpdate(Cancel As Integer)
    If blnSoftReturn Then
        Cancel = Not Cancel
        mblnSoftReturn = Not mblnSoftReturn
    End If
End Sub

Private Sub Text8_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = acShiftMask And KeyCode = vbKeyReturn Then
        mblnSoftReturn = True
    End If
End Sub

[ Voor 51% gewijzigd door Verwijderd op 13-06-2003 14:08 ]


Verwijderd

misschien kun je shift-enter als hotkey voor iets instellen en daar dan geen actie aan verbinden. google maar eens naar hotkey api ofzo

Verwijderd

WTF is een soft-return???

Wat wil je met een soft-return

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

Y3PP3R schreef op 13 June 2003 @ 13:30:
Ehm, ik kan niets met die info, in mn library staat geen VB6 code voor getkeystate
Deze?

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
'In a module
Public Const WH_KEYBOARD = 2
Public Const VK_SHIFT = &H10
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public hHook As Long
Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    'if idHook is less than zero, no further processing is required
    If idHook < 0 Then
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    Else
        'check if SHIFT-S is pressed
        If (GetKeyState(VK_SHIFT) And &HF0000000) And wParam = Asc("S") Then
            'show the result
            Form1.Print "Shift-S pressed ..."
        End If
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    End If
End Function

'In a form, called Form1
Private Sub Form_Load()
     'set a keyboard hook
    hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'remove the windows-hook
    UnhookWindowsHookEx hHook
End Sub

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery

Pagina: 1