А вот отключалка по имени класса получилась и на простой DBGrid работает
Код:
uses Messages;
...
type
TfrmMain = class(TForm)
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure DbGridWindowProc(var Msg: TMessage);
...
private
FGridWndProc: TWndMethod;
{ Private declarations }
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FGridWndProc := DBGrid1.WindowProc;
DBGrid1.WindowProc := DbGridWindowProc;
end;
procedure TfrmMain.DbGridWindowProc(var Msg: TMessage);
var
hWnd: THandle;
rPos: TPoint;
aName: array [0..255] of Char;
begin
case Msg.Msg of
WM_MOUSEWHEEL:
if Boolean(GetCursorPos(rPos)) then
begin
hWnd:= WindowFromPoint(rPos);
GetClassName(hWnd, aName, 256);
if string(aName) <> 'TDBGrid' then exit;
end;
end;
if Assigned(FGridWndProc) then FGridWndProc(Msg);
end;
только имя поменять