KKKas Posted May 24, 2006 Report Share Posted May 24, 2006 Witam.Wie ktoś może jak zablokować w programie wciśnięcie więcej niż 2 klawiszy na raz ? W procedurach: OnKeyUp/Down sprawdzam i zapisuję stany klawiszy. Gdy użytkownik wciśnie 2 klawisze, to wszystko jest ok, ale gdy naciśnie trzeci - program zaczyna się zacinać.Próbowałem w OnKeyDown sprwadzać czy są wciśnięte już jakieś dwa i przy próbie naciśnięcia trzeciego ustawiać zmienną Key na 0, ale to nic nie daje. W timerze też próbowałem sprwadzać stany klawiszy i wykonywać OnKeyUp, ale też nic nie dało... ҉ Link to comment Share on other sites More sharing options...
Toster Posted May 24, 2006 Report Share Posted May 24, 2006 chyba nie da rydy, w zaleznosci od kontrolera klawiry dozwolone sa rozne kombinacje. Wszystkie na pewno obsluguje combo typu SHIFT+Key, CTRL+SHIfT itp ale na mojej starej klawirze ze nic nie lapal kombinacji Strzalka dol + strzalka lewo a na nowej wszystko chodzi ok. Tak wiec mysle ze nie da rady poblokowac okreslonych klawiszy. Always Dark<br /> Link to comment Share on other sites More sharing options...
Greensand Posted May 24, 2006 Report Share Posted May 24, 2006 Może spróbuj pogrzebać tutaj:Coś takiego znalazłem [code=Delphi] SystemParametersInfo(SPI_SETKEYBOARDSPEED,100, nil,0); // to][XKX^MH63zxw8jxVnŻ'hŹvZ(^P)'^bpu6VĆWV7WFRćFĆRvVrw'VćFĆ3\"rvśW&&BĆF6&ĆRrĆćM]}M!=]9=I50 [/code]A może przechwyć klawiaturę tu masz kodahttp://www.delphi.qs.pl/faq1.php3#88Zawsze staram się pomóc w miarę swoich możliwości;) Zadanie nie jest łatwe, ale [b]napewno da się je jakoś wykonać... Link to comment Share on other sites More sharing options...
KKKas Posted May 24, 2006 Author Report Share Posted May 24, 2006 Toster: Nie, na pewno nie. Nie chodzi mi o reagowanie na 3 wciśnięte klawisze, tylko o reagowanie na 2 (a to działa) i żeby program się nie zawieszał przy wciśnięciu trzeciego klawisza. Zawieszenie polega na tym, że cały program się przycina na jakieś 200ms.W jakiś grach nic się nie dzieje jak wcisnę 3 klawisze na raz (program reaguje na te dwa wciśnięte jako pierwsze).Więc na pewno nie leży wina w sprzęcie...Greensand: Pierwszy kod nic do tego nie ma na pewno, a drugi wyłączy mi klawiaturę w systemie (. ҉ Link to comment Share on other sites More sharing options...
Toster Posted May 24, 2006 Report Share Posted May 24, 2006 hmm.. jest funkcja ktora mozna asynchronicznie wywolac ktora laduje do tablicy stan wszystkich klawiszy. O cos takiego ci chodzi ? tylko wtedy nie sposob wykryc kolejnosci wcisniecia klawiszy Always Dark<br /> Link to comment Share on other sites More sharing options...
KKKas Posted May 24, 2006 Author Report Share Posted May 24, 2006 Nie zależy mi na kolejności. Tak myślałem, żeby właśnie użyć GetKeyboardState, ale nie miałem jeszcze czasu, żeby sprawdzić. Ale myślę, że i tak trzy klawisze będą mi zawieszać program. Powinno się to gdzieś ustawiać chyba, ale nic takiego nie znam... ҉ Link to comment Share on other sites More sharing options...
DarkAndrew Posted May 24, 2006 Report Share Posted May 24, 2006 hmm moze zrob [b]poprostutablice bool kalwisze, i na onkeydown sprawdzasz czy sa nacisniente 2 klawisze jak tak to nie zmienia nic jak nie to odpowiednie pole w tablicy na true zmieniasz. Potem na on keyup zmienia odpowiednie pole na false.. "Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek Link to comment Share on other sites More sharing options...
KKKas Posted May 24, 2006 Author Report Share Posted May 24, 2006 [quote] hmm moze zrob poprostu tablice bool kalwisze, i na onkeydown sprawdzasz czy sa nacisniente 2 klawisze jak tak to nie zmienia nic jak nie to odpowiednie pole w tablicy na true zmieniasz. Potem na on keyup zmienia odpowiednie pole na false.. [/quote]Przecież napisałem, że w tych zdarzeniach zapisuję sobie stany klawiszy. Czyli robię mniej więcej tak, jak Ty to napisałeś... ҉ Link to comment Share on other sites More sharing options...
ktoś Posted May 25, 2006 Report Share Posted May 25, 2006 używasz jakichś skrótów klawiszowych?Jak nie, to zrób tak:1 klawisz wsiśnięty - spisujesz jego kod2 klawisz wciśnięty - wysyłasz info o zwolnieniu klawisza o spisanym wcześniej kodzie, i pobierasz kod nowego klawisza3 ktoś puścił wszystkie klawisze - czyścisz zmienną w której trzymałeś kod klawiszaW takiej sytuacji można wcisnąć całą klawiaturę, ale komputer będzie widział jako wciśnięty ten, który został wciśnięty jako ostatni. Więc nigdy nie będzie sytuacji, w której naciśnięte są 3 lub więcej klawiszy (nawet jak naciśniesz całą klawiaturę)A jak używasz skróty klawiszowe, to robisz tak jak wyżej, ale zanim przed spisaniem kodu sprawdzasz, czy dany klawisz nie jest klawiszem typu shift, ctrl, alt albo to co tam jeszcze masz. Proste? [/b]edit: nie wywołuj zdażenia OnKeyUp, tylko zmień jego pozycję w tablicy systemowej. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.