Delphi DBgrid DBCtrlGrid控件的滾動條問題
来源:互联网 发布:招聘网上的淘宝兼职可靠性 编辑:程序博客网 时间:2024/05/20 09:08
Delphi DBgrid DBCtrlGrid控件的滾動問題
1、不支持鼠標中鍵
2、鼠標一定要松開才生效
3、滾動條才滾動的時候數據庫也會跟著滾動 (不能算缺點只有不一樣的方式,如果能提供多種選擇就好了)
以上1、2點現可以解決。3點暫沒有找到方法
用法
TDBGridEx.Create(Application, DBGrid1);
TDBCtrlGridEx.Create(Application, DBCtrlGrid1);
//DBGridEx單元代碼
//////////////////////////////////////////////////////////////////////////
unit uDBGridEx;
interface
uses
Windows, Forms, Classes, Messages, DBGrids;
type
TDBGridEx = class(TComponent)
private
D: TDBGrid;
F: TWndMethod;
protected
procedure DBGridProc(var Message:TMessage);virtual;
Public
constructor Create(AOwner: TComponent; DBGrid: TDBGrid);reintroduce;
destructor Destroy; override;
end;
procedure WiseDBGrid(DBGrid: TDBGrid);overload;
procedure WiseDBGrid(AForm: TForm; DBGrid: TDBGrid);overload;
implementation
procedure WiseDBGrid(DBGrid: TDBGrid);overload;
begin
TDBGridEx.Create(Application, DBGrid);
end;
procedure WiseDBGrid(AForm: TForm; DBGrid: TDBGrid);overload;
begin
TDBGridEx.Create(AForm, DBGrid);
end;
{ TDBGridEx }
constructor TDBGridEx.Create(AOwner: TComponent; DBGrid: TDBGrid);
begin
inherited Create(AOwner);
F := DBGrid.WindowProc;
D := DBGrid;
D.WindowProc := DBGridProc;
end;
procedure TDBGridEx.DBGridProc(var Message: TMessage);
var
si: TScrollInfo;
Par: WPARAM;
begin
case Message.Msg of
WM_MOUSEWHEEL: //鼠标中键
begin
FillChar(si,SizeOf(si),0);
si.cbSize := SizeOf(si); //拿全部信息
si.fMask := SIF_TRACKPOS or SIF_RANGE or SIF_POS or SIF_PAGE;
with TWMMouseWheel(Message) do begin
GetScrollInfo(D.Handle, SB_VERT, si); // 拿滚动条相关信息
if WheelDelta <0 then //小于 0 则表示向下滚动
begin
if Keys = MK_CONTROL then //按下CTRL键,则翻页滚动.
Par := SB_PAGEDOWN
else Par := SB_LINEDOWN; //不按特殊键,则单行滚动
D.Perform(WM_VSCROLL,Par,0);
end
else begin
if Keys = MK_CONTROL then //同上,只是滚动方向相反
Par := SB_PAGEUP
else Par := SB_LINEUP;
D.Perform(WM_VSCROLL,Par,0);
end;
end;
end;
WM_VSCROLL: //纵向滚动条
begin
with TWMVScroll(Message) do
begin
case ScrollCode of
SB_THUMBTRACK:
D.Perform(WM_VSCROLL,SB_THUMBPOSITION,Pos)
end;
end;
end;
end;
F(Message);
end;
destructor TDBGridEx.Destroy;
begin
if (D <> nil) then D.WindowProc := F;
inherited Destroy;
end;
end.
//DBCtrlGridEx單元代碼
//////////////////////////////////////////////////////////////////////////
unit uDBCtrlGridEx;
interface
uses
Windows, Forms, Classes, Messages, DBCGrids;
type
TDBCtrlGridEx = class(TComponent)
private
D: TDBCtrlGrid;
F: TWndMethod;
protected
procedure DBCtrlGridProc(var Message:TMessage);virtual;
Public
constructor Create(AOwner: TComponent; DBCtrlGrid: TDBCtrlGrid);reintroduce;
destructor Destroy; override;
end;
procedure WiseDBCtrlGrid(DBCtrlGrid: TDBCtrlGrid);overload;
procedure WiseDBCtrlGrid(AForm: TForm; DBCtrlGrid: TDBCtrlGrid);overload;
implementation
procedure WiseDBCtrlGrid(DBCtrlGrid: TDBCtrlGrid);overload;
begin
TDBCtrlGridEx.Create(Application, DBCtrlGrid);
end;
procedure WiseDBCtrlGrid(AForm: TForm; DBCtrlGrid: TDBCtrlGrid);overload;
begin
TDBCtrlGridEx.Create(AForm, DBCtrlGrid);
end;
{ TDBCtrlGridEx }
constructor TDBCtrlGridEx.Create(AOwner: TComponent; DBCtrlGrid: TDBCtrlGrid);
begin
inherited Create(AOwner);
F := DBCtrlGrid.WindowProc;
D := DBCtrlGrid;
D.WindowProc := DBCtrlGridProc;
end;
procedure TDBCtrlGridEx.DBCtrlGridProc(var Message: TMessage);
var
si: TScrollInfo;
Par: WPARAM;
begin
case Message.Msg of
WM_MOUSEWHEEL: //鼠标中键
begin
FillChar(si,SizeOf(si),0);
si.cbSize := SizeOf(si); //拿全部信息
si.fMask := SIF_TRACKPOS or SIF_RANGE or SIF_POS or SIF_PAGE;
with TWMMouseWheel(Message) do begin
GetScrollInfo(D.Handle, SB_VERT, si); // 拿滚动条相关信息
if WheelDelta <0 then //小于 0 则表示向下滚动
begin
if Keys = MK_CONTROL then //按下CTRL键,则翻页滚动.
Par := SB_PAGEDOWN
else Par := SB_LINEDOWN; //不按特殊键,则单行滚动
D.Perform(WM_VSCROLL,Par,0);
end
else begin
if Keys = MK_CONTROL then //同上,只是滚动方向相反
Par := SB_PAGEUP
else Par := SB_LINEUP;
D.Perform(WM_VSCROLL,Par,0);
end;
end;
end;
WM_VSCROLL: //纵向滚动条
begin
with TWMVScroll(Message) do
begin
case ScrollCode of
SB_THUMBTRACK:
D.Perform(WM_VSCROLL,SB_THUMBPOSITION,Pos)
end;
end;
end;
end;
F(Message);
end;
destructor TDBCtrlGridEx.Destroy;
begin
if (D <> nil) then D.WindowProc := F;
inherited Destroy;
end;
end.
- Delphi DBgrid DBCtrlGrid控件的滾動條問題
- 清除delphi 控件DBgrid 的记录
- Delphi中的DBGrid控件
- Delphi中的DBGrid控件
- 彻底解决Delphi的DBGrid控件鼠标滚轮问题
- 让Delphi的DBGrid支持鼠标轮
- Delphi实现凭证格式的DBGrid
- DELPHI的DBGrid组件属性介绍
- DELPHI的DBGRID有两个难点
- Delphi 7 中DBGrid的排序。
- DELPHI的DBGRID有两个难点
- Delphi 同时使用 dbgrid ,dbgrideh 的冲突
- Delphi 7 中DBGrid的排序
- Delphi DBGrid刷新闪动的处理
- Delphi中DBgrid控件数据库点击某列按序排列
- delphi DBgrid 使用大全
- dbgrid使用大全(delphi)
- Delphi DBGrid总结
- C#中索引器的实现过程
- 结构体域成员的对齐方式与内存分配
- 如何使网页在Firefox中变灰
- 以为“忘记密码”
- javascript 结构体示例
- Delphi DBgrid DBCtrlGrid控件的滾動條問題
- 第一篇文章
- jquery小结
- java二进制,字节数组,字符,十六进制,BCD编码转换
- Linux下samba服务器的架设
- 变量和值在内存中的存储位置
- 如何将十六进转换成字节
- 向视图中插入数据的问题(通过触发器向视图插入数据)
- 进程间数据通信方式和特点