Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Falsche werte beim scrollen im ListView

  Alt 14. Jan 2017, 10:00
Subclassed Win32 Api ListView.
Beim Scrollen werden mehr Zeilen gescrollt als übergeben werden.

Delphi-Quellcode:
var
  sci: SCROLLINFO;
Delphi-Quellcode:
    WM_MOUSEWHEEL:
      begin
        If wP > 0 Then
          direction := -1
        else
          direction := 1;

        SendMessageW(WinHandle, WM_SETREDRAW, Integer(False), 0);
        if ListView_GetItemCount(WinHandle) > 0 then
        begin
          if ((ListView_GetTopIndex(WinHandle)) = 1) and (direction = -1) then
          begin
            SetTopItem(WinHandle, 1);
            Result := 1;
            exit;
          end;
          TopIndex := ListView_GetTopIndex(WinHandle);
          SetTopItem(WinHandle, TopIndex + direction);
        end;
      end;

    WM_VSCROLL:
      begin
        sci.cbSize := SizeOf(SCROLLINFO);
        sci.fMask := SIF_ALL;
        GetScrollInfo(WinHandle, integer(SCR_STYLE.SB_VERT), sci);

        case wp of
          SB_LINEUP:
            SetScrollPos(WinHandle, integer(SCR_STYLE.SB_VERT), sci.nPos - 1, False);
          SB_LINEDOWN:
            SetScrollPos(WinHandle, integer(SCR_STYLE.SB_VERT), sci.nPos + 1, False);
        end;
      end;
WM_MOUSEWHEEL nach unten immer den angegebenen wert 1 , nach oben 2 Zeilen (Seltsam).
WM_VSCROLL scrollt immer 4 Zeilen warum ? wenn ich doch explizit 1 übergebe.

Wüsste jetzt nicht das Codemäßig irgend etwas falsch ist.
Es sieht so aus als wenn die Behandlung von WM_VSCROLL überhaupt keine Auswirkung auf das ListView hat.
Es werden immer 4 Zeilen gescrollt ob mit oder ohne.
Was nun?

gruss

Geändert von EWeiss (14. Jan 2017 um 10:23 Uhr)
  Mit Zitat antworten Zitat