editler arasında ok tuşlarıyla hareket etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

editler arasında ok tuşlarıyla hareket etmek

Mesaj gönderen sarp_halit » 03 Nis 2004 10:23

Merhaba arkadaşlar. ben programlarımda editler arasında pascaldaki gibi ok tuşlarıyla hareket etmek istiyorum. enter tuşuna çözüm buldum. yardımlarınız için şimdiden teşekkür ederim.
iyi günler

Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft » 03 Nis 2004 10:33

Arama kısmından vk_up yazarak arattırırsan daha önce bu tür sorulara verilen cevapları bulursun..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)

oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 » 03 Nis 2004 11:24

Makaleler kısmında Ok Tuşlarının kullanımı başlığı altında bir Bileşen var, bir bakın isterseniz.

selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n » 03 Nis 2004 12:11

Öncelikle tuş kodlarına şuradan bakabilirsin

viewtopic.php?t=1587&start=0&postdays=0 ... highlight=

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 03 Nis 2004 01:16

Selamlar..

- Ben de çözümü varken yeni bir bileşene başvurarak Delphi'yi boğmaktansa @TRSoft'un önerisini destekliyorum... :)

// Eklenti (Edit) //

- Bari kodu da ekleyim de içinde kalmasın...

Kod: Tümünü seç

procedure TForm1.DBEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  // Aşağı  Ok basılınca sonrakine,
  If Key = vk_Down then Perform(Wm_NextDlgCtl, 0,0);
  // Yukarı Ok basılınca öncekine gider...
  If Key = vk_Up   then Perform(Wm_NextDlgCtl,-1,0);
end;
- Eğer Enter tuşunu da kontrole dahil etmek istersen vk_Down olan satırı aşağıdaki ile değiştir...

Kod: Tümünü seç

  If (Key = vk_Down) or (Key = vk_Return) then Perform(Wm_NextDlgCtl, 0,0);
- Daha sonra diğer DBEdit nesnelerinin OnKeyDown olaylarına gidip yanlarındaki liste kutusunu açıp yukardaki değişikliği yaptığımızı yani DBEdit1KeyDown olanı seçersen, tek bir kod yazmadan o DBEdit'e de bu özelliği eklemiş olursun... Bu ikinci yapılanı DBEditlerin hepsinde yinele.

- Burada dikkat edeceğin konu, DBEdit'lerin TabOrder numaralarının takip eden sayılarla olması lazım. Yoksa aşağı/yukarı oka basınca alakasız bir nesneye gidebilir...

- Çalışmalarında başarılar...
Resim Resim

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 11:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ » 03 Nis 2004 02:21

Selamlar,

Anlatılanlara bir ek ve tavsiye. http://www.delphiturkiye.com'da ipuçları bölümünde, Enter tuşuna bastığınızda bir sonraki kontrole geçme
konulu ipucunda,

Enter tuşuna bastığınızda Windows'un bir sonraki kontrole geçmesi için (Tab tuşuna basılmış gibi) Formunuzun KeyPreview özelliğini True yapın ve formun OnKeyPress olayına aşağıdaki kodu yazın.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) then
begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
şeklinde bir açıklama var. Yukarıda anlatıldığı gibi uygularsanız Formdaki tüm nesneler arasında otomatik dolaşmanız sağlanır. Oradaki koda VK_UP veya VK_DOWN gibi tuşları da eklerseniz ileri geri hareketleri elde edebilirsiniz. (Mesajınızdan anladığım kadarı ile önceden sorduğunuz soruda bu yanıtı almışsınız.)

Şimdi tavsiye kısmı :)

Sadece edit alanlarında Enter veya yön tuşları ile hareket etsin diyorsanız mrmcop'un tavsiye ettiği şekilde kullanabilirsiniz. Ancak ben formdaki bütün nesneler arasında Enter ve yön tuşlarını kullanmak istiyorum derseniz, ipucunda belirtildiği gibi kullanırsanız daha pratik olur.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 03 Nis 2004 02:37

@Kuri_TLJ İstenen sadece editler arasında şeklindeydi... O yüzden kısıtlandırıldı... Eğer senin dediğin gibi makro bişi yapmak istenirse ben de bir saplama yapmak istiyorum...

- Benim gibi Micro (sadece isteğe odaklı) yerine Makro (genel çerçeveli) düşünmek gerekirse bu işin içinden çıkılmaz hale gelinebilir... Örneğin DBGrid gibi nesnelerde de diğer kolona geçmek sözkonusu olabilir... :lol:

