klavye tuş kontrolüile ilgili

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ebekir
Üye
Mesajlar: 52
Kayıt: 06 Nis 2006 05:23

klavye tuş kontrolüile ilgili

Mesaj gönderen ebekir »

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.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

S.A.
Formun KeyPreview'ini true yapıp KeyPress kullanabilirsiniz.
Kullanıcı avatarı
ebekir
Üye
Mesajlar: 52
Kayıt: 06 Nis 2006 05:23

Mesaj gönderen ebekir »

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
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

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...
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

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.

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;
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.
Kullanıcı avatarı
ebekir
Üye
Mesajlar: 52
Kayıt: 06 Nis 2006 05:23

Mesaj gönderen ebekir »

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.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

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.. :wink:

Saygılar....
Mersian
Üye
Mesajlar: 8
Kayıt: 17 Nis 2006 11:49

Mesaj gönderen Mersian »

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.
Ufuk TOGAY
Kullanıcı avatarı
ebekir
Üye
Mesajlar: 52
Kayıt: 06 Nis 2006 05:23

Mesaj gönderen ebekir »

murat abi gönderdiğin kodlar tam isteiğim gibi kodu anlamaya çalışıyorum biraz yenisayılırımda.Allah kolaylık versin sağolasın
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

sende sağolasın..
Cevapla