![]() |
Listview Viewstyle zur Laufzeit in List ändern
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Leute,
heute hab ich etwas sonderbares bemerkt und weiß mir einfach nicht zu helfen. Ich habe eine Listview mit 21 Items und Viewstyle vsIcon erstellt (siehe Bild 1). Jetzt ändere ich den Viewstyle auf vsList und die Anzeige wechselt. Jetzt aber das Problem. Es kommt keine Bildlaufleiste und die Items sind falsch angeordnet (Bild 2). Erst wenn ich die Größe der Listview ändere wird sie so angezeigt wie es sin sollte (Bild 3). Ich hab schon alles mögliche versucht:
Delphi-Quellcode:
Leider ohne Erfolg. Irgendwie muß man die Listview doch so aktualisieren können das es richtig angezeigt wird.
ListView1.Update;
ListView1.Refresh; ListView1.Repaint; ListView1.Arrange(arDefault); ListView1.Arrange(arSnapToGrid); ListView1.Realign; Jemand ne Idee? |
Re: Listview Viewstyle zur Laufzeit in List ändern
Als Notbehelf könntest du die Größe ja im Code ändern:
Delphi-Quellcode:
Ungetestet und -elegant. :mrgreen:
ListView1.Width := ListView1.Width + 1; // Aktualisierung erzwingen (hoffentlich)
ListView1.Width := ListView1.Width - 1; // alte Größe wiederherstellen |
Re: Listview Viewstyle zur Laufzeit in List ändern
genau das hab ich auch schon probiert. Funktioniert auch.
Aber vlt kenn ja jemand ne bessere Lösung. Muß ja irgendwie gehen, weil der Windows Explorer kann es ja auch. Dachte schon an irgendeine SendMessage oder so. Aber danke trotzdem, so hab ich es bisher gemacht, ist halt nicht so elegant. :mrgreen: |
Re: Listview Viewstyle zur Laufzeit in List ändern
Probier mal das:
Delphi-Quellcode:
procedure SetView(const hLV: HWND; dwView: dword);
var dwStyle : dword; begin // unter Win XP wird ein neuer Befehl benutzt, // mit dem sich u.a. auch der Tile-View (Kacheln) // einschalten lässt if (IsWindowsXP) or (IsWindowsVista) then begin case dwView of LVS_ICON: ListView_SetView(hLV,LV_VIEW_ICON); LVS_SMALLICON: ListView_SetView(hLV,LV_VIEW_SMALLICON); LVS_LIST: ListView_SetView(hLV,LV_VIEW_LIST); LVS_REPORT: ListView_SetView(hLV,LV_VIEW_DETAILS); 666: ListView_SetView(hLV,LV_VIEW_TILE); end; // kein Win XP -> dann den bekannten Weg anhand // des Codes, der vom PSDK nach Delphi umgesetzt // wurde end else begin dwStyle := GetWindowLong(hLV,GWL_STYLE); if(dwStyle and LVS_TYPEMASK <> dwView) then SetWindowLong(hLV,GWL_STYLE, (dwStyle and not LVS_TYPEMASK) or dwView); end; end; |
Re: Listview Viewstyle zur Laufzeit in List ändern
Danke, funktioniert super. :-D
Hätte ich auch selbst draufkommen können. Hab ja
Delphi-Quellcode:
benutzt um den Tile View Modus zu aktivieren. Manchmal sieht man den Wald vor lauter bäumen nicht. :mrgreen:
ListView_SetView(hLV, LV_VIEW_TILE)
Danke an alle Denker zur späten Stunde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 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 by Thomas Breitkreuz