Cum să se ocupe de rtcut eveniment

Cum să se ocupe de eveniment TForm.OnShortCut?

Bine ai venit expertul.
Știu că puteți utiliza Msg.CharCode variabilă pentru a determina care cheie a fost apăsat. Dar eu nu pot da seama cum de a determina combinația potrivită de câteva apăsări de taste. de exemplu + sau ++. Dacă se poate - scrie într-un exemplu specific.

Nimeni nu se confruntă?

Parametrul Msg reprezintă mesajul tastare Windows. Codul cheie virtuală este dată de către câmpul CharCode, iar câmpul KeyData conține un set de steaguri care indică numărul de repetare, codul de scanare, pavilion extins-cheie, codul de context, anterior pavilion cheie de stat și de pavilion de tranziție de stat. Consultați documentația pentru Windows pentru detalii cu privire la aceste domenii.


Procedura TForm1.FormShortCut (var Msg: TWMKey; var Handled: Boolean);
începe
dacă Msg.CharCode = Ord ( "K"), atunci
if (GetKeyState (VK_MENU) <0)
și (GetKeyState (VK_SHIFT) <0) then
începe
Mânuită = true;
ShowMessage ( "presata Alt + Shift + K");
se încheie;
se încheie;

Nu, știi. Această metodă nu funcționează. Am verificat. Mai mult decât atât, se pare că pentru a ajuta la evenimente TForm.OnShortCut nu poate captura o combinație de mai multe apăsări de taste. Dacă eu, de exemplu, țineți apăsat , apoi apăsând celălalt eveniment OnShortCut cheie nu este numit.

Apoi, o altă întrebare: cum să prindă într-o anumită formă (de dialog, modal) o combinație de apăsarea tastei fierbinte?


> Nu, știu. Această metodă nu funcționează. Am verificat.

verificat în mod similar? Crezi că nu am verificat înainte de publikoavniem? Totul funcționează. Da, într-adevăr, OnShortCut primește o singură orice tastă, dacă Ctrl, Shift, sau orice A. Dar aici vom stabili dacă mai este apăsată orice tastă:
GetKeyState (VK_MENU) primește multe informații, indiferent dacă este apăsată tasta Alt, GetKeyState (VK_SHIFT) - Este Shift apăsat.
Așa că totul este în regulă.


> Dacă, de exemplu, țineți apăsat , atunci când apăsați
> OnShortCut la un alt eveniment cheie nu este numit.

Cum de a verifica? Am sunat toți.

Îmi pare rău. În acest tip de exemplu, funcționează ca un ceas. Tocmai am verificat pe o combinație de taste + .
Se pare că tasta Tab este procesat undeva în interiorul matriței și Handled se referă la True. După ce Tab - este folosit pentru a muta între controalele.
Vreau o comandă rapidă de tastatură + comuta paginile de pe formular. Lista de pagini din TListView

Aici este exemplul meu, nu funcționează:
dacă Msg.CharCode = VK_TAB atunci
if (GetKeyState (VK_CONTROL) <0) then
începe
Mânuită = true;
ShowMessage ( "presata Ctrl + Tab");
se încheie;

Memorie: 0.73 MB
Timpul: 0,045 c

articole similare