分享

SCROLLBOX的MouseWheel

 aaie_ 2011-12-23
SCROLLBOX,在有些时候,你写了MOUSEWHEEL事件的代码,但缺看不到效果,关键在与在SCROLLBOX中都是IMAGE或LABEL控件。所以SCROLLBOX根本的不到焦点。
解决方案:
在SCROLLBOX中放入控件LISTBOX1,将LISTBOX1的长宽都设为0,
在SCROLLBOX的MOUSEMOVE事件中写入代码:
procedure TForm1.ScrollBox1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
//listbox随鼠标移动,不移动的话在SCROLLBOX在次得到焦点的时候滚动到LISTBOX位置
listbox1.Top:=y;
listbox1.Left:=x;
//Listbox1 得到焦点,其实是SCROLLBOX得到焦点
listbox1.SetFocus;
end;
然后在写控制鼠标滚轮的事件。

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 TFrom1.ScrollBox1MouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
   ScrollBox1.vertScrollBar.Position := ScrollBox1.vertScrollBar.Position + 25 ;
end;
这样就可以了,网上的很多方案都是截取系统的Message VM_WHEEL,其实SCROLLBOX本身就有,不需要来修改他,因为修该Message会对其他控件有影响,关键是在于他本身是否可以接受焦点。
上面代码D7没有问题。LISTBOX空间可以换成其他能接受焦点的控件来代替,但不要用EDIT控件,因为EDIT控件在接受焦点后有光标显示。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多