klavye tuş kontrolüile ilgili
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
klavye tuş kontrolüile ilgili
arkadaşlar abiler ben araba kontrolü yapıyorumda burda her butonun farklı kontrolü var ben en uygun nasıl yaparım 4 tane buton olacak ileri geri sağ ve sol klavye tuşlarını kontrol etmek istiyorum burda benim anlamadığım keypress var keyup var kafam karıştı ya bir yardımcı olursanzı çok makbule geçer.
if key=vk_up then
label1.caption:='x';
gibi bir kod yazıyorum ama çalışmıyor ya incopatible types diye hata veriyo.birde şunu soracam mesela kumandalı arabalrda hem ileri hem sağa basarsan dönüyo burda iki tuşu birden nasıl kontrol edebileceğim yardımlarınız için sağolun.
ALLAH YAR VE YARDIMCINIZ OLSUN
label1.caption:='x';
gibi bir kod yazıyorum ama çalışmıyor ya incopatible types diye hata veriyo.birde şunu soracam mesela kumandalı arabalrda hem ileri hem sağa basarsan dönüyo burda iki tuşu birden nasıl kontrol edebileceğim yardımlarınız için sağolun.
ALLAH YAR VE YARDIMCINIZ OLSUN
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
merhaba,
öncelikle uygulama içine bir hook işlevi yerleştireceksin. bu basılan tuşlar hakkında bilgi verecektir. oyunlar açısından en iyi yöntem bu gibi geliyor bana.
sonra YUKARI, AŞAĞI, SOL ve SAĞ düğmelerinin basılıp basılmadığını kontro ledeceksin.
bir tuş DOWN olduğunda ilgili tuşun basıldı bitini 1 yap, tuş UP oduğunda 0 yaparsın.
mesela YUKARI tuşuna basıldığında gaza basmış gibi gitmesini ve periyodik olarak hızın artmasını isteyeiblirsin.
ilk önce YUKARI tuşuna basıldığında KEYDOWN mesajı gelecek sen hemen ilgili tuşu 1 yapacaksın. ve ilgili tuş 1 olduğu sürece YUKARI tuşu yani, gaz vereceksin, ne zaman ki KEYUP mesajı geldi o zmana ilgil tuşu 0 yapacak ve periyodik olarak hızı düşüreceksin.
biraz timer, biraz hook işini görecektir.
saygılar...
öncelikle uygulama içine bir hook işlevi yerleştireceksin. bu basılan tuşlar hakkında bilgi verecektir. oyunlar açısından en iyi yöntem bu gibi geliyor bana.
sonra YUKARI, AŞAĞI, SOL ve SAĞ düğmelerinin basılıp basılmadığını kontro ledeceksin.
bir tuş DOWN olduğunda ilgili tuşun basıldı bitini 1 yap, tuş UP oduğunda 0 yaparsın.
mesela YUKARI tuşuna basıldığında gaza basmış gibi gitmesini ve periyodik olarak hızın artmasını isteyeiblirsin.
ilk önce YUKARI tuşuna basıldığında KEYDOWN mesajı gelecek sen hemen ilgili tuşu 1 yapacaksın. ve ilgili tuş 1 olduğu sürece YUKARI tuşu yani, gaz vereceksin, ne zaman ki KEYUP mesajı geldi o zmana ilgil tuşu 0 yapacak ve periyodik olarak hızı düşüreceksin.
biraz timer, biraz hook işini görecektir.
saygılar...
Merhaba;
DOS ta ok tuşları kullanılınca önce bir ASCII 0 sonra 30 küsürlü olmak üzere iki değer gönderilirdi. Windows ta biraz farklı.
Ok tuşlarına basınca sanırım Keypress tetiklenmez. Keypress daha çok görülen tuşlar için. Key:Char; olarak tanımlı.
KeyDown uygun gibi görünüyor.
Bu kod Ok tuşlarını alırken işini görecektir.
İki tuşu birden kontrol için yukardaki kodu tuş kombinasyonları için değiştirmen gerekir. O da sana kalmış.
Kolay gelsin.
DOS ta ok tuşları kullanılınca önce bir ASCII 0 sonra 30 küsürlü olmak üzere iki değer gönderilirdi. Windows ta biraz farklı.
Ok tuşlarına basınca sanırım Keypress tetiklenmez. Keypress daha çok görülen tuşlar için. Key:Char; olarak tanımlı.
KeyDown uygun gibi görünüyor.
Kod: Tümünü seç
if not(ssShift in Shift) then begin
case Key of
38:Edit1.Text:='Yukarı';
40:Edit1.Text:='Aşağı';
37:Edit1.Text:='Sola';
39:Edit1.Text:='sağa';
end;//End of CASE
end;
İki tuşu birden kontrol için yukardaki kodu tuş kombinasyonları için değiştirmen gerekir. O da sana kalmış.
Kolay gelsin.
keyprewiev true yapıp formun keydown özelliğine
if not(ssShift in Shift) then begin
case Key of
vk_up:Edit1.Text:='Yukarı';
vk_down:Edit1.Text:='Aşağı';
vk_left:Edit1.Text:='Sola';
vk_right:Edit1.Text:='sağa';
end;//End of CASE
end;
bu kodu yazdım oldu ama benim sormak istediğim şimdi kumandalı arabada sağ tuşa basarken aynı anda geri tuşuna basınca dönüyo ama ben bunu porıgram da nasıl yapacam geri ye basarken sağa basınca basmıyo çünkü iki tuşa aynı anda basamıyorm.yardım ederseniz çk sevinecem.
if not(ssShift in Shift) then begin
case Key of
vk_up:Edit1.Text:='Yukarı';
vk_down:Edit1.Text:='Aşağı';
vk_left:Edit1.Text:='Sola';
vk_right:Edit1.Text:='sağa';
end;//End of CASE
end;
bu kodu yazdım oldu ama benim sormak istediğim şimdi kumandalı arabada sağ tuşa basarken aynı anda geri tuşuna basınca dönüyo ama ben bunu porıgram da nasıl yapacam geri ye basarken sağa basınca basmıyo çünkü iki tuşa aynı anda basamıyorm.yardım ederseniz çk sevinecem.
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
işte bu nedenle key hook yapman gerekiyor.
Ama DOS oyunu yaptığım günlerde bir interrupt'an bilgi alır ve bu bilgiye göre tuşları kontrol ederdim, Windows içinde böyle bir ASM adresi var mı bilmiyorum.
Ancak şu kodlar işine yarayacaktır:
http://www.musonya.com/delphisamples/keyup_down.rar
Hatta belkide fazlasıyla işine yarayacaktır..
Saygılar....
Ama DOS oyunu yaptığım günlerde bir interrupt'an bilgi alır ve bu bilgiye göre tuşları kontrol ederdim, Windows içinde böyle bir ASM adresi var mı bilmiyorum.
Ancak şu kodlar işine yarayacaktır:
http://www.musonya.com/delphisamples/keyup_down.rar
Hatta belkide fazlasıyla işine yarayacaktır..

