怎么设置dbgrid的属性使得dbgrid能支持鼠标的滚轮功能呢???
解决方案 »
- 有没有TAPI3.H翻译好的pas文件?
- 三个简单的问题请教!
- 怎么样将SQL Server2000 的桌面包到程序中去?
- 一个关于动态创建的事件问题,请各位高手不吝赐教。
- 急寻INTRAWEB学习资料,100分不够再加。
- 点击某树节点后让该节点以及子节点隐藏起来?千万别告诉我把该节点delete掉!再线等,揭贴!~~
- 高分求教,如何能够让其他程序中的控件可见。
- 用WebBrowse控件遇到难题???
- Delphi内存释放问题。
- 如何保证,窗体切换时,看起来不闪烁!
- VCLSkin有BUG,大家帮手up呀。
- 用微软的ado对象访问数据库时,向里面田加内容时,可不可已直接把文本框的内容付给字段?
var Handled: Boolean);
begin
if (DBGrid1.Focused) And (Msg.message = WM_MOUSEWHEEL) then
begin
if Msg.wParam > 0 then
SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_UP, 0)
else
SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_DOWN, 0);
Handled := True;
end;
end;
判断Grid是否有滚动条?if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_VSCROLL) <> 0 thenShowMessage('Vertical scrollbar is visible!');if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_HSCROLL) <> 0 thenShowMessage('Horizontal scrollbar is visible!');
这个过程(ApplicationEvents1Message)随便我的滚轮怎么动,它都不能被激发啊,是怎么回事呢?
还需要在哪里设置什么呢?? btw: 而且我的滚轮上下滑动时,gbgrid能在上下行移动只是在当前页(),而不能上移或下到当前屏幕上看不到的那些记录上。
private
OldGridWnd : TWndMethod;
procedure NewGridWnd (var Message : TMessage);
publicprocedure TForm1.NewGridWnd(var Message: TMessage);
var
IsNeg : Boolean;
begin
if Message.Msg = WM_MOUSEWHEEL then
begin
IsNeg := Short(Message.WParamHi) < 0;
if IsNeg then
DBGrid1.DataSource.DataSet.MoveBy(1)
else
DBGrid1.DataSource.DataSet.MoveBy(-1)
end
else
OldGridWnd(Message);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
OldGridWnd := DBGrid1.WindowProc ;
DBGrid1.WindowProc := NewGridWnd;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, MyDbGrid;
type
TDBGrid= class(DBGrids.TDBGrid)
public
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
end;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
ADOTable1: TADOTable;
private
{ Private declarations }
public { Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function TDBGrid.DoMouseWheel(Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint): Boolean;
begin
if WheelDelta < 0 then
Datasource.DataSet.Next;
if wheelDelta > 0 then
DataSource.DataSet.Prior;
end;end.
这个过程(ApplicationEvents1Message)随便我的滚轮怎么动,它都不能被激发啊,是怎么回事呢?
还需要在哪里设置什么呢?? ……………………………………………………………………………………
设置窗体的KeyPrevew := True,窗体比控件更先接受消息
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
i: SmallInt;
begin
if TForm1.ActiveControl = DBGrid1 then
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;
end;
这个过程(ApplicationEvents1Message)随便我的滚轮怎么动,它都不能被激发啊,是怎么回事呢?
还需要在哪里设置什么呢?? btw: 而且我的滚轮上下滑动时,gbgrid能在上下行移动只是在当前页(),而不能上移或下到当前屏幕上看不到的那些记录上。---------------------------------------------------------你要把代码写再 TApplicationEvents控件(delphi自带)的OnMessage事件中阿。注意,是TApplicationEvents的OnMessage事件中,不时自己定义的过程。