editler arasında ok tuşlarıyla hareket etmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- 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
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
iyi günler
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
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...
- Eğer Enter tuşunu da kontrole dahil etmek istersen vk_Down olan satırı aşağıdaki ile değiştir...
- 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...
- 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;
Kod: Tümünü seç
If (Key = vk_Down) or (Key = vk_Return) then Perform(Wm_NextDlgCtl, 0,0);
- 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...
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,
Ş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.
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,
ş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.)
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;
Ş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/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
@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...
- 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...
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;
Selam mrmcop,
Ben de farklı bir şey söylemedim
Ben de farklı bir şey söylemedim
Kolay Gelsin.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.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Selam. @Kuri_TLJ
- Ben de zaten farklı bişi söylediğini söylemedim
- 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...
- Ben de zaten farklı bişi söylediğini söylemedim
- 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...
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.
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/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
// 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...
- 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...
En son mrmarman tarafından 06 Nis 2004 11:05 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
- sadettinpolat
- Moderator
- Mesajlar: 2130
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
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;
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;
- sarp_halit
- Üye
- Mesajlar: 241
- Kayıt: 17 Ara 2003 04:30
- Konum: Cennet Fethiye
- İletişim:
-
- Üye
- Mesajlar: 2
- Kayıt: 13 May 2009 10:34
Re: editler arasında ok tuşlarıyla hareket etmek
arkadaslar hepinize cok teşekkürler cok işime yaradı bu kodlar...