Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Jak zrobić HOTKEY do commandbuttona?
JoFerrari




Typ: neutral
Postów: 75
Zarejestrowany: Apr 2003
Jak zrobić HOTKEY do commandbuttona?

Np "ALT + L" . jest do tego jakas kontrolka?

Ma przechwytywać klawiature i w zalezności od klawisza wykonywac akcje np "Command.value=true" . Ale nie kiedy jest na niej focus.

Moze to proste ale nigdy jeszcze o tym nie myslalem.

Dzieki za odpowiedzi

01-12-2004 17:25
Pokaż profil JoFerrari  Wyślij email do JoFerrari   
anonim




Typ: Nie zarejestrowany

w caption buttona podkresl ktoras literke za pomoca znaku &
Np command1.caption = "&Guzik"

po nacisnieciu alt+G wykonasz klikniecie tego buttona

01-12-2004 20:44
  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Propozycja anonima ma ograniczenie bo Caption Buttona musi zaczynać się od litery której chcesz użyć w skrócie klawiszowym.

Gdy chcesz buttonowi przypisać skrót ALT +L jego Caption musiałby być Luzik


Dlatego lepiej zarejestrować nowego HOTKEY'a a potem badać czy dana kombinacja klawiszy została wciśnięta i wywołać zdarzenie Click dla twojego Buttona.

Pozdrawiam

[Post edytowany dnia 02-12-2004 14:59 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-12-2004 14:55
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003


Propozycja anonima ma ograniczenie bo Caption Buttona musi zaczynać się od litery której chcesz użyć w skrócie klawiszowym.

Czemu? Wystarczy dać, np. Comma&nd1 wtedy skrót to alt+n... Jedyny wymóg to to, że litera skrótu, który chcemy mieć musi wystąpić w Caption...

[Post edytowany dnia 02-12-2004 15:56 przez hicks]


_____________________________________________
TLHW Clan member

02-12-2004 15:55
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

No właśnie o takim ograniczeniu mówię


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-12-2004 16:34
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003


Caption Buttona musi zaczynać się od litery której chcesz użyć w skrócie

nie wiem może ja coś źle zrozumiałem... :/


_____________________________________________
TLHW Clan member

03-12-2004 10:48
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Źle to sformułowałem - Caption musi zawierać literę skrótu

Np. Mój Button nazywa się Start a ja chcę do niego zrobić skrót ALT + B albo CTRL+C i wtedy twoja propozycja nie sprawdzi się.

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

03-12-2004 12:13
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
JoFerrari




Typ: neutral
Postów: 75
Zarejestrowany: Apr 2003

DJK - napisz jeszcze jak zarejestrować HOTKEY to będe wiedział wszystko co chce.

& - to mnie mało interesuje bo wymusza korzystanie z "ALT + coś" , a ja chce móc robić kombinacje z shiftem i ctrl

05-12-2004 16:30
Pokaż profil JoFerrari  Wyślij email do JoFerrari   
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

'wklej to w kodzie formy


Option Explicit

Private Sub Form_Load()

If RegisterHotKey(hWnd, 1, MOD_CONTROL, VK_A) = 0 Then
'skrót już został zarejestrowany
Else
'nie została
End If

Call SubClass(hWnd)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call UnregisterHotKey(hWnd, 1)
Call UnSubClass(hWnd)
End Sub



a to w jakimś dodatkowym module:

Option Explicit

Public Const MOD_CONTROL = &H2
Public Const VK_A = &H41
Public Const GWL_WNDPROC = (-4)
Public lPrevWndProc As Long
Private Const WM_HOTKEY = &H312

Public Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
Public 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

Public Sub SubClass(ByVal hWnd As Long)
    lPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub

Public Sub UnSubClass(ByVal hWnd As Long)
    Call SetWindowLong(hWnd, GWL_WNDPROC, lPrevWndProc)
End Sub

Private Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case Msg
    Case WM_HOTKEY
        Select Case (lParam  &H10000) And &HFFFF&
            Case VK_A
                Form1.Label1 = "Wcisnąłeś CTRL+A"
        End Select
End Select

WndProc = CallWindowProc(lPrevWndProc, hWnd, Msg, wParam, lParam)
End Function


na Formie umieść Labela o nazwie Label1, odpal program i naciśnij CTRL+A

Akurat w tym kodzie zadeklarowany jest taki HOTKEY - oczywiście mozesz sobie to zmienić.

P.S.
Bądź ostrożny bo rozpoznawanie Hotkeya - wymaga SubClassingu a jak coś pójdzie nie tak - program wykona nieprawidłową operację (to jest ogólna wada subclassingu)


Pozdrawiam


Acha- RegisterHotKey(hWnd, 1, MOD_CONTROL, VK_A) wykonujesz tyle razy ile chcesz skrótów np.

RegisterHotKey(hWnd, 1, MOD_CONTROL, VK_A)
RegisterHotKey(hWnd, 2, MOD_CONTROL, VK_C)
RegisterHotKey(hWnd, 3, MOD_ALT, VK_D)
RegisterHotKey(hWnd, 4, MOD_SHIFT, VK_F) itd.

Możesz też użyć klawiszy od F1 do F12 i innych poczytaj o tym w MSDNie

[Post edytowany dnia 05-12-2004 17:21 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

05-12-2004 17:15
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Wszystkich odpowiedzi: 8 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1