線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1728
推到 Plurk!
推到 Facebook!

使用dbgrid時, 如何用mouse的中間鍵轉動到另一頁

尚未結案
MatthewSong
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-16 11:47:06 IP:202.175.xxx.xxx 訂閱
其實我發覺有個問題

使用dbgrid時, 例如一頁有十五條record, 但我用mouse中間鍵時, 當滾動到第十五條, 照道理應該滾到第十六條(下一頁), 又或者直接轉到下一頁,
但往往到第十五條時就不動, 要去第十六條, 就要按右邊的bar才到下一頁的第十六條

請問如何達成這個條件呢, 謝謝
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-17 18:53:23 IP:61.67.xxx.xxx 未訂閱
原始的dbgrid 並沒有開放 wheel (瀼輪)的介面), 你必須自己對 DBgrid .pas 修改加入以下的功能

在 public 中加一組定義
public
{ Public declarations }
....
// 加入滾輪功能
function DoMouseWheel(Shift: TShiftState; WheelDelta:
Integer; MousePos:TPoint): Boolean; override;

在 {DBGrid } 下任一位置加上

function TDBGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean;
begin
if WheelDelta > 0 then datasource.DataSet.Prior;
if wheelDelta < 0 then DataSource.DataSet.Next;
Result := True;
end;

重新編譯即可
要不, 改用這組TWDBGrid 取代 DBGrid, 已內鍵滾輪功能
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=91205


另外, 你這篇應該發在 vcl討論區比較恰當, 並非 dbgrid 就是有關資料庫討論, 我幫你移過去
編輯記錄
P.D. 重新編輯於 2009-04-17 18:55:27, 註解 無‧
MatthewSong
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-18 14:38:05 IP:122.100.xxx.xxx 訂閱
謝謝 p.d 大大

不好意思放錯區

我想問, 這樣不用加一個 event嗎 ?

只加一個function就可以 知道是在用wheel?
還是本身dbgrid就有但沒有開放 ?

謝謝

===================引 用 P.D. 文 章===================
原始的dbgrid 並沒有開放 wheel (瀼輪)的介面), 你必須自己對 DBgrid .pas 修改加入以下的功能

在 public 中加一組定義
public
{ Public declarations }
....
// 加入滾輪功能
function DoMouseWheel(Shift: TShiftState; WheelDelta:
Integer; MousePos:TPoint): Boolean; override;

在 {DBGrid } 下任一位置加上

function TDBGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean;
begin
if WheelDelta > 0 then datasource.DataSet.Prior;
if wheelDelta < 0 then DataSource.DataSet.Next;
Result := True;
end;

重新編譯即可
要不, 改用這組TWDBGrid 取代 DBGrid, 已內鍵滾輪功能
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=91205


另外, 你這篇應該發在 vcl討論區比較恰當, 並非 dbgrid 就是有關資料庫討論, 我幫你移過去
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-18 14:57:19 IP:122.126.xxx.xxx 訂閱
用繼承也很方便。
不過如你所願,需自訂函數。

procedure TGridViewForm.FormCreate(Sender: TObject);
begin
inherited;
TStringGrid(DBGrid1).onMouseWheelDown := DoMouseWheelDown;
TStringGrid(DBGrid1).onMouseWheelUp := DoMouseWheelUp;
end;

procedure TGridViewForm.DoMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
DBGrid1.DataSource.DataSet.Next;
end;

procedure TGridViewForm.DoMouseWheelUp(Sender: TObject;Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
DBGrid1.DataSource.DataSet.Prior;
end;
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-20 13:54:41 IP:219.87.xxx.xxx 訂閱
您好
在網站中已經有很多相關主題喔!請參考!

http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=62090
------
Pillar Wang
系統時間:2024-03-28 17:29:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!