Mause Orta tuşu İle Dbgrid Scroll unu hareket ettirme

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mause Orta tuşu İle Dbgrid Scroll unu hareket ettirme

Mesaj gönderen vedatkaba »

Herkese merhabalar herkese kolay gelsin..Biraz araştırma biraz soruşturmadan sonra böle bir şey meydana çıktı.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBTables;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TWheelDBGrid = class(TDBGrid)
  public
    property OnMouseWheel;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  TWheelDBGrid(DBGrid1).OnMouseWheel := DBGridMouseWheel;
end;

function GetNumScrollLines: Integer;
begin
  SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @Result, 0);
end;

procedure TForm1.DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  Direction: Shortint;
begin
  Direction := 1;
  if WheelDelta = 0 then
    Exit
  else if WheelDelta > 0 then
    Direction := -1;

  with TDBGrid(Sender) do
  begin
    if Assigned(DataSource) and Assigned(DataSource.DataSet) then
      DataSource.DataSet.MoveBy(Direction * GetNumScrollLines);
    Invalidate;
  end;
end;

end.
Kolay gelsin arkadaşlar........
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Üstad Tşk

Mesaj gönderen pro_imaj »

Merhaba
Üstad makalen için çok tşk ederim.

Ama keşke birkaç satırda açıklama yazsan daha iyi olurdu ama yinede ellerine sağlık.

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

Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

çok teşekkürler, birkaç haftadır bunu arıyordum. Elinize sağlık işe yaradı..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Ama aynı kodlama değilki, ikiside farklı bir şekilde yapılmış.

Birde makale yada foruma açılan başlıklar içeriğini en iyi anlatır şekilde olursa güzel olur. Birkaç haftadır bu kodları arıyordum ama varmış.. Başlığıda : dbgrid component ( srdbgrid) ....
Biraz daha içeriği anlatır şekilde yazarsak benim gibi yeni başlayanlar daha rahat aradıklarını bulurlar.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

normal db gridde mouse orta tuşu sadece ekranda görünen kısımda hareket ediyor ve aktif kayıt değişmiyor..

bende daha önce bana lazım olduğu için böyle bir kompenent yazdım..

bunu bir kompenent olarak kurarsan özelliklerini zaten göreceksin..
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Arkadaşlar normaldede mouse orta tuşu kayıtlar üzerinde kaydırma yapıyor.Burdaki farklılık dbgrid içindeki scrollbarı hareket etttirme.Normalinde dbgrid içinde ki görünen kayıt bittiği zaman kaydırma yapmaz scroll hareket etmez.Ama bu kodla hareket ettiğini ve istediğiniz şekilde kayıtlar içinde dolaştığınızı göreceksiniz.
Selimr kardeşim senin makaleni ve deneme şansım olmadı.Ama anladığım kadarı ile bileşen.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

evet bileşen..

normal gridde görünen kısım bitince kaydırma yapmaz.. görünen kısımda yaptığı kaydırmadada aktif kayda konumlanmaz..

benim bileşende görünen kısım değil tümünde bu işlem yapılıyor ve aktif kayıta konumlanabiliyor,

bunun dışında satırlarıda renklendirebiliyorsunuz..
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

bu da teamb den olsun :)

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, Grids, DBGrids, DBTables;

type
  TForm1 = class(TForm)
    Table1: TTable;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  procedure GridMouseWheel(Sender: TObject; Shift: TShiftState;
            WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
 end;

  type
  TGridCracker = class(TDBGrid)
  public
    property OnMouseWheel;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.GridMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
Var
  code: Cardinal;
begin
  Handled := true;
  If WheelDelta > 0 Then  // you may use > 0 according to taste
    code := VK_UP
  Else
    code := VK_DOWN;
  (sender as TWincontrol).Perform( WM_KEYDOWN, code, 0 );
  (sender as TWincontrol).Perform( WM_KEYUP, code, 0 );
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TGridCracker(dbgrid1).OnMouseWheel := GridMousewheel;
end;



end.

Peter Below (TeamB)
Use the newsgroup archives :
http://www.mers.com/searchsite.html
http://www.tamaracka.com/search.htm
http://groups.google.com
http://www.prolix.be
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla