Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Probleme mit dem ListView (https://www.delphipraxis.net/196502-probleme-mit-dem-listview.html)

EWeiss 27. Mai 2018 09:45

AW: Probleme mit dem ListView
 
Zitat:

Hmmm, da weiß ich gerade keine passende Antwort nur anzumerken das es beim TE und mir mit nil funktioniert, auch mit "" so ist es ja nicht (zumindest bei mir).
Deshalb ja! Für die ungläubigen.

gruss

MicMic 27. Mai 2018 14:13

AW: Probleme mit dem ListView
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403074)
Ich habe hier noch etwas gefunden, die Quelle weiß ich leider nicht mehr.
[DELPHI]unit ThemesApp;

interface


procedure EnableThemesApp;
procedure DisableThemesApp;

...

Unit einbinden, wo auch immer, wann auch immer EnableThemesApp bzw DisableThemesApp aufrufen.

Danke für die Mühe zum raussuchen. Möchte jedoch ein Theme nicht komplett ausschalten. Ich hab auch viel rumprobiert. Im Grunde geht meine ListView aber dieses SmoothScrolling ist bei vielen Einträgen etwas störend. Die lässt sich nicht so einfach für das einzelne Control ausschalten. Habe aber mal die Laufzeit-Theme Geschichte deaktiviert. Dann ist SmoothScrolling aus und dennoch ist der Grafikaufbau etwas langsam im Gegensatz zu einer ListBox. Die habe ich dann mal eben getestet. Eine Listbox kann man zum Glück auch mit "OnDrawItem" anpassen. Es geht jedenfalls um eine Verzeichnis und Dateiliste im Stil vom Total-Commander. Angefangen hatte ich mit TStringGrid. Ein paar Dinge waren dann etwas kompliziert umzusetzen. Danach dann TListView und nun probiere ich mich dann mal an einer TListBox :)

Michael

KodeZwerg 27. Mai 2018 14:18

AW: Probleme mit dem ListView
 
Hey Emil, nur mal rein um meine Neugier zu befriedigen, könntest Du mal in Deinem Source eine Sache bitte ausprobieren?
Ersetze mal bitte die "" mit nil und gebe als Handle Dein Window-Handle an, also das vom Programm nicht vom Tooltip.
Ist Dein Tooltip dann gefärbt oder Windows-Grau?

KodeZwerg 27. Mai 2018 14:31

AW: Probleme mit dem ListView
 
Zitat:

Zitat von MicMic (Beitrag 1403094)
Danach dann TListView und nun probiere ich mich dann mal an einer TListBox

Meine Empfehlung, ShellListView! Damit hast Du lediglich beim Icon laden eine leichte Verzögerung exakt wie beim TC.
Selber nachbasteln endet idR bei einem langsameren Ergebis.

KodeZwerg 27. Mai 2018 14:59

AW: Probleme mit dem ListView
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ist ein Beispiel Projekt zu ShellListView geschrieben von Dave Murray.
Ich habs lediglich an Delphi 7 angepasst und ein Kompilat erstellt damit Du weiß worum es sich handelt.
Ps: Source liegt auch bei.

EWeiss 27. Mai 2018 15:19

AW: Probleme mit dem ListView
 
Zitat:

Hey Emil, nur mal rein um meine Neugier zu befriedigen, könntest Du mal in Deinem Source eine Sache bitte ausprobieren?
Ersetze mal bitte die "" mit nil und gebe als Handle Dein Window-Handle an, also das vom Programm nicht vom Tooltip.
Ist Dein Tooltip dann gefärbt oder Windows-Grau?
Zitat:

Windows-Grau?
Grau ist mein ToolTip und Weiß die theme von Window :)

Kein Chance ;)
Ich will den TollTip deaktivieren nicht die komplette Anwendung.

Aber ist erledigt das Thema für mich.
Macht was ihr für richtig haltet.

gruss

KodeZwerg 27. Mai 2018 18:27

AW: Probleme mit dem ListView
 
Zitat:

Zitat von EWeiss (Beitrag 1403100)
Kein Chance ;)

Danke fürs testen, da weiß ich ja nu Bescheid:zwinker:

MicMic 28. Mai 2018 19:10

AW: Probleme mit dem ListView
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403096)
Zitat:

Zitat von MicMic (Beitrag 1403094)
Danach dann TListView und nun probiere ich mich dann mal an einer TListBox