Kod: Tümünü seç

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if not (ActiveControl is TDBGrid) then
  begin
    If (Key = vk_Down) or (Key = vk_Return) then Perform(Wm_NextDlgCtl, 0,0);    // Yukarı Ok basılınca öncekine gider...
    If  Key = vk_Up   then Perform(Wm_NextDlgCtl,-1,0);
  end
  else
  if (ActiveControl is TDBGrid) then
  begin // DBGrid içindeysek...
    with TDBGrid(ActiveControl) do
    begin
      If Key = vk_Return then
      begin
        if selectedindex < (fieldcount - 1)
        then selectedindex := selectedindex + 1
        else selectedindex := 0;
      end;
    end;
  end;
end;
Resim Resim

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 11:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ » 03 Nis 2004 03:44

Selam mrmcop,

Ben de farklı bir şey söylemedim 8)
Sadece edit alanlarında Enter veya yön tuşları ile hareket etsin diyorsanız mrmcop'un tavsiye ettiği şekilde kullanabilirsiniz. Ancak ben formdaki bütün nesneler arasında Enter ve yön tuşlarını kullanmak istiyorum derseniz, ipucunda belirtildiği gibi kullanırsanız daha pratik olur.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 03 Nis 2004 06:26

Selam. @Kuri_TLJ

- Ben de zaten farklı bişi söylediğini söylemedim :lol: :lol:

- Bu arada Paradox Memo Case Insensitive search konusunda yazdığım (Paradox tablosuna ADO ile bağlandığında sorun yaşamazsın şeklindeki) cevaba istinaden, eğer örnek istersen bildir... Koyacak yer bulamadım.. Aynı başlığın altı çok kalabalık, arayan bir daha bulamaz...
Resim Resim

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 11:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ » 05 Nis 2004 09:24

Selamlar,

Mail adresime gönderirsen iyi olur, incelemek isterim, zira Önceleri (Delphi 1,2,3'de bu tür sorunlar yüzünden uzun yolu tercih ediyorduk.)

Sanırım 5 ile birlikte ADO geldi (VB 6.0'da da ADO, DAO gibi bir sürü abuk subuk şeyle başımız ağrımıştı, bu sebeple uzak duruyorum.)

Ama çalışan bir örnek olursa seve seve inceleriz.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 06 Nis 2004 10:54

// Edit - Düzenlenmiş mesaj //
- Algı yanılgısından dolayı yanlış başlıktan cevap yazarak forum kurallarına aykırı bir harekette bulunmuş oldum... Doğru başlık
viewtopic.php?t=2294&postdays=0&postorder=asc&start=30 linkinde olduğunda bu mesajı oraya aktarıyorum... @Kuri_TLJ, olması gerektiği gibi diğer başlıktan devam ederiz...

- Bu hatadan dolayı öncelikle bu başlığın sahibi olan @sarp_halit olmak üzere @Admin ve forum sakinlerinden özür dilerim... :oops:
En son mrmarman tarafından 06 Nis 2004 10:05 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Resim Resim

Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2128
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat » 06 Nis 2004 07:44

Kod: Tümünü seç

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) then
begin
  Key := #0;
  Perform(WM_NEXTDLGCTL, 0, 0);
end;

end;
aslında yukarıda yer alan kod ile tam olarak enter tuşunun tab olarak algılanmasını sağlayamayabilirsiniz.

mesela formun üzerinde 5 edit 2 Tbutton olduğunu varsayarsak siz enter tuşuna bastıkça tab tuşuna basıyormuş gibi bir editten diğer edite geçebilrsiniz fakat activecontrol Tbutton olduğu zaman bu iş değişiyor ve siz entera bastığınızda bir sonraki kontrole geçmesi gerekirken butonun onclick olayı çalışıyor.

bir projede bu olay canımı fazlasıyla sıktığından başka bir yol aradım ve aşağıdaki yolu buldum.

%100 tab tuşunun etkisini alabiliyosunuz.

Kod: Tümünü seç

procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
if msg.CharCode = 13 Then
  msg.CharCode := 9;
end;

Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Mesaj gönderen sarp_halit » 18 Nis 2004 10:05

Arkadaşlar ilginizden ötürü hepinize teşekkür ederim ama benim amacım sadece editler arasında ve dbgrid kolonları arasında ok tuşlarıyla hareket etmekti o kadar. halen dos hastalığını atamadım da ...
hepinize tekrar teşekkür ederim.
Fethiye den herkese sevgiler ...
X))@:>

softwarrior
Üye
Mesajlar: 2
Kayıt: 13 May 2009 09:34

Re: editler arasında ok tuşlarıyla hareket etmek

Mesaj gönderen softwarrior » 13 May 2009 09:37

arkadaslar hepinize cok teşekkürler cok işime yaradı bu kodlar...:)

Cevapla