|
SCROLLBOX,在有些時候,你寫了MOUSEWHEEL事件的代碼,但缺看不到效果,關(guān)鍵在與在SCROLLBOX中都是IMAGE或LABEL控件。所以SCROLLBOX根本的不到焦點。 解決方案: 在SCROLLBOX中放入控件LISTBOX1,將LISTBOX1的長寬都設(shè)為0, 在SCROLLBOX的MOUSEMOVE事件中寫入代碼: procedure TForm1.ScrollBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin //listbox隨鼠標(biāo)移動,不移動的話在SCROLLBOX在次得到焦點的時候滾動到LISTBOX位置 listbox1.Top:=y; listbox1.Left:=x; //Listbox1 得到焦點,其實是SCROLLBOX得到焦點 listbox1.SetFocus; end; 然后在寫控制鼠標(biāo)滾輪的事件。 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; 這樣就可以了,網(wǎng)上的很多方案都是截取系統(tǒng)的Message VM_WHEEL,其實SCROLLBOX本身就有,不需要來修改他,因為修該Message會對其他控件有影響,關(guān)鍵是在于他本身是否可以接受焦點。 上面代碼D7沒有問題。LISTBOX空間可以換成其他能接受焦點的控件來代替,但不要用EDIT控件,因為EDIT控件在接受焦點后有光標(biāo)顯示。 |
|
|