Saygılar....
Bu olayı en sağlıklı Threadler aracılığı ile yapabilirsin.
İki Thread işini görecektir.
1) Arabanın hareketini sağlayan thread
2) Tuşların durumunu belirleyen thread
Arabayı çalıştırdığın anda 1. thread aktif hale gelecek ve tuşların durumuna göre arabanın hızını+koordinatlarını ayarlayacak. Görsel hareketini sağlayacak.
2. thread ise tuşların durumlarına bakarak, buna göre global bir değişkene durum ataması yapacak. Tuşların durumunu application.onmessage 'ye yazacağın bir kod ile ayarlayabilirsin.
Bir çok yöntem mevcut elbette ancak oyun maksatlı düşünüyor isen threadsiz olmaz gibime geliyor.
İki Thread işini görecektir.
1) Arabanın hareketini sağlayan thread
2) Tuşların durumunu belirleyen thread
Arabayı çalıştırdığın anda 1. thread aktif hale gelecek ve tuşların durumuna göre arabanın hızını+koordinatlarını ayarlayacak. Görsel hareketini sağlayacak.
2. thread ise tuşların durumlarına bakarak, buna göre global bir değişkene durum ataması yapacak. Tuşların durumunu application.onmessage 'ye yazacağın bir kod ile ayarlayabilirsin.
Bir çok yöntem mevcut elbette ancak oyun maksatlı düşünüyor isen threadsiz olmaz gibime geliyor.
Ufuk TOGAY
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim: