DBGridde Scrollbarın Son Kayda Gitmesini Nasıl Engelleriz?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

DBGridde Scrollbarın Son Kayda Gitmesini Nasıl Engelleriz?

Mesaj gönderen NewMember »

Arkadaşlar merhaba:
DBGridteki vertical scrollbarı yok etmeden mouse ile 1.kayıttan sonuncu kayda kadar tek harekette götürülmesini nasıl engelleyebiliriz?Yani kullanıcı scrolbardaki ok işaretlerine her tıkladığında bir kayıt ilerlemeli.Yani tek harekette son kayda gitmemeli.Acaba bu yapılabilirmi?
Teşekkürler.
Kolay Gelsin.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

senin istediğin gibi yapmak eminim mümkündür üstadlar cevap yazarlar..ama bişeyi merak ettm hadi scrollbarla son kayda kadar gidemeyecek daha doğrusu tek tek next olacak datalar peki kullanıcı mousela dbgriddin üzerine tıklayınca nasıl olacak o zaman istediği kaydı seçebilir...dbgrid enabled=false mi yapacaksın..bu arada programın için olmazsa olmaz bir özellikse bu işlem bussinesskin componentinin dbgridinde scrolbar bottombutonclick ve topbutonclick eventsları var ama component ücretli diye biliyorum..
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

@serkan demişki:
ama bişeyi merak ettm hadi scrollbarla son kayda kadar gidemeyecek daha doğrusu tek tek next olacak datalar peki kullanıcı mousela dbgriddin üzerine tıklayınca nasıl olacak o zaman istediği kaydı seçebilir...dbgrid enabled=false mi yapacaksın.
Hocam dbgridte istediğini seçsin önemli değil.Ben şunun için yapmak istiyorum.Kişi DBGrid scrollbarı tutup sürüklerse eğer dataset fetch all yapıyor.Dolayısıyla kayıt sayısı belirli bir kayıdın üzerinde çıkarsa yavaşlamaya sebep oluyor.Kişiyi aradığı kayda gidebilmek için arama editlerini kullanmaya zorlamak istiyorum.Yani tek tek next ilede aradığı kaydı bulamayacağına göre aradığı kayıtla ilgili bir kelime yada harf yazarak aramaya mecbur kalacak.Yani amaç Fetch All yapmasını önlemek.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

hmm..hocam şöyle yapsan ..form açıldığında dbgridin bağlı olduğu dataseti kapatsan kullanıcı edite arayacağı metni veya içinde geçebilecek metni yazıp bul butonuna veya edit üzerinde enter tuşuna basınca doğal olarak queryde arama yaptığın için dataset açılacak ve bilgiler dbgridde listelenecek eğer edit.text özelliği boş ise aranılacak bir metin girin gibi mesaj versen..nasıl olur yani dbgridde select * from tablo_adi gibi bir sonucu asla göztermesen,böylece fetchall yapma şansıda kalmaz..nasıl olur..?
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Select * From zaten demiyorum.Ancak diyelim ki 100 bin kayıt var.Kişi bu hareketi yaptığında tek harekette son kayda gidiyor ve dolayısıyla Fetch All yapmış oluyor.Benim amacım ise bunu engellemek.Yani scrollbarıda kullanabilsin ancak tek harekette 1.kayıttan sonuncu kayda götürmesin.Her tıklamada bir kayıt ilerlesin.

Diğer önerine gelince dataset kapalı olursa bu dediğim olay gerçekleşmez.Yani dbgrid kayıtları göstermez.

İlk 1000 yada X kaydı çekmesi gibi bir seçenekte var.Olmazsa onu yapacam ancak böyle bir çözüm de olabilir belki.

İlgine teşekkürler.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

@newmember ustam mesajları okurken aklıma kayıtları belirli sayıda çekme olayı geldi ve baktımki siz bu cevabı vermişsiniz. bu cevabınızı okuyunca aklıma şu geldi scroll özelliğinde kayıtları tek tek çekmesini sağlama yani kişi kaydırma çubuğunu aşağıya çektikçe bir kayıt bir kayıt çekece datasetten. olurmu bilmiyorum ama dbgrid eventine baktım scroll ile ilgili bir seçim yok ama keyup keydown falan var. benimkisi sadece bir mantık yürütmek yapıp denemiş falan değilim.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

@bobasturk demişki:
merhaba,

@newmember ustam mesajları okurken aklıma kayıtları belirli sayıda çekme olayı geldi ve baktımki siz bu cevabı vermişsiniz. bu cevabınızı okuyunca aklıma şu geldi scroll özelliğinde kayıtları tek tek çekmesini sağlama yani kişi kaydırma çubuğunu aşağıya çektikçe bir kayıt bir kayıt çekece datasetten. olurmu bilmiyorum ama dbgrid eventine baktım scroll ile ilgili bir seçim yok ama keyup keydown falan var. benimkisi sadece bir mantık yürütmek yapıp denemiş falan değilim.

kolay gelsin
İşte benim istediğim olay da o.DbGrid zaten scrollbarıaşağıya ne kadar çekersen o kadar datasetten kayıt çekiyor.Yani tek tek tıklanırsa dataset kayıtları tek tek çekiyor.İşte burada dbgridin scrollbarını tek tek hareket ettirmek istiyorum.Dediğinzi gibi dbgridin eventlerinde böyle bir özellik yok.Keyup keydown özellikleri belki olabilir ama zorlama olur gibime geliyor.Belki daha pratik bir çözüm bilen ustalarımız vardır.
Kolay Gelsin.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Arkadaşlar bir bilen yokmu?
mhizar
Üye
Mesajlar: 78
Kayıt: 30 May 2005 11:06

Mesaj gönderen mhizar »

Acaba DBGridteki scrollbarı görünmez yapsan nasıl olur?
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Ben bu konularda iyi olmadığım için kaç günden beri uğraşıyorum. Derdinizin çözümünü biliyordum. Ama ben parçaları birleştiremiyordum.
İnadına uğraşarak inşallah size yarayacak çözümü bulmuşumdur. :lol:

Bunu denemek için bir forma
1 adet table
1 adet datasource
1 adet dbgrid
2 adet label kullanın.

Aşağıdaki kodu type kısmına ekleyin.

Kod: Tümünü seç

type
  TDbGrid = class(DbGrids.TDBGrid) // custom runtime behavior
  private
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  protected

  end;
Kod kısmına aşağıdakini yazın.

Kod: Tümünü seç

procedure TDbGrid.WMVScroll(var Message: TWMVScroll);


  begin

      case message.ScrollCode of
         SB_BOTTOM	:form1.label2.caption:='SB_BOTTOM	';
         SB_ENDSCROLL	:form1.label2.caption:='end scroll';
         SB_LINEDOWN		:inherited; //form1.label2.caption:='line down';
         SB_LINEUP:inherited; //form1.label2.caption:='line up';
         SB_PAGEDOWN	:form1.label2.caption:='page down';
         SB_PAGEUP	:form1.label2.caption:='page up';
         SB_THUMBPOSITION:form1.label2.caption:='thumb position ';
         SB_THUMBTRACK	:form1.label2.caption:='thumb track';
         SB_top	:form1.label2.caption:='sb top ';

         end;
     form1.label1.caption:='geldi';

  end;


Artık scroll barı kullandığınızda dbgridin size tepki verdiğini görebilirsiniz.
Buradaki inherited; kelimesi sanırım. aldığımız mesajı işletiyor.
Ben de gelen değer line up ve line down ise bu mesajı işle demişim. yoksa işleme demişim.

Yanlız bu konuları araştırırken bir konu kafama takıldı. application.onmessage ile takip ederken wm_vscroll mesajını yakalayamıyor. bunun yerine wm_ncl... türü mesajları yakalıyor.
Umarım tecrübeli arkadaşlar bize sebebini açıklarlar.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
burdaki arkadaşda benzer bi sorunla karşılaşmış belki çözümü işinize yarıyabilir.

viewtopic.php?t=13485&highlight=
kolya gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla