Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview Viewstyle zur Laufzeit in List ändern (https://www.delphipraxis.net/148103-listview-viewstyle-zur-laufzeit-list-aendern.html)

virus82 22. Feb 2010 20:47


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:
ListView1.Update;
ListView1.Refresh;
ListView1.Repaint;
ListView1.Arrange(arDefault);
ListView1.Arrange(arSnapToGrid);
ListView1.Realign;
Leider ohne Erfolg. Irgendwie muß man die Listview doch so aktualisieren können das es richtig angezeigt wird.

Jemand ne Idee?

uligerhardt 22. Feb 2010 21:21

Re: Listview Viewstyle zur Laufzeit in List ändern
 
Als Notbehelf könntest du die Größe ja im Code ändern:
Delphi-Quellcode:
ListView1.Width := ListView1.Width + 1; // Aktualisierung erzwingen (hoffentlich)
ListView1.Width := ListView1.Width - 1; // alte Größe wiederherstellen
Ungetestet und -elegant. :mrgreen:

virus82 22. Feb 2010 22:30

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:

Luckie 22. Feb 2010 22:42

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;

virus82 22. Feb 2010 22:49

Re: Listview Viewstyle zur Laufzeit in List ändern
 
Danke, funktioniert super. :-D

Hätte ich auch selbst draufkommen können. Hab ja

Delphi-Quellcode:
ListView_SetView(hLV, LV_VIEW_TILE)
benutzt um den Tile View Modus zu aktivieren. Manchmal sieht man den Wald vor lauter bäumen nicht. :mrgreen:

Danke an alle Denker zur späten Stunde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz