点击dbgrid的右侧的垂直滚动条,当前记录会跟着改变?如何解决这个问题如果有第三方组件,是什么?
解决方案 »
- Indy TIdTCPServer和TIdTCPClient 实现Socket多线程
- ●●●超级难!!!需要顶级Delphi高手解答
- TRxRichEdit的超链接,英文没有问题,中文出错
- 问个问题,希望大家能回答
- 如何将这些函数减缩成一个函数?(高手请救)
- 如何将一个字符串添加到一个MemoryStream的末尾,MemoryStream 本身不是空的。。。
- 简单问题,如何在edit中判断小键盘的按键?在线给分。
- 请问如何对DBGrid多选项进行处理?????
- SSL,delphi 开发流程怎么做?
- 一个简易的程序代码
- 要求用户装adobe pdf reader 大家说合适吗?
- 婚後歸來,散分
除非自己再包裝DBGrid,處理WM_VSCROLL,否則很難達到你的目的...
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOTable1: TADOTable;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
private
procedure ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean); //在下面的过程写好后直接按Ctrl+Shift+C将自动生成此段代码
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
//------------------------------------------------------------------------------
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;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;
if (DBGrid2.Focused) And (Msg.message = WM_MOUSEWHEEL) then //如果有两个DBGrid
begin
if Msg.wParam > 0 then
SendMessage(DBGrid2.Handle, WM_KEYDOWN, VK_UP, 0)
else
SendMessage(DBGrid2.Handle, WM_KEYDOWN, VK_DOWN, 0);
Handled := True;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=ApplicationEvents1Message; // 截获鼠标滚动事件
end;
或者procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Application.OnMessage:=ApplicationEvents1Message; // 截获鼠标滚动事件
end;