利用子类化技术为DBGrid增加鼠标滚动

作者:yifei(尹加俊)

信箱:yifei1900@163.com

为DBGrid增加鼠标滚动功能的演示,核心代码如下:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
FARPROC OldProc = NULL; //用于保存旧的DBGrid控件的WindowProc
//---------------------------------------------------------------------------
/**
* 声明新的DBGrid的WindowProc
*/
LRESULT CALLBACK DBGridProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
//处理感兴趣的Window消息
if(uMsg == WM_MOUSEWHEEL) {
if((short)HIWORD(wParam) > 0) {
::PostMessage(hWnd,WM_VSCROLL,SB_LINEUP,0);
} else {
::PostMessage(hWnd,WM_VSCROLL,SB_LINEDOWN,0);
}
}
//调用原DBGrid的WindowProc
return (::CallWindowProc(OldProc,hWnd,uMsg,wParam,lParam));
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormShow(TObject *Sender)
{
this->ADOCn->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ ExtractFilePath(Application->ExeName) + "Data.mdb;Persist Security Info=True";
this->ADOCn->Connected = true;
this->DataSet->Open();
//设置新的窗体函数
OldProc = (FARPROC)::SetWindowLong(this->DBGrid->Handle,GWL_WNDPROC,(long)DBGridProc);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
//还原窗体函数
::SetWindowLong(this->DBGrid->Handle,GWL_WNDPROC,(long)OldProc);
this->ADOCn->Connected = false;
}
//---------------------------------------------------------------------------


今天偶然看到了2ccc站点上有给DBGrid增加滚动功能的代码,想想这个功能还真的很实用(但是他们的演示代码真的不怎么样,没有一点实用性),又搜索了一下网络发现只有Delphi和VB的例子,于是我就把写了一份BCB的代码,没有用网络上那些演示代码的方法,采用了一种比较实用的方法。

时间: 2024-12-09 13:44:49

利用子类化技术为DBGrid增加鼠标滚动的相关文章

子类化

子类化 如果你曾经在 Windows 环境下编过程序,有时候就会发现:有一个现成的窗口,几乎有你所需要的全部功能,但还不完全一样.如果你需要一个具有过滤特殊字符功能的 Edit 控件.当然最直接的方法就是自己用代码来实现,但这的确是一个费时又很困难的任务,而子类化就可以用来做这种事情. 子类化允许你接管被子类化的窗口,使你对它有绝对的控制权.举个例子了来阐明一下:例如你需要一个只接受十六进制数字输入的文本编辑框,如果使用一个简单的 Edit控件,当用户输入十六进制以外的字符时,你既不知道也无计可

眼见为实(2):介绍Windows的窗口、消息、子类化和超类化

眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较"生僻"的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和线程.子类化(Subclassing)和超类化(Superclassing)是伴随Windows窗口机制而产生的两个复用代码的方法.不要把"子类化.超类化"与面向对象语言中的派生类.基类混淆起来."子类化.超类化"中的"类"是指W

利用窗口子类化隐藏系统图标

窗口子类化是一种非常有用的技术,通常它用在Windows GUI编程方面,我们用这种技术来创建新的控件,比如让SubClassing一个Edit控件添加一些消息处理让它变成MaskEdit控件等等.反过来想想如果我们SubClassing一个有ES_PASSWORD风格的窗口控件,得到它的密码是难是吗?很简单,不过是一句CallWindowProc调用,只不过在NT等系统上需要Inject一个DLL到目标进程来SubClassing一个进程中的窗口或是子窗口. 用Spy++看了一下,资源管理器里

利用百度分词技术轻松获得精准流量

我们在做SEO优化过程中,该怎样利用好百度分词技术,提高关键词与用户之间搜索匹配度度,从而轻松获得精准的转化率高的流量.比如笔者目前做的关键词"时尚袜子",用户在搜索"时尚袜子"和"去哪里找时尚袜子"这两个词,出来的自然排名结果完全不同.特别是在优化网站长尾关键词时,加大关键词与用户搜索的匹配度,就非常关键. 通常情况下我们利用百度分词技术把匹配度分成三种:完全匹配.高度匹配.模糊匹配.我们在确定使用哪个关键词之前,需要多了解用户的搜索习惯,今天

让Delphi的DBGrid支持鼠标轮

现在的大多数的鼠标都有鼠标轮,比如,当我们浏览网页时,鼠标轮上下移动,网页就自动上下滚动.鼠标轮的确给我们的操作带来很多方便,但是,在Delphi的大多数控件中都只支持 MouseDown,MouseUp,MouseMove等事件,而不直接支持MouseWheel事件,我们在帮助客户设计一个查看程序时就碰到这样的问题.这个查看程序的数据是放在一个DBGrid中的,数据比较多,超出整个屏幕,如果用鼠标轮上下移动,则DBGrid的光标只在可见范围内移动,超出屏幕的数据必须用键盘或右侧的滚动条,给用户

extjs tabpanel不使iframe,利用锚点技术请求html,但是html中的js失效

问题描述 extjs tabpanel不使iframe,利用锚点技术请求html,但是html中的js失效 代码很简单 var tabPanel = new Ext.panel.Panel({ id: tabId, title: text, closable: true, layout: 'fit', deferredRender: false, loadMask: 'loading...', loader: { url: href, autoLoad: true, scripts: true

从容器化技术到现代云计算有多远?

在接下来的几周,我们将会发布一个新的系列博客,在这个系列中,我们想阐述Google对于容器技术的一些观点,此外我们还会和读者分享Google在过去十年间,在容器中运行服务的一些经验.我们是一支由Google的产品经理.一线技术员以及架构师组成的团队,团队共同的目标是要帮助读者了解"容器技术革命"如何能更有效的构建和运行服务.这次我们邀请了"Google 云平台全球解决方案"的专家Miles Ward来做分享,作为这一系列博客的开篇. 各位好!欢迎来到我们新的系列博客

[技术学习]浅谈MFC中超类化技术的实现 .

自 Panr 的 Blog // 关键词:// 面对对象编程.超类化.子类化.Superclassing// MFC.CWnd::SubclassWindow// 通用控件.CMNCTRL//// 主题:// 通过CWnd::SubclassWindow 函数的分析,浅谈MFC中超类化技术的实现////// 背景// 我在2002-12月见了mahongxi (烤鸡翅膀)(色摸)在CSDN上的一个帖// 介绍了MFC中窗体的超类化的概念,以下是对我个人回贴的总结//// 日志// 修改:Panr

《iOS 6核心开发手册(第4版)》——2.10节子类化UIControl

2.10 子类化UIControl iOS 6核心开发手册(第4版) UIKit提供了许多预先构建的控件,可以直接在应用程序中使用它们.这些控件包括按钮.选项开关和滑块等.但是,为什么要在那里止步不前?不必把自己局限于Apple提供的项目.为什么不创建你自己的控件呢? 秘诀2-5演示了如何子类化UIControl,以从头开始构建新控件.这个示例创建一个简单的拾色器.在使用时,它允许用户通过触摸或者在控件内拖动来选择一种颜色.当用户左右移动时,颜色改将变其色相.上下移动则会调整颜色的饱和度.颜色的