<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ListView Geschwindigkeit]]></title><description><![CDATA[<p>Hallo...</p>
<p>ich möchte mit folgendem Code eine Dateiliste erstellen. Leider dauert das Einlesen ziehmlich lange. Hat jemand einige Tipps, wo die Geschwindigkeit verlohren geht, und wieso die Listview so oft neu gezeichnet wird ?</p>
<pre><code class="language-cpp">void __fastcall TForm1::OrdnerEinlesen()
{
TListItem *MeinLinkesItem;
TStringList *TempList = new TStringList;

SHFILEINFO FileInfo;
BY_HANDLE_FILE_INFORMATION lpFileInfo;

TIcon *MyIcon = new TIcon();
WORD wTemp;

AnsiString MyAttribut = &quot;&quot;;

int attrnr = 0;
TSearchRec sr;
int iAttributes = faAnyFile;

SYSTEMTIME sysTime;
FILETIME filetime;

TDateTime dtFileCreated;  // enthält Erstellungsdatum
//TDateTime dtFileLastModified;  // enthält Datum der letzten Änderung

AnsiString DateiName;
DWORD DWattrnr;

AnsiString StringListString;

  if (FindFirst(VerzeichnisUndErweiterung, iAttributes, sr) == 0)
  {
    do
    {   attrnr = sr.Attr;
        if (BOOL(attrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
        {
        DateiName = ExtractFileName(sr.Name);
        StringListString = DateiName;

        TempList-&gt;Add(StringListString);
        }
    }

    while (FindNext(sr) == 0);
    FindClose(sr);
  }

  if(TempList-&gt;Count != 0)
  {
   //TempList-&gt;Sort();

   int LoeschIndex = TempList-&gt;IndexOf(&quot;.&quot;);
   if(LoeschIndex != -1)
  {
   TempList-&gt;Delete(LoeschIndex);
  }

 LoeschIndex = TempList-&gt;IndexOf(&quot;..&quot;);
 if(LoeschIndex != -1)
 {
  TempList-&gt;Delete(LoeschIndex);
 }

 VerzeichnisZaehler = TempList-&gt;Count;

 int DateiNameZaehler = 0;

 if(UnterVerzeichnis == true)
 {
  MeinLinkesItem = Form1-&gt;ListView1-&gt;Items-&gt;Add();
  MeinLinkesItem-&gt;Caption = &quot;..&quot;;
  MeinLinkesItem-&gt;ImageIndex = 3;
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&quot;);
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&lt;DIR&gt;&quot;);
  MeinLinkesItem-&gt;SubItems-&gt;Add(UnterVerzeichnisDatum);
  MeinLinkesItem-&gt;SubItems-&gt;Add(UnterVerzeichnisAttribut);
  Form1-&gt;ListView1-&gt;Update();
 }

  for(DateiNameZaehler; DateiNameZaehler&lt; TempList-&gt;Count; DateiNameZaehler++)
  {
   //SendMessage(ListView1-&gt;Handle, WM_SETREDRAW, FALSE, 0); //Neuzeichnen
                                                            //deaktivieren
  DateiPfad = VerzeichnisPfad;
  AppendStr(DateiPfad,TempList-&gt;Strings[DateiNameZaehler]);
//---------------------------------------------------------------------------
  ///////////////////////
 //Start Icon auslesen//
///////////////////////

SHGetFileInfo(DateiPfad.c_str(),0,&amp;FileInfo,sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON);
MyIcon-&gt;Handle = FileInfo.hIcon;
Form1-&gt;ImageList3-&gt;AddIcon(MyIcon);

/*
    ///////////////////////////
   //Icon in Image1 anzeigen//
  //////////////////////////
  Form1-&gt;Width+=8;
  TImage *NeuesImage = new TImage(this);
  NeuesImage-&gt;Parent = Form1;
  NeuesImage-&gt;Top = 256;
  NeuesImage-&gt;Left = 380;
  NeuesImage-&gt;Width = 20;
  NeuesImage-&gt;Height = 20;

  TIcon *Icon = new TIcon;
  Icon-&gt;Handle=CopyIcon(FileInfo.hIcon);
  NeuesImage-&gt;AutoSize=true;
  NeuesImage-&gt;Stretch=false;
  NeuesImage-&gt;Picture-&gt;Assign(Icon);
  delete Icon;
    ////////////////////////////////
   //Ende Icon in Image1 anzeigen//
  ////////////////////////////////
*/
  //////////////////////
 //Ende Icon auslesen//
//////////////////////
//---------------------------------------------------------------------------
//DateiErweiterung = ExtractFileExt(DateiPfad);
//---------------------------------------------------------------------------
DateiName = ExtractFileName(DateiPfad);
//DateiName = StringReplace(DateiName,DateiErweiterung,&quot;&quot;,TReplaceFlags() &lt;&lt; rfIgnoreCase);
//////////////////////////////////////////////////////////
//Ordner-Erweiterung in der Spalte Erweiterung anzeigen//
////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
FindFirst(DateiPfad, iAttributes, sr);
FindClose(sr);
//---------------------------------------------------------------------------
//AnsiString DateiGroesse2 = FormatFloat(&quot;#,###&quot;,lpFileInfo.nFileSizeLow);
//---------------------------------------------------------------------------
/*
SYSTEMTIME sysTime;
FILETIME filetime;

FileTimeToLocalFileTime(&amp;lpFileInfo.ftLastAccessTime, &amp;filetime);
FileTimeToSystemTime(&amp;filetime, &amp;sysTime);
SystemTimeToDateTime(sysTime);

AnsiString DateiZeit = FormatFloat(&quot;00&quot;,sysTime.wDay);
AppendStr(DateiZeit,&quot;.&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wMonth));
AppendStr(DateiZeit,&quot;.&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;####&quot;,sysTime.wYear));
AppendStr(DateiZeit,&quot; &quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wHour));
AppendStr(DateiZeit,&quot;:&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wMinute));
AppendStr(DateiZeit,&quot;:&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wSecond));
AppendStr(DateiZeit,&quot;:&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;000&quot;,sysTime.wMilliseconds));
*/
//---------------------------------------------------------------------------
//------------Beispiel CPP.DE------------------------------------------------
//---------------------------------------------------------------------------
FileTimeToSystemTime(&amp;(sr.FindData.ftCreationTime), &amp;sysTime);
dtFileCreated = TDateTime(sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds)
     + TDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay);

      //FileTimeToSystemTime(&amp;(sr.FindData.ftLastWriteTime), &amp;sysTime);
     //dtFileLastModified = TDateTime(sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds)
    //+ TDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay);

DateiZeit = dtFileCreated;
//---------------------------------------------------------------------------
//------------Beispiel CPP.DE------------------------------------------------
//---------------------------------------------------------------------------
DWattrnr = sr.Attr;
//DWORD DWattrnr = GetFileAttributes(DateiPfad.c_str()); //Gibt bei Dateien, die
                                                        //in Verwendung sind
                                                       //keine Attribute aus!
MyAttribut = &quot;&quot;;
       if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
                {
       if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_READONLY))
                {
                AppendStr(MyAttribut,&quot;R&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }
        if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_ARCHIVE))
                {
                AppendStr(MyAttribut,&quot;A&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }

        if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_HIDDEN))
                {
                AppendStr(MyAttribut,&quot;H&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }

        if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_SYSTEM))
                {
                AppendStr(MyAttribut,&quot;S&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }
        }
