AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit dem ListView

Ein Thema von MicMic · begonnen am 26. Mai 2018 · letzter Beitrag vom 1. Jun 2018
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Probleme mit dem ListView

  Alt 26. Mai 2018, 16:35
Hallo,

ich zeichne bei meinem ListView die Einträge selbst (OnCustomDrawItem). Nutze es im "vsList" Modus.
Für meinem Zweck stelle ich mir die Breite für die Einträge entsprechend ein und schalte das HotTracking aus.

SetWindowTheme(Listview.Handle, '', nil);
ListView_SetColumnWidth(Listview.Handle,0,500);

Mit SetWindowTheme schalte ich das HotTracking aus, denn die Eigenschaft "HotTrack" auf "False" zu setzen, hilft nicht. Mit "ListView_SetColumnWidth" stelle ich mir die Breite für den Inhalt ein.
Das Problem ist jedoch, wenn ich in der Laufzeit die Anzeigeneinstellung von Windows 10 ändere (also die Schriftgröße ändere), dass meine ListView das HotTracking wieder anschaltet und die Breite ebenfalls wieder auf Standard (hier wohl AutoSize) gesetzt wird. Also überlegte ich mir, dass ich die "WM_DPICHANGED" abfange und die beiden Befehle einfach wieder ausführe. Aber das geht dort nicht. Die beiden Befehle in einem Button.OnClick auszuführen, funktioniert aber problemlos. Irgendwie scheint "WM_DPICHANGED" zu früh zu sein.

Hat jemand vielleicht eine Idee, wie man die o.g. Befehle so anwendet, dass diese auch immer funktionieren?

Gruß Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Probleme mit dem ListView

  Alt 26. Mai 2018, 16:50
Willkommen in DP!
Hast Du SetProcessDpiAwareness für Deine Applikation aktiviert? Sonst gibt es kein Ereignis.
WM_DPICHANGED schau da mal unter Remarks.
Gruß vom KodeZwerg

Geändert von KodeZwerg (26. Mai 2018 um 16:56 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Probleme mit dem ListView

  Alt 26. Mai 2018, 18:36
Willkommen in DP!
Hast Du SetProcessDpiAwareness für Deine Applikation aktiviert? Sonst gibt es kein Ereignis.
WM_DPICHANGED schau da mal unter Remarks.

WM_DPICHANGED wird empfangen aber habe nichts mit "SetProcessDpiAwareness" gemacht.
Habe einfach "Procedure WMDpiChanged(var Message: TMessage); Message WM_DPICHANGED;" genommen aber ich lese mich mal bezüglich "SetProcessDpiAwareness" durch. Danke für die Info.

Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Probleme mit dem ListView

  Alt 26. Mai 2018, 19:11
Delphi-Quellcode:
type
  TListView = class(Vcl.ComCtrls.TListView)
  protected
    procedure CreateWnd; OVERRIDE;
  end;

procedure TListView.CreateWnd;
begin
  inherited; // <- super wichtig!
  SetWindowTheme(Form/Window-Handle, nil, nil);
// oder direkter
  SetWindowTheme(Form/Window-Handle, 'explorer', '');
end;
So klappt es bei mir. Problem gelöst?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Probleme mit dem ListView

  Alt 26. Mai 2018, 19:37
SetWindowTheme(Listview.Handle, '', nil);
Es könnte auch sein das es bereits funktionieren würde wenn Du aus Listview.Handle ein Form/Application/Window-Handle machst.
*ungetestet*
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Probleme mit dem ListView

  Alt 26. Mai 2018, 20:43
Das mit dem "CreateWnd" hatte ich mal probiert, aber es hatte nicht funktioniert.
Jetzt geht es aber damit. Versuche die Fehlerquelle gerade herauszubekommen aber es geht jetzt irgendwie immer. Auch die eingestellte Breite passt sich automatisch an, wie gewünscht. Zwar etwas langsam nach einer Änderung der Schriftgröße in den Anzeigeeinstellungen aber besser als wenn es gar nicht geht Also mal Danke. Hoffe es bleibt auch so. Listview ist so ein Thema. Auch "LVS_EX_INFOTIP" musste ich abstellen, da manchmal ein ToolTip außerhalb meiner Anwendung (Bildschirmposition X=0,Y=0) angezeigt wurde.

Bei mir schaut es jetzt so aus:
Code:
Type
  TListView = Class(Vcl.ComCtrls.TListView)
    Protected
      Procedure CreateWnd; Override;
  End;

Procedure DisableLVToolTips(H : THandle);
Var Styles : DWord;
Begin
 Styles := ListView_GetExtendedListViewStyle(H);
 Styles := Styles And Not LVS_EX_INFOTIP;
 ListView_SetExtendedListViewStyle(H, Styles);
End;

procedure TListView.CreateWnd;
begin
 Inherited;
 SetWindowTheme(WindowHandle, Nil, Nil);
 ListView_SetColumnWidth(WindowHandle,0,500);
 DisableLVToolTips(WindowHandle);
end;
Gruß Michael
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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