Dbgrid ve Fare Tekerleği ile imleçin konuçlanması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Dbgrid ve Fare Tekerleği ile imleçin konuçlanması

Mesaj gönderen muskut »

Merhabalar,

Aradım, bazı sorular ve cevaplar buldum okudum ama problemime çare olmadı.

Sorunum şu; hani DBgrid üzerinde farenin tekerleği ile hareket ettiğinizde imleç bir kayıtta sabit kalıp, satırlar arasında dolaşılır ya; işte ben bu tekerlek ile dolaşılması sırasında imlecinde hangi kayıt üzerinde seçim oldu ise oraya konuçlanmasını istiyorum. Anlatabildim mi? Sanmıyorum, durun bir kaç resim ile göstereyim;

normal de dbgridimin görünümü şu şekilde;

Resim

faremin tekerleğini hareket ettirdiğimde imleç ve satırın seçilmesi (mavi satır) şu şekilde oluyor

Resim

diyelim ki mavi ile seçili olan satıra (kontal firma adı) çift tıkladığım zaman o alanın adını vermesini isterken; yani "kontal" uyarısını beklerken bana gelen uyarı imlecin konuçlandığı kısımdaki yer, yani "belediye"

Resim

hani bu şekilde çalışması normalde, işte ben istiyorum ki tekerleğin hareketi ile seçilen satıra tıklanıldığı zaman imleçde oraya konuçlansın ve o satırın verilerini bana göndersin. Umarım anlatabilmişimdir sorunumu :)

varmıdır bir fikri olan?

kolay gelsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
formun onmousewheeldown ve up olaylarına

Kod: Tümünü seç

  if not handled then tabloadi.Next;///duruma göre prior
kodu yazarsanız olacaktır.
ancak ben denemelerimde bir çevirişte bir kaç kayıt birden gidiyordu.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

pek sağlıklı bi kod olmadı maalesef, istediğim şekilde olmadı, hani dbgrid üzerinde bir kaç imleç gösterebiliyorsunuz ya, farenin tekerleği ile bir kaç imleç olmaya başladı
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Her Gridde tekerlek olayı aktif olmuyor. Bende forma Bir APPEvent koyup bu kodla Aktif ediyorum. Belki bir fikir verir sana.

Kod: Tümünü seç

procedure TSform.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var 
i: SmallInt; 
begin
if Msg.message = WM_MOUSEWHEEL then
begin
Msg.message := WM_KEYDOWN;
Msg.lParam := 0;
i := HiWord(Msg.wParam) ;
if i > 0 then
Msg.wParam := VK_UP
else
Msg.wParam := VK_DOWN;
Handled := False;
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

Bu kod işimi gördü, Ellerine sağlık sağolasın

kolay gelsin herkeze
memiky
Üye
Mesajlar: 116
Kayıt: 17 Kas 2004 01:52
İletişim:

Mesaj gönderen memiky »

conari arkadaş soruyu cevaplamış ama yazdıklarım boşa gitmesin diye aktardım. Vereceğim kısa kod ile DBGrid’de farenin kaydırma tekerleği ile kayıtların arasında dolaşma işlemini yapacağım. Bu amaçla forma bir Table, DataSource ve DBGrid nesnelerini yerleştirip gerekli ayarlamaları yapıp bir tablonun içeriğinin görüntülenmesini sağladım.

DBGrid’de görüntülenen ilk kayıt tablodaki ilk kayıt değilken yukarı ok tuşuna basılarak kaydırma işlemi yapılıp bir önceki kaydın DBGrid’de görüntülenen ilk kayıt olması sağlanabilir. Bu işlemi farenin kaydırma tekerliği ile yapmak için “Mesaj_yakala” adında bir yordam hazırlayıp TApplication sınıfının OnMessage olayı ile ilişkilendirdm.

Kod: Tümünü seç

procedure TForm1.Mesaj_yakala(var Mesaj: TMsg; var Handled: Boolean);
Var
   Parametre : Integer;
begin
   If Mesaj.message = WM_MOUSEWHEEL Then
    Begin
      Mesaj.message :=WM_KEYDOWN;
      Parametre := HiWord(Mesaj.wParam);
      If Parametre = 120 Then
         Mesaj.wParam := VK_UP
      else
         Mesaj.wParam := VK_DOWN;
      Handled := False;
    End;
end; 
Bu kodda ilk olarak Windows’un Delphi uygulamasına göndermiş olduğu mesajın message özelliğimin WM_MOUSEWHEEL olup olmadığını araştırdım. Windows tarafından Delphi uygulamasına gönderilen mesajda farenin kaydırma tekerliği ile oynandığı işaret ediliyorsa bu mesajı WM_KEYDOWN yani bir tuşa basma olayından kaynaklanan mesaja dönüştürdüm. Gerisi zaten kolay anlaşılacak işlemlerdir. Forma ApplicationEvents kontrolü yerleştirip bu satırları OnMessage yordamına yazıp aynı sonucu alabilirsiniz.

Kod: Tümünü seç

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
Var
   Parametre : Integer;
begin
   If Msg.message = WM_MOUSEWHEEL Then
   Begin
     Msg.message :=WM_KEYDOWN;
     Parametre := HiWord(Msg.wParam);
     If Parametre = 120 Then
        Msg.wParam := VK_UP
     else
        Msg.wParam := VK_DOWN;
     Handled := False;
   End;
end;

Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

Hocam ellerinize sağlık, çok teşekkür ederim. Oldukça verimli ve güzel cevaplar aldım.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

birde buraya bak istersen

viewtopic.php?t=5110&highlight=srdbgrid
Cevapla