我有一個TScrollBox
在TFrame
裏面,當我使用鼠標滾輪時,它不會向上或向下滾動滾動。我該如何解決TScrollBar MouseWheel故障?
我曾嘗試使用
TScrollBox(Sender).Perform(WM_VSCROLL,1,0);
在
FrameMouseWheelDown
,但它不會觸發。
任何想法?
我有一個TScrollBox
在TFrame
裏面,當我使用鼠標滾輪時,它不會向上或向下滾動滾動。我該如何解決TScrollBar MouseWheel故障?
我曾嘗試使用
TScrollBox(Sender).Perform(WM_VSCROLL,1,0);
在
FrameMouseWheelDown
,但它不會觸發。
任何想法?
我的滾動框看起來是這樣的:
type
TMyScrollBox = class(TScrollBox)
protected
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
procedure WndProc(var Message: TMessage); override;
end;
function TMyScrollBox.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean;
begin
Result := inherited DoMouseWheel(Shift, WheelDelta, MousePos);
if not Result then begin
if Shift*[ssShift..ssCtrl]=[] then begin
VertScrollBar.Position := VertScrollBar.Position - WheelDelta;
Result := True;
end;
end;
end;
procedure TMyScrollBox.WndProc(var Message: TMessage);
begin
if Message.Msg=WM_MOUSEHWHEEL then begin
(* For some reason using a message handler for WM_MOUSEHWHEEL doesn't work. The messages
don't always arrive. It seems to occur when both scroll bars are active. Strangely,
if we handle the message here, then the messages all get through. Go figure! *)
if TWMMouseWheel(Message).Keys=0 then begin
HorzScrollBar.Position := HorzScrollBar.Position + TWMMouseWheel(Message).WheelDelta;
Message.Result := 0;
end else begin
Message.Result := 1;
end;
end else begin
inherited;
end;
end;
可以使用OnMouseWheel
事件處理程序:
ScrollBar1.OnMouseWheel := ScrollBoxMouseWheel;
...
procedure TFrame1.ScrollBoxMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
if WheelDelta < 0 then
TScrollBox(Sender).VertScrollBar.Position := TScrollBox(Sender).VertScrollBar.Position + TScrollBox(Sender).VertScrollBar.Increment
else
TScrollBox(Sender).VertScrollBar.Position := TScrollBox(Sender).VertScrollBar.Position - TScrollBox(Sender).VertScrollBar.Increment;
end;
大衛,不應該滾動框(孩子)接受'CM_MOUSEWHEEL'而不是'WM_MOUSEHWHEEL'(只是猜測,手頭沒有德爾福)? – TLama
@TLama爲什麼你覺得它應該是不同的? –
是不是'CM_MOUSEWHEEL <> WM_MOUSEHWHEEL'? – TLama