Subclassed
Win32 Api ListView.
Beim Scrollen werden mehr Zeilen gescrollt als übergeben werden.
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