![]() |
Falsche werte beim scrollen im ListView
Subclassed Win32 Api ListView.
Beim Scrollen werden mehr Zeilen gescrollt als übergeben werden.
Delphi-Quellcode:
var
sci: SCROLLINFO;
Delphi-Quellcode:
WM_MOUSEWHEEL nach unten immer den angegebenen wert 1 , nach oben 2 Zeilen (Seltsam).
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_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 |
AW: Falsche werte beim scrollen im ListView
Heheheh Tote Hose hier ;)
Wieder Selbstunterhalter. gruss |
AW: Falsche werte beim scrollen im ListView
Man kann in dem Systemeinstellungen einstellen, wie die Maus scrollen soll. Wird das da eventuell überschrieben?
|
AW: Falsche werte beim scrollen im ListView
Zitat:
Da ist eingestellt für eine Zeile und Scrollt 3 wenn ich es einstelle. Da muss ich mal schaun wie ich an die Systemeinstellungen dran komme um das korrekt Codemäßig zu händeln. Seltsamer weise scrollt die mit dem Wheel runter 1 zeile und hoch 2. Mein Hauptproblem ist die Scrollbar Standard vom ListView das Teil macht was es will die Positionen sind falsch. Funktioniert beim MouseWheel.
Delphi-Quellcode:
Das umgesetzt auf die Scrollbar ist alles falsch.
TopIndex := ListView_GetTopIndex(WinHandle);
SetTopItem(WinHandle, TopIndex + direction);
Delphi-Quellcode:
case wp of
SB_LINEUP: SetTopItem(WinHandle, sci.nPos - 1); SB_LINEDOWN: SetTopItem(WinHandle, sci.nPos + 1); end;
Delphi-Quellcode:
function TSkinListView.SetTopItem(hwndLV: hWnd; nItem: Integer): Integer;
var lvItemsPerPage: Integer; lvTopIndex: Integer; lvItemCount: Integer; begin lvTopIndex := ListView_GetTopIndex(hwndLV) + 1; lvItemsPerPage := ListView_GetCountPerPage(hwndLV); lvItemCount := ListView_GetItemCount(hwndLV); if lvTopIndex > nItem then begin ListView_EnsureVisible(hwndLV, nItem + 1, False); OldSelected := nItem + 1; end else if (nItem - lvTopIndex) >= lvItemsPerPage then begin if (nItem + lvItemsPerPage) > lvItemCount then begin ListView_EnsureVisible(hwndLV, lvItemCount, False); OldSelected := lvItemCount; end else begin ListView_EnsureVisible(hwndLV, (nItem + lvItemsPerPage) - 1, False); OldSelected := (nItem + lvItemsPerPage) - 1; end; end; Hmmmm.... gruss |
AW: Falsche werte beim scrollen im ListView
Hat sich erledigt.
Das Problem war das ich H/VScroll behandelt habe. Gebe jetzt in der Winproc Result 0 zurück und gut ist. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz