随笔 - 809  文章 - 0 评论 - 144 阅读 - 770万

 

方法一:

于Form或ScrollBox的MouseWheel事件中添加如下代码:

if WheelDelta <0 then
    scrollbox1.Perform(WM_VSCROLL,SB_LINEDOWN,0)
else
    scrollbox1.Perform(WM_VSCROLL,SB_LINEUP,0);

方法二:

procedure Tfrmperson.ScrollBox1MouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
SendMessage(scrollbox1.Handle,WM_VSCROLL,SB_LINEDOWN,0);
end;

procedure Tfrmperson.ScrollBox1MouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
SendMessage(scrollbox1.Handle,WM_VSCROLL,SB_LINEUP,0);
end;

---------------------------------------------------------------------

复制代码
procedure ScrollBox1MouseWheelUp(Sender: TObject; Shift: TShiftState;
         MousePos: TPoint; var Handled: Boolean);
     procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
         MousePos: TPoint; var Handled: Boolean);
     private
     procedure getmouse(var msg:TWMMouseWheel);message WM_MouseWheel;
     { Private declarations }

procedure TForm1.ScrollBox1MouseWheelUp(Sender: TObject;
     Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
var
posi:integer;
begin
     posi := ScrollBox1.vertScrollBar.Position - 25 ;
     if ScrollBox1.vertScrollBar.Position < 0 then posi := 0;
     ScrollBox1.vertScrollBar.Position := posi;
end;

procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject;
     Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin

     ScrollBox1.vertScrollBar.Position := ScrollBox1.vertScrollBar.Position + 25 ;

end;
procedure TForm1.getmouse(var msg:TWMMouseWheel);
begin
     ScrollBox1.SetFocus ;
end;

网友补充:

只要scrollBox能获取焦点就可以。

在scrollBox的onMouseMove上设置焦点。

然后在scrollBox的onMouseWhell中:

scrollBox1.Scrollby(0,WheelDelta);
复制代码

--------------------------------------------------------------------------

复制代码
procedure   TfrmMain.sbPropMouseWheelDown(Sender:   TObject;  
      Shift:   TShiftState;   MousePos:   TPoint;   var   Handled:   Boolean);  
  begin  
      with   sbProp.VertScrollBar   do  
      begin  
          if   ScrollPos<Range   then  
              Position:=Position+10;  
      end;  
      Handled:=True;  
  end;  
   
  procedure   TfrmMain.sbPropMouseWheelUp(Sender:   TObject;   Shift:   TShiftState;  
      MousePos:   TPoint;   var   Handled:   Boolean);  
  begin  
      with   sbProp.VertScrollBar   do  
      begin  
          if   ScrollPos>0   then  
              Position:=Position-10;  
      end;  
      Handled:=True;  
  end;   



procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
scrollbox1.VertScrollBar.Position := scrollbox1.VertScrollBar.Position 30 ;
//scrollbox1.HorzScrollBar.Position := scrollbox1.HorzScrollBar.Position 30 ;
end;



procedure   TForm1.FormMouseWheelDown(Sender:   TObject;   Shift:   TShiftState;
    MousePos:   TPoint;   var   Handled:   Boolean);
begin
  scrollbox1.VertScrollBar.Position   :=     scrollbox1.VertScrollBar.Position   +   30   ;

end;

procedure   TForm1.FormMouseWheelUp(Sender:   TObject;   Shift:   TShiftState;
    MousePos:   TPoint;   var   Handled:   Boolean);
begin
    scrollbox1.VertScrollBar.Position   :=     scrollbox1.VertScrollBar.Position   -30   ;
end;

还可以看看这里
http://bbs.2ccc.com/topic.asp?topicid=160380
要不就用消息






procedure   TJC_FangShuiJi_HNTForm.sb_SYSJMouseWheelDown(Sender:   TObject;
    Shift:   TShiftState;   MousePos:   TPoint;   var   Handled:   Boolean);
begin
    //鼠标下滚动
    with   sb_SYSJ.VertScrollBar   do
    begin
        if   ScrollPos <Range       then
        Position:=Position+30;
    end;
    Handled:=True;
end;

//------------------------------------------------------------------------------
procedure   TJC_FangShuiJi_HNTForm.sb_SYSJMouseWheelUp(Sender:   TObject;
    Shift:   TShiftState;   MousePos:   TPoint;   var   Handled:   Boolean);
begin
    //鼠标上滚动
    with   sb_SYSJ.VertScrollBar   do
    begin
        if   ScrollPos> 0   then
        Position:=Position-30;
    end;
    Handled:=True;
end; 
复制代码

----------------------------------------------------------------

我自己的总结的方案:

贴上代码:

复制代码
procedure TfrmMain.ScrollBox1MouseEnter(Sender: TObject);
begin
  ScrollBox1.SetFocus;//这个事件可能不对,可能不是onenter事件,但是目前没有发现更好的事件,而这个时间又可以满足,以后再深入研究
end;

procedure TfrmMain.ScrollBox1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if WheelDelta <0 then
  begin
    ScrollBox1.Perform(WM_VSCROLL,SB_LINEDOWN,0);
  end else begin
    ScrollBox1.Perform(WM_VSCROLL,SB_LINEUP,0);
  end;
end;
复制代码

 

posted on   del88  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示