//---------------------------------------------------------------------------
  MeinLinkesItem = Form1-&gt;ListView1-&gt;Items-&gt;Add();
  MeinLinkesItem-&gt;Caption = DateiName;
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&quot;);
  //if(DateiName.LowerCase() == &quot;$recycle.bin&quot; &amp;&amp; DateiErweiterung.LowerCase() == &quot;.bin&quot;)
  if(DateiName.LowerCase() == &quot;$recycle.bin&quot;)
  {
  MeinLinkesItem-&gt;ImageIndex = 0;
  }

  else
  {
  MeinLinkesItem-&gt;ImageIndex = Form1-&gt;ImageList3-&gt;Count-1;
  }
  //MeinLinkesItem-&gt;SubItems-&gt;Add(DateiErweiterung);
  //if (BOOL(attrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
  if (!BOOL(DWattrnr &amp; FILE_ATTRIBUTE_REPARSE_POINT))
  {
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&lt;DIR&gt;&quot;);
  }

  if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_REPARSE_POINT))
  {
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&lt;LINK&gt;&quot;);
  }
  MeinLinkesItem-&gt;SubItems-&gt;Add(DateiZeit);
  MeinLinkesItem-&gt;SubItems-&gt;Add(MyAttribut);
  Form1-&gt;ListView1-&gt;Update();
  //SendMessage(ListView1-&gt;Handle, WM_SETREDRAW, FALSE, 0); //Neuzeichnen
                                                           //deaktivieren
  //Form1-&gt;Caption = DateiPfad;
  }
        //delete MeinLinkesItem;
        delete TempList;
        delete MyIcon;
        //SendMessage(ListView1-&gt;Handle, WM_SETREDRAW, TRUE, 0); //Neuzeichnen
 }                                                              //aktivieren
}
//---------------------------------------------------------------------------
</code></pre>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209686/listview-geschwindigkeit</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 15:31:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209686.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Apr 2008 11:00:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ListView Geschwindigkeit on Wed, 02 Apr 2008 11:00:45 GMT]]></title><description><![CDATA[<p>Hallo...</p>
<p>ich möchte mit folgendem Code eine Dateiliste erstellen. Leider dauert das Einlesen ziehmlich lange. Hat jemand einige Tipps, wo die Geschwindigkeit verlohren geht, und wieso die Listview so oft neu gezeichnet wird ?</p>
<pre><code class="language-cpp">void __fastcall TForm1::OrdnerEinlesen()
{
TListItem *MeinLinkesItem;
TStringList *TempList = new TStringList;

SHFILEINFO FileInfo;
BY_HANDLE_FILE_INFORMATION lpFileInfo;

TIcon *MyIcon = new TIcon();
WORD wTemp;

AnsiString MyAttribut = &quot;&quot;;

int attrnr = 0;
TSearchRec sr;
int iAttributes = faAnyFile;

SYSTEMTIME sysTime;
FILETIME filetime;

TDateTime dtFileCreated;  // enthält Erstellungsdatum
//TDateTime dtFileLastModified;  // enthält Datum der letzten Änderung

AnsiString DateiName;
DWORD DWattrnr;

AnsiString StringListString;

  if (FindFirst(VerzeichnisUndErweiterung, iAttributes, sr) == 0)
  {
    do
    {   attrnr = sr.Attr;
        if (BOOL(attrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
        {
        DateiName = ExtractFileName(sr.Name);
        StringListString = DateiName;

        TempList-&gt;Add(StringListString);
        }
    }

    while (FindNext(sr) == 0);
    FindClose(sr);
  }

  if(TempList-&gt;Count != 0)
  {
   //TempList-&gt;Sort();

   int LoeschIndex = TempList-&gt;IndexOf(&quot;.&quot;);
   if(LoeschIndex != -1)
  {
   TempList-&gt;Delete(LoeschIndex);
  }

 LoeschIndex = TempList-&gt;IndexOf(&quot;..&quot;);
 if(LoeschIndex != -1)
 {
  TempList-&gt;Delete(LoeschIndex);
 }

 VerzeichnisZaehler = TempList-&gt;Count;

 int DateiNameZaehler = 0;

 if(UnterVerzeichnis == true)
 {
  MeinLinkesItem = Form1-&gt;ListView1-&gt;Items-&gt;Add();
  MeinLinkesItem-&gt;Caption = &quot;..&quot;;
  MeinLinkesItem-&gt;ImageIndex = 3;
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&quot;);
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&lt;DIR&gt;&quot;);
  MeinLinkesItem-&gt;SubItems-&gt;Add(UnterVerzeichnisDatum);
  MeinLinkesItem-&gt;SubItems-&gt;Add(UnterVerzeichnisAttribut);
  Form1-&gt;ListView1-&gt;Update();
 }

  for(DateiNameZaehler; DateiNameZaehler&lt; TempList-&gt;Count; DateiNameZaehler++)
  {
   //SendMessage(ListView1-&gt;Handle, WM_SETREDRAW, FALSE, 0); //Neuzeichnen
                                                            //deaktivieren
  DateiPfad = VerzeichnisPfad;
  AppendStr(DateiPfad,TempList-&gt;Strings[DateiNameZaehler]);
//---------------------------------------------------------------------------
  ///////////////////////
 //Start Icon auslesen//
///////////////////////

SHGetFileInfo(DateiPfad.c_str(),0,&amp;FileInfo,sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON);
MyIcon-&gt;Handle = FileInfo.hIcon;
Form1-&gt;ImageList3-&gt;AddIcon(MyIcon);

/*
    ///////////////////////////
   //Icon in Image1 anzeigen//
  //////////////////////////
  Form1-&gt;Width+=8;
  TImage *NeuesImage = new TImage(this);
  NeuesImage-&gt;Parent = Form1;
  NeuesImage-&gt;Top = 256;
  NeuesImage-&gt;Left = 380;
  NeuesImage-&gt;Width = 20;
  NeuesImage-&gt;Height = 20;

  TIcon *Icon = new TIcon;
  Icon-&gt;Handle=CopyIcon(FileInfo.hIcon);
  NeuesImage-&gt;AutoSize=true;
  NeuesImage-&gt;Stretch=false;
  NeuesImage-&gt;Picture-&gt;Assign(Icon);
  delete Icon;
    ////////////////////////////////
   //Ende Icon in Image1 anzeigen//
  ////////////////////////////////
*/
  //////////////////////
 //Ende Icon auslesen//
//////////////////////
//---------------------------------------------------------------------------
//DateiErweiterung = ExtractFileExt(DateiPfad);
//---------------------------------------------------------------------------
DateiName = ExtractFileName(DateiPfad);
//DateiName = StringReplace(DateiName,DateiErweiterung,&quot;&quot;,TReplaceFlags() &lt;&lt; rfIgnoreCase);
//////////////////////////////////////////////////////////
//Ordner-Erweiterung in der Spalte Erweiterung anzeigen//
////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
FindFirst(DateiPfad, iAttributes, sr);
FindClose(sr);
//---------------------------------------------------------------------------
//AnsiString DateiGroesse2 = FormatFloat(&quot;#,###&quot;,lpFileInfo.nFileSizeLow);
//---------------------------------------------------------------------------
/*
SYSTEMTIME sysTime;
FILETIME filetime;

FileTimeToLocalFileTime(&amp;lpFileInfo.ftLastAccessTime, &amp;filetime);
FileTimeToSystemTime(&amp;filetime, &amp;sysTime);
SystemTimeToDateTime(sysTime);

AnsiString DateiZeit = FormatFloat(&quot;00&quot;,sysTime.wDay);
AppendStr(DateiZeit,&quot;.&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wMonth));
AppendStr(DateiZeit,&quot;.&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;####&quot;,sysTime.wYear));
AppendStr(DateiZeit,&quot; &quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wHour));
AppendStr(DateiZeit,&quot;:&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wMinute));
AppendStr(DateiZeit,&quot;:&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;00&quot;,sysTime.wSecond));
AppendStr(DateiZeit,&quot;:&quot;);
AppendStr(DateiZeit,FormatFloat(&quot;000&quot;,sysTime.wMilliseconds));
*/
//---------------------------------------------------------------------------
//------------Beispiel CPP.DE------------------------------------------------
//---------------------------------------------------------------------------
FileTimeToSystemTime(&amp;(sr.FindData.ftCreationTime), &amp;sysTime);
dtFileCreated = TDateTime(sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds)
     + TDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay);

      //FileTimeToSystemTime(&amp;(sr.FindData.ftLastWriteTime), &amp;sysTime);
     //dtFileLastModified = TDateTime(sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds)
    //+ TDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay);

DateiZeit = dtFileCreated;
//---------------------------------------------------------------------------
//------------Beispiel CPP.DE------------------------------------------------
//---------------------------------------------------------------------------
DWattrnr = sr.Attr;
//DWORD DWattrnr = GetFileAttributes(DateiPfad.c_str()); //Gibt bei Dateien, die
                                                        //in Verwendung sind
                                                       //keine Attribute aus!
MyAttribut = &quot;&quot;;
       if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
                {
       if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_READONLY))
                {
                AppendStr(MyAttribut,&quot;R&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }
        if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_ARCHIVE))
                {
                AppendStr(MyAttribut,&quot;A&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }

        if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_HIDDEN))
                {
                AppendStr(MyAttribut,&quot;H&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }

        if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_SYSTEM))
                {
                AppendStr(MyAttribut,&quot;S&quot;);
                }
                else
                {
                AppendStr(MyAttribut,&quot;-&quot;);
                }
        }
//---------------------------------------------------------------------------
  MeinLinkesItem = Form1-&gt;ListView1-&gt;Items-&gt;Add();
  MeinLinkesItem-&gt;Caption = DateiName;
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&quot;);
  //if(DateiName.LowerCase() == &quot;$recycle.bin&quot; &amp;&amp; DateiErweiterung.LowerCase() == &quot;.bin&quot;)
  if(DateiName.LowerCase() == &quot;$recycle.bin&quot;)
  {
  MeinLinkesItem-&gt;ImageIndex = 0;
  }

  else
  {
  MeinLinkesItem-&gt;ImageIndex = Form1-&gt;ImageList3-&gt;Count-1;
  }
  //MeinLinkesItem-&gt;SubItems-&gt;Add(DateiErweiterung);
  //if (BOOL(attrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
  if (!BOOL(DWattrnr &amp; FILE_ATTRIBUTE_REPARSE_POINT))
  {
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&lt;DIR&gt;&quot;);
  }

  if (BOOL(DWattrnr &amp; FILE_ATTRIBUTE_REPARSE_POINT))
  {
  MeinLinkesItem-&gt;SubItems-&gt;Add(&quot;&lt;LINK&gt;&quot;);
  }
  MeinLinkesItem-&gt;SubItems-&gt;Add(DateiZeit);
  MeinLinkesItem-&gt;SubItems-&gt;Add(MyAttribut);
  Form1-&gt;ListView1-&gt;Update();
  //SendMessage(ListView1-&gt;Handle, WM_SETREDRAW, FALSE, 0); //Neuzeichnen
                                                           //deaktivieren
  //Form1-&gt;Caption = DateiPfad;
  }
        //delete MeinLinkesItem;
        delete TempList;
        delete MyIcon;
        //SendMessage(ListView1-&gt;Handle, WM_SETREDRAW, TRUE, 0); //Neuzeichnen
 }                                                              //aktivieren
}
//---------------------------------------------------------------------------
</code></pre>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485102</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Wed, 02 Apr 2008 11:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Wed, 02 Apr 2008 11:31:14 GMT]]></title><description><![CDATA[<ol>
<li>ListView-&gt;Items-&gt;BeginUpdate();</li>
<li>ListView füllen</li>
<li>ListView-&gt;Items-&gt;EndUpdate();</li>
</ol>
<p>Damit setzt das ListView seine Aktualisierungen so lange aus, bis alle Elemente drin sind. Geht deutlich schneller <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485129</guid><dc:creator><![CDATA[Anonym]]></dc:creator><pubDate>Wed, 02 Apr 2008 11:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Wed, 02 Apr 2008 14:04:45 GMT]]></title><description><![CDATA[<p>Bei wirklich vielen Einträgen hilft nur ein VirtualListView.<br />
Im examples-Verzeichnis des BCB sollte sich dazu ein Beispiel finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485251</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Wed, 02 Apr 2008 14:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Wed, 02 Apr 2008 16:38:49 GMT]]></title><description><![CDATA[<p>Für ein ähnliches Problem mit vielen Daten (&gt; 10.000) hatte ich die Einleseroutine in einen Thread ausgelagert und nur jede Sekunde aktualisiert.<br />
Es lassen sich ca. 1000 Einträge pro Sekunde in die ListView eintragen...</p>
<p>Aber sicherlich ist eine VritualListView am besten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485365</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 02 Apr 2008 16:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Thu, 03 Apr 2008 08:46:26 GMT]]></title><description><![CDATA[<p>ListView1-&gt;Items-&gt;BeginUpdate();<br />
ListView füllen<br />
ListView1-&gt;Items-&gt;EndUpdate();</p>
<p>Form1-&gt;ListView1-&gt;Items-&gt;Count = TempList-&gt;Count;</p>
<p>TempList-&gt;Sort(); deaktiviert</p>
<p>== Funktioniert leider alles nicht wie gewünscht.</p>
<p>was meint ihr mit VirtualListView das Beispiel hilft mir nicht wirklich weiter.</p>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485652</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Thu, 03 Apr 2008 08:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Thu, 03 Apr 2008 17:41:35 GMT]]></title><description><![CDATA[<p>Eine VirtualListView dient dazu, den Einlesevorgang zu beschleunigen und nur dir Daten zu holen, welche auch gerade angezeigt werden sollen.</p>
<p>Für dein Beispiel heißt das, daß du eigentlich nur erst die Dateinamen (+Pfad) ermitteln bräuchtest. Erst wenn die ListView gescrollt wird, würden dann die restlichen Daten nachgeladen (quasi eine Art Caching).<br />
Mittels &quot;TListView::OwnerDraw = true&quot; würdest du eine VirtualListView erzeugen.<br />
Dann dient das OnData-Ereignis dazu, die weiteren Daten des Eintrags (Datum, Attribute, Icon, ...) der ListView hinzuzufügen.</p>
<p>Da man ja meist nur einen geringen Ausschnitt der gesamten Liste sieht, lohnt sich diese Vorgehensweise.</p>
<p>Du solltest deinen Source-Code am besten auch mal besser formatieren und strukturieren (viele Code-Zeilen könntest du in eigene Funktionen packen).</p>
<p>Am besten du fängst noch mal von vorne an und läßt dir ersteinmal nur die Dateinamen anzeigen (dies sollte eigentlich sehr schnell gehen) und dann fügst du nach und nach die weiteren Infos hinzu.</p>
<p>Und du darfst natürlich nicht mehr &quot;ListView-&gt;Update()&quot; nach jedem Hinzufügen eines Eintrags aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485982</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 03 Apr 2008 17:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Fri, 04 Apr 2008 08:51:55 GMT]]></title><description><![CDATA[<p>Wenn ich das ubdaten deaktiviere, wird der Inhalt erst angezeigt, sobalt alle Einträge in der ListView sind.</p>
<p>Auch das Auslagern in einen eingenen Thread brachte keinen Erfolg.</p>
<p>Das mit der VirtualListView habe ich verstanden. Hapert nur noch an der Umsetzung. (Wie kriege ich die Daten aus der StringList dann in die ListView...)</p>
<p>Als Erstes wird ja nur eine StringListe generiert, die sämtliche Pfade enthält.</p>
<p>Nur wieso wird nicht ein Eintrag gelesen, hinzugefügt und dann der Nächste ?</p>
<p>Auf jeden Fall erstmal danke für die bisherigen Tipps.</p>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486269</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Fri, 04 Apr 2008 08:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Fri, 04 Apr 2008 13:06:21 GMT]]></title><description><![CDATA[<p>Selbst wenn die Daten direkt in die ListView geschrieben werden funktioniert es nicht ???</p>
<pre><code class="language-cpp">if (FindFirst(VerzeichnisUndErweiterung, iAttributes, sr) == 0)
  {
    do
    {
     attrnr = sr.Attr;
     if (BOOL(attrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
     {
      DateiName = ExtractFileName(sr.Name);

      MeinLinkesItem = Form1-&gt;ListView1-&gt;Items-&gt;Add();
      MeinLinkesItem-&gt;Caption = DateiName;
     }
    }

    while (FindNext(sr) == 0);
    FindClose(sr);
  }
</code></pre>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486452</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Fri, 04 Apr 2008 13:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Sat, 05 Apr 2008 11:23:23 GMT]]></title><description><![CDATA[<p>Was genau funktioniert nicht?</p>
<p>Welche Inhalte haben denn VerzeichnisUndErweiterung und iAttributes?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486890</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 05 Apr 2008 11:23:23 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Sat, 05 Apr 2008 19:12:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int iAttributes = faAnyFile;
AnsiString VerzeichnisUndErweiterung = &quot;C:\Windows\System32\*.*&quot;;
</code></pre>
<p>Es werden einfach nicht alle elemente nacheinander angezeigt, sondern die ganze Liste auf Einmal.</p>
<p>Ich versuche mich gerade an der VirtualListView-Methode. Diese ist schon deutlich schneller, zeigt aber die Liste auch erst an, wenn alle Elemente eingelesen wurden.</p>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487132</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Sat, 05 Apr 2008 19:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Sat, 05 Apr 2008 19:52:00 GMT]]></title><description><![CDATA[<p>Guten Abend...</p>
<p>Anbei meine Gehversuche mit der VirtualListView...</p>
<p>Ich verstehe nur nicht, wieso die ListView erst angezeigt wird, wenn alle Elemente durchgegangen wurden.</p>
<p>Gibt´s ne Möglichkeit, dies zu beschleunigen ?</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Hint-Anzeige der ListView deaktivieren
SendMessage(ListView1-&gt;Handle, LVM_SETTOOLTIPS, 0, 0);

//Button benennen und als aktiev markieren
Form1-&gt;Button1-&gt;Caption = &quot;Füllen&quot;;

ActiveControl = Button1; //Aktives Steuerelement

Form1-&gt;Button2-&gt;Caption = &quot;Clear&quot;;
//---------------------------------------------------------------------------
//Eigenschaften von ListView1 einstellen und Spaltebbezeichnungen hinzufügen
Form1-&gt;ListView1-&gt;ViewStyle = vsReport;
Form1-&gt;ListView1-&gt;RowSelect = true;
Form1-&gt;ListView1-&gt;OwnerData = true;

TListColumn *MeinLinkesColumn;
MeinLinkesColumn = Form1-&gt;ListView1-&gt;Columns-&gt;Add();
MeinLinkesColumn-&gt;Width = 73;
MeinLinkesColumn-&gt;Caption = &quot;Name&quot;;

MeinLinkesColumn = Form1-&gt;ListView1-&gt;Columns-&gt;Add();
MeinLinkesColumn-&gt;Width = 50;
MeinLinkesColumn-&gt;Caption = &quot;Erw.&quot;;

MeinLinkesColumn = Form1-&gt;ListView1-&gt;Columns-&gt;Add();
MeinLinkesColumn-&gt;Width = 60;
MeinLinkesColumn-&gt;Caption = &quot;Groesse&quot;;

MeinLinkesColumn = Form1-&gt;ListView1-&gt;Columns-&gt;Add();
MeinLinkesColumn-&gt;Width = 132;
MeinLinkesColumn-&gt;Caption = &quot;Datum&quot;;

MeinLinkesColumn = Form1-&gt;ListView1-&gt;Columns-&gt;Add();
MeinLinkesColumn-&gt;Width = 42;
MeinLinkesColumn-&gt;Caption = &quot;Attr.&quot;;
//---------------------------------------------------------------------------
//Variablen festlegen
VerzeichnisPfad = &quot;C:\\windows\\system32\\&quot;;
DateiTyp = &quot;*.*&quot;;

VerzeichnisUndErweiterung = &quot;&quot;;

AppendStr(VerzeichnisUndErweiterung,VerzeichnisPfad);

AppendStr(VerzeichnisUndErweiterung,DateiTyp);
//---------------------------------------------------------------------------
FileList = new TList;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//TStringList *TempList = new TStringList;

int attrnr = 0;
TSearchRec sr;
int iAttributes = faAnyFile;

AnsiString DateiName;
DWORD DWattrnr;

  if (FindFirst(VerzeichnisUndErweiterung, iAttributes, sr) == 0)
  {
    do
    {
     attrnr = sr.Attr;
     if (BOOL(attrnr &amp; FILE_ATTRIBUTE_DIRECTORY))
     {
      //DateiName = ExtractFileName(sr.Name);
      //TempList-&gt;Add(DateiName);

      TFileItem* fi = new TFileItem;
      fi-&gt;DateiName = ExtractFileName(sr.Name);
      fi-&gt;DateiErweiterung = &quot;...Erw...&quot;;
      fi-&gt;DateiGroesse = &quot;...Groesse...&quot;;
      fi-&gt;DateiZeit = &quot;...DateiZeit...&quot;;
      fi-&gt;DateiAttribut = &quot;...Attr...&quot;;

      FileList-&gt;Add(fi);
      Form1-&gt;Caption = FileList-&gt;Count;
      ListView1-&gt;Items-&gt;Count = FileList-&gt;Count;
     }
    }

    while (FindNext(sr) == 0);
    FindClose(sr);
    //ListView1-&gt;Items-&gt;Count = FileList-&gt;Count;

  }
//---------------------------------------------------------------------------

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1-&gt;ListView1-&gt;Clear();
Form1-&gt;Caption = &quot;0&quot;;
Form1-&gt;FileList-&gt;Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem *Item)
{
  TFileItem* fi = (TFileItem*)FileList-&gt;Items[Item-&gt;Index];

  Item-&gt;Caption = fi-&gt;DateiName;
  Item-&gt;SubItems-&gt;Add(fi-&gt;DateiErweiterung);
  Item-&gt;SubItems-&gt;Add(fi-&gt;DateiGroesse);
  Item-&gt;SubItems-&gt;Add(fi-&gt;DateiZeit);
  Item-&gt;SubItems-&gt;Add(fi-&gt;DateiAttribut);
}
//---------------------------------------------------------------------------
</code></pre>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487146</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Sat, 05 Apr 2008 19:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Sat, 05 Apr 2008 20:58:04 GMT]]></title><description><![CDATA[<p>Geschwindigkeits-Problem gelößt...</p>
<p>in der DoWhile-Schleife nach</p>
<pre><code class="language-cpp">ListView1-&gt;Items-&gt;Count = FileList-&gt;Count;
</code></pre>
<pre><code class="language-cpp">Form1-&gt;ListView1-&gt;Update();
</code></pre>
<p>einfügen und es funktioniert wie gewünscht...</p>
<p>Könnte mir jemand sagen, wie ich aus der TList eine TStringList machen kann ?????? (Müde) wenn nicht heute, dann bieg´ ich´s morgen zurecht...</p>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487175</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Sat, 05 Apr 2008 20:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Sun, 06 Apr 2008 10:50:26 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Indem du dir Werte aus dem TListView über eine Schleife in eine TStringList kopierst.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487309</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 06 Apr 2008 10:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to ListView Geschwindigkeit on Sun, 06 Apr 2008 18:03:56 GMT]]></title><description><![CDATA[<p>Danke akari...</p>
<p>War gestern nicht mehr fit. Die TList kann so bleiben. Die Geschwindigkeit verliere ich beim Auslesen der Icons.</p>
<pre><code class="language-cpp">SHGetFileInfo(DateiPfad.c_str(),0,&amp;FileInfo,sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON); 
MyIcon-&gt;Handle = FileInfo.hIcon; 
Form1-&gt;ImageList3-&gt;AddIcon(MyIcon);
</code></pre>
<p>Kennt jemand ´ne schnellere Methode ?</p>
<p>==&gt;Eisbeer&lt;==</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487526</guid><dc:creator><![CDATA[Eisbeer]]></dc:creator><pubDate>Sun, 06 Apr 2008 18:03:56 GMT</pubDate></item></channel></rss>