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控件在接受焦点后有光标显示。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。