Meine Empfehlung, ShellListView! Damit hast Du lediglich beim Icon laden eine leichte Verzögerung exakt wie beim TC.
Selber nachbasteln endet idR bei einem langsameren Ergebis.

Danke für die Info. Noch bin ich an der TListBox und es schaut noch gut aus. :)
Zwar ein kleines Problem mit dem Fokusrahmen aber hier kann man tricksen. Eine Möglichkeit die Komponente zu überschreiben, damit der Rahmen erst gar nicht gezeichnet wird, habe ich nicht gefunden. Mit "DrawFocusRect" kann man wenigstens was machen. Aber "ShellListView" kommt mal auf mein Notiz-Zettel. Vielen Dank

Michael

KodeZwerg 28. Mai 2018 20:09

AW: Probleme mit dem ListView
 
Hallo Michael, ja tobe Dich mal mit der ListBox aus. FindFirst, FindNext und FindClose ist ein sehr sehr langsames Mittel.
Ich bin gespannt wie dein Resultat endet.
Nach wie vor kannst Du Dir ja mal das ShellTreeView Demo von weiter oben anschauen und feststellen das es im Vergleich zum manuellen durchforsten eines Verzeichnisses ein gewaltiges plus an Geschwindigkeit gibt.
Zur Demonstration als Vergleich empfehle ich das Windows/System32 Verzeichnis laden zu lassen.

Hier hab ich ein Quelltext-Schnippsel von stackoverflow für die ListBox Variante.
Delphi-Quellcode:
var
  Form1: TForm1;
  FilePath: TStringList;

implementation

{$R *.dfm}

procedure FindFiles(FilesList: TStrings; FilesPath: TStrings;
  StartDir, FileMask: string);
var
  SR: TSearchRec;
  DirList: TStringList;
  IsFound: Boolean;
  i: integer;
begin
  if StartDir[length(StartDir)] <> '\' then
    StartDir := StartDir + '\';

  IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
  while IsFound do
  begin
    FilesPath.Add(StartDir + SR.Name);
    FilesList.Add(SR.Name);
    IsFound := FindNext(SR) = 0;
  end;
  FindClose(SR);

  DirList := TStringList.Create;
  IsFound := FindFirst(StartDir + '*.*', faAnyFile, SR) = 0;
  while IsFound do
  begin
    if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
      DirList.Add(StartDir + SR.Name);
    IsFound := FindNext(SR) = 0;
  end;
  FindClose(SR);

  for i := 0 to DirList.Count - 1 do
    FindFiles(FilesList, FilePath, DirList[i], FileMask);

  DirList.Free;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FilePath.Free;
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
  FilePath := TStringList.Create;
  FindFiles(sListBox1.Items, FilePath, EditStartDir.Text, '*.*');
  {FilePath is where full file path saved, EditStartDir is where to search}
end;

procedure TForm1.sListBox1Click(Sender: TObject);
begin
If sListBox1.ItemIndex > -1 then
  sEdit2.Text := FilePath.Strings[sListBox1.ItemIndex];
end;

end.
Eine weitaus schnellere ListBox Methode wäre es so zu machen
Delphi-Quellcode:
var s: string;
begin
  s := 'c:\windows\*.*'#0;
  ListBox1.Perform(LB_DIR, DDL_READWRITE, LongInt(@s[1]));
end;
Viel Spass beim experimentieren!

MicMic 1. Jun 2018 11:44

AW: Probleme mit dem ListView
 
Also mit der ListBox schaut es gut aus und ja, das "System32" Verzeichnis nehme ich auch immer. :)
Das ShellListView Demo habe ich mir angeschaut aber es ist recht vollgepackt. So viel schneller ist es auch nicht. Derzeit ist meines schneller aber ich bin ja auch noch nicht ganz fertig. Das mit FindFirst/FindNext geht bei mir auch etwas anders. Ich lade das Verzeichnis mit weiteren Infos in ein Record rein. In der Listbox hole ich mir dann im DrawItem Abschnitt die Infos, die ich benötige.

Habe mich auch mal mit einem TThread probiert, um Icons im Hintergrund nachzuladen. Wäre das der richtige Weg? Das klappte aber noch nicht so ganz. Jetzt räume ich erst mal wieder das Listing auf. Das mache ich immer so. Erst ein wenig programmieren und wenn was geht, dann wird im Listing aufgeräumt, formatiert und kommentiert. Sonst verliert man den Durchblick :)

Aber der Total-Commander ist schon recht schnell. Eine Meisterarbeit :)

Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.
Seite 2 von 2     12   

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