Einzelnen Beitrag anzeigen

Benutzerbild von Cypheros
Cypheros

Registriert seit: 12. Sep 2024
Ort: Büren
49 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Umleiten von Mousewheel events funktioniert mit TStringGrid nicht

  Alt 9. Sep 2025, 18:33
So wird das glaube ich bei VirtualTreeView gemacht.

Delphi-Quellcode:
procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;

...

procedure TmyListView.CMMouseWheel(var Message: TCMMouseWheel);

var
  ScrollAmount: Integer;
  ScrollLines: DWORD;
  RTLFactor: Integer;
  WheelFactor: Double;
begin
  inherited;

  if Message.Result = 0 then
  begin
    with Message do
    begin
      Result := 1;
      WheelFactor := WheelDelta / WHEEL_DELTA;
      if (FRangeY > ClientHeight) and (not (ssShift in ShiftState)) then
      begin
        // Scroll vertically if there's something to scroll...
        if ssCtrl in ShiftState then
          ScrollAmount := Trunc(WheelFactor * ClientHeight)
        else
        begin
          SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @ScrollLines, 0);
          if ScrollLines = WHEEL_PAGESCROLL then
            ScrollAmount := Trunc(WheelFactor * ClientHeight)
          else
            ScrollAmount := Integer(Trunc(WheelFactor * ScrollLines * FRowHeight / 10));
        end;
        SetOffsetY(FOffsetY + ScrollAmount);

        UpdateVerticalScrollBar(True);
      end
      else
      begin
        // ...else scroll horizontally if there's something to scroll.
        if UseRightToLeftAlignment then
          RTLFactor := -1
        else
          RTLFactor := 1;

        if ssCtrl in ShiftState then
          ScrollAmount := Trunc(WheelFactor * (ClientWidth {- FHeader.Columns.GetVisibleFixedWidth}))
        else
        begin
          SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @ScrollLines, 0);
          if ScrollLines = WHEEL_PAGESCROLL then
            ScrollAmount := Trunc(WheelFactor * (ClientWidth {- FHeader.Columns.GetVisibleFixedWidth}))
          else
            ScrollAmount := Trunc(WheelFactor * ScrollLines * FColWidth / 10{FHeader.Columns.GetScrollWidth});
        end;
        SetOffsetX(FOffsetX + RTLFactor * ScrollAmount);
      end;
    end;

  end;

end;
Frank Siek
  Mit Zitat antworten Zitat