Shift tuşu kısayol olursa

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Shift tuşu kısayol olursa

Mesaj gönderen aslangeri »

s.a. arkadaşlar.
Yazdığım programda kullanıcıya kısayol tanımlama yetkisi verdim.
Program çalışıyor ancak Kısayola "Shift+A" tanımlarsa keydown olayına yazdığım kod çalışıyor birde aktif kontole "A" yazıyor.
Shift yerine "Alt" veya "Ctrl" olursa problem yok.
size bu problemi nasıl çözebilirim.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Shift tuşu kısayol olursa

Mesaj gönderen emin_as »

Aşagıdakine benzer kodla yapabilirsin.

Kod: Tümünü seç

procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (key=  ..) and shift in [...] then
  begin
     callprocedure;
     key:=0;   // işlemi yaptik key i sıfırla silebiliriz.
  end;
  .....
end;
Bir ek yapayım, shift ile büyük harf de yazıldıgından formda text girişleri varsa, shift ile kısayol kullanma pek dogru görünmüyor.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Shift tuşu kısayol olursa

Mesaj gönderen aslangeri »

yazdığım kod zaten yukardakine benzer şekilde.
yani keydown da keyi sıfırlıyorum. ancak tahminimce keypres ve keyup eventlerinden birinde tuşu yakaladığı için ekrana basıyor.
Kısayol tuşlarını ben değil kullanıcılar belirliyor.
CTRL,ALT,SHIFT tuşlarından birini seçiyorlar ancak görünüşe bakılırsa shift tuşunu listeden kaldırmak gerekecek.
yada SHIFT i seçen tuşuna katlanacak. :roll:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Shift tuşu kısayol olursa

Mesaj gönderen conari »

Shift i kaldırmak kesin çözüm,
Shift seçildiğinde Rakamlar ile bağlayarak kısayol tanımlanabilir.
0-9
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Shift tuşu kısayol olursa

Mesaj gönderen emin_as »

Eger bir karakter tuşuna basılırsa, hem keypress hem de keydown eventleri oluşur.
Sanırım edit kutuları onkeypress den gelen bilgiyi yazıyorlar, OnKeypress i bakarak, basılan tuş bir shortcut ise oradan silebilirsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Shift tuşu kısayol olursa

Mesaj gönderen aslangeri »

@conari; Rakamlar kullanıldığı zaman ikinci karakterler basılıyor.
@emin_as;bende öyle olduğunu düşünüyorum ancak onkeypress olayında ShiftState parametresi yok. sadece key var.
bu durumda üçüncü bir değişken kullanmak gerekecek gibi görünüyor.

EK:

Kod: Tümünü seç

  if kisayolabasildi then
  begin
    key:=#0;
    kisayolbasildi:=false;
  end;
kisayolbasildi = Boolean bir değişken. keydown da set ediliyor.
ile sorun çözüldü.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Shift tuşu kısayol olursa

Mesaj gönderen emin_as »

Evet keypress e sadece yazılabilecek karakterler gönderilir. Eger shift durumu ögrenmek istiyorsan, getkeystate i kullanabilirsin.

Kod: Tümünü seç

if hiword(getkeystate(vk_shift)) <> 0 then 
   ......
Cevapla