我们在编程过程中,经常遇到要给TDBGrid增加鼠标的滚轮事件处理,具体就是让记录随着鼠标滚轮移动。这里介绍一种比较简单和有新意的方法:
首先在你使用TDBGrid的单元type处加上:
TDBGrid = class(DBGrids.TDBGrid)
public
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
end;
然后在实现部分:
function TDBGrid.DoMouseWheel(Shift:TShiftState;WheelDelta:Integer;MousePos:TPoint):Boolean;
begin
Result := true;
if WheelDelta<0 then
DataSource.DataSet.Next;
if wheelDelta>0 then
DataSource.DataSet.Prior;
end; // 滚动DataSet
这样就可以对你整个当前窗体上的TDBGrid的滚轮事件起作用了。
与此类似的处理,我们也可以对当前窗体上所有的TLabel控件增加鼠标特效:当鼠标移上去的时候显示手型图标,同时文字变粗;当鼠标移开恢复状态。
//----------------给TLabel组件增加鼠标特效-----------------
TLabel = class(stdCtrls.TLabel)
public
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
end;
procedure TLabel.CMMouseEnter(var Message: TMessage);
begin
Self.Cursor := crHandPoint;
Self.Font.Color := clRed;
self.Font.Style := [fsBold];
end;
procedure TLabel.CMMouseLeave(var Message: TMessage);
begin
Self.Cursor := crDefault;
Self.Font.Color := clBlue;
self.Font.Style := [fsUnderline];
end;
总结:这种思想,可以避免为了一些简单的功能而去自己重写控件的麻烦。