Hallo, dieser Beitrag ist zwar schon sehr alt, nur als generische Lösung habe ich noch eine Änderung.
Statt das Ereignis in der Form auszuwerten und für jedes
TCategoryPanelGroup einzeln anzusteuern, kann die Prüfung auch im Ereignis der Komponente selbst erfolgen. Wichtig ist, dass das Form-Ereignis trotzdem Priorität gegenüber diesem hier hat.
Delphi-Quellcode:
procedure TForm1.CategoryPanelGroup1MouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
var
i: Integer;
DummyComponent: TComponent;
begin
DummyComponent := Sender as TComponent;
if DummyComponent is TCategoryPanelGroup then
begin
Handled := PtInRect((DummyComponent as TCategoryPanelGroup).ClientRect,
(DummyComponent as TCategoryPanelGroup).ScreenToClient(MousePos));
if Handled then
begin
for i := 1 to Mouse.WheelScrollLines do
try
if WheelDelta > 0 then
(DummyComponent as TCategoryPanelGroup)
.Perform(WM_VSCROLL, SB_LINEUP, 0)
else
(DummyComponent as TCategoryPanelGroup)
.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
finally
(DummyComponent as TCategoryPanelGroup).Perform(WM_VSCROLL,
SB_ENDSCROLL, 0);
end;
end;
end;
end;
Hierbei könnte m.M.n sogar die Prüfung des Mauszeigers weggelassen werden, da es sich ja um das gewünschte Objekt handelt (
if DummyComponent is TCategoryPanelGroup then )
Delphi-Quellcode:
Handled := PtInRect((DummyComponent as TCategoryPanelGroup).ClientRect,
(DummyComponent as TCategoryPanelGroup).ScreenToClient(MousePos));
LG Mathias