3D鼠標輪子混動時,在DBGrid中的小3角不能同步顯示,有何高招? |
尚未結案
|
pwq
一般會員 發表:5 回覆:13 積分:3 註冊:2002-03-13 發送簡訊給我 |
|
pwq
一般會員 發表:5 回覆:13 積分:3 註冊:2002-03-13 發送簡訊給我 |
本人已經解決此問題,現在方法貼出如下:
Type
TDBGrid = class(TDBGrid)
private
FOldGridWnd : TWndMethod;
procedure NewGridWnd (var Message : TMessage);
public
constructor Create(AOwner: TComponent); override;
end;
//////////////////////////////////////////紅色部分代友需放在以下代碼前
TMDFMainForm = class(TForm)
......
end; implementation
{$R *.dfm}
constructor TNDBGrid.Create(AOwner: TComponent);
begin
inherited;
FOldGridWnd := WindowProc;
WindowProc := NewGridWnd;
end; procedure TDBGrid.NewGridWnd(var Message: TMessage);
var
IsNeg : Boolean;
begin
if Message.Msg = WM_MOUSEWHEEL then
begin
IsNeg := Short(Message.WParamHi) < 0;
if IsNeg and (DataSource.DataSet<>nil) and DataSource.DataSet.Active then
DataSource.DataSet.MoveBy(1)
else if not IsNeg and (DataSource.DataSet<>nil) and DataSource.DataSet.Active then
DataSource.DataSet.MoveBy(-1)
end
else FOldGridWnd(Message); end;
........ end.
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 剛剛看了一篇文章,沒想到在這個問題上也有解,我實際試了一下,確實可行,且更簡單,感謝 Miles,請參照以下文章(Miles 發表部分)
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41134
--------------------------------
小弟才疏學淺,若有謬誤請不吝指教
--------------------------------
------
Fishman |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
Hi,pwq您好!
請您參考一下這篇文章,看是否能解決您的問題: http://www.yesky.com/SoftChannel/72342371928440832/20030619/1709082.shtml
值 說明 MK_CONTROL 按下CTRL鍵 MK_LBUTTON 按下鼠標左鍵 MK_MBUTTON 按下鼠標中鍵 MK_RBUTTON 按下鼠標右鍵 MK_SHIFT 按下Shift鍵 2.zDelta = (short) HIWORD(wParam) 鼠標輪滾動的距離,如果向前則為正,向後為負。 3.xPos =(short) LOWORD(lParam) yPos= (short) HIWORD(lParam) 鼠標的位置。 |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
Delphi已經定義了兩個和鼠標輪相關的事件,叫TmouseWheelEvent, TmouseWheelUpDownEvent,分別代表鼠標輪事件和鼠標輪上,下滾動事件。因此,我們先在TmyDbGrid中定義三個私有的事件變量: fMouseWheel:TMouseWheelEvent;
fMouseWheelUp:TMouseWheelUpDownEvent; //鼠標輪上滾事件
fMouseWheelDown: TMouseWheelUpDownEvent; //鼠標輪下滾事件 然後定義publised中定義事件屬性: property OnMouseWheel:TMouseWheelEvent read fMouseWheel write fMouseWheel; property OnMouseWheelUp:TMouseWheelUpDownEvent read fMouseWheelUp write fMouseWheelUp; property OnMouseWheelDown:TMouseWheelUpDownEvent read fMouseWheelDown write fMouseWheelDown; 然後重載TDBGrid的WndProc函數, procedure WndProc(var Msg: TMessage);override;
我們在WndProc中捕獲鼠標輪的消息,如下:
var MousePoint:TPoint; Handled:Boolean; shift:TShiftState; begin if(Msg.Msg=WM_MOUSEWHEEL) then //捕獲鼠標輪事件 begin MousePoint.X:=LOWORD(Msg.lParam); MousePoint.Y:=HIWORD(Msg.lParam); Handled:=false; if(Msg.wParam>0) then //上滾 fMouseWheelUp(self,shift,MousePoint,Handled) else //下滾 fMouseWheelDown(self,shift,MousePoint,Handled); fMouseWheel(self,shift,HIWORD(Msg.wParam),MousePoint,Handled); if Handled then exit; end; inherited; end;這樣,我們就基本可以處理鼠標輪事件了,編譯我們的組件,然後選擇菜單Components-Inatll Component,將我們的組件安裝在Samples頁下。 讓我們來試驗一下我們做的組件,新建一個應用,然後選擇Samples下的MyDBGrid組件,其它的用法,和DBGRrid完全一樣,但你可以看見,在你的MyDbGrid的事件中,已經有OnMouseWheel, OnMouseWheelUp, OnMouseWheelDown的選項了。 這樣,你可以在OnMouseWheel, OnMouseWheelUp, OnMouseWheelDown中處理你的動作了,我們也完成了客戶的要求,當客戶移動鼠標輪時,我們在OnMouseWheelUp中加入相應代碼,圓滿解決了客戶的要求。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |