<?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[TListView OnDrawItem]]></title><description><![CDATA[<p>Hallo Jungs und Mädels,</p>
<p>ich tu mich grade etwas schwer bei dem OnDrawItem Event des TListViews.</p>
<p>Ich habe die Eigenschaft OwnerData auf true gesetzt so wie es in der BCB Hilfe vermerkt ist.<br />
Nur leider wird das OnDrawItem Event nicht ausgelöst?</p>
<p>Eine neues Item habe ich immer so eingefügt:</p>
<pre><code class="language-cpp">TListItem *newItem; //Ein neues ListItem-Objekt erzeugen

newItem=list_Left[0]-&gt;Items-&gt;Add(); //Neus Item der Liste hinzufügen

newItem-&gt;Caption = wfd.cFileName;   //Den geundenen Namen ausgeben
newItem-&gt;SubItems-&gt;Add(&quot;--&quot;);       //Erweiterung angeben (bei Ordnern --)
newItem-&gt;SubItems-&gt;Add(&quot;&lt;DIR&gt;&quot;);    //Größe angeben (Bei Ordnern &lt;DIR&gt;
</code></pre>
<p>Wenn ich dabei nun OwnerData auf true setzte, werden die Daten garnicht mehr angezeigt.<br />
Wie muss ich dann angeben, dass da nun ein Dateiname und dessen Größe also die SubItems drin stehen soll.</p>
<p>Ich möchte das OnDrawItem Event haben,<br />
da ich vor dem Dateinamen das dazugehörige Icon setzten möchte.<br />
Icon hole ich dann ja mit folgendem Code (Zu mindestens wird es so kompiliert, ob es nun funktioniert weiß<br />
ich ja nicht</p>
<pre><code class="language-cpp">void __fastcall TForm1::ListViewDrawItem(TCustomListView *Sender,
      TListItem *Item, const TRect &amp;Rect, TOwnerDrawState State)
{

           AnsiString FileName = asFileName[iF];
           HICON  hGen16Icon;
           SHFILEINFO  shfi;

           unsigned short IconIndex = 0;

           // Systemincon zu einer Datei wird ermitelt
           if (SHGetFileInfo (FileName.c_str(),
                   0,
                   &amp;shfi,
                   sizeof (SHFILEINFO),
                   SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON))
        {
           hGen16Icon = shfi.hIcon;
          // if (hGen16Icon == NULL) return;
           // Text in Spalte übermalen (löschen, nur Icon ist gewollt)
           list_Left[0]-&gt;Canvas-&gt;FillRect(Rect);
               //StringGrid1-&gt;Canvas-&gt;FillRect(Rect);
           // Systemicon wird dargestellt.
           DrawIconEx(list_Left[0]-&gt;Canvas-&gt;Handle, Rect.Left+1,Rect.Top+1, hGen16Icon, 16, 16, 0, NULL, DI_NORMAL);
           //DrawIconEx(StringGrid1-&gt;Canvas-&gt;Handle, Rect.Left+1,Rect.Top+1, hGen16Icon, 16, 16, 0, NULL, DI_NORMAL);
         }

}
</code></pre>
<p>Mein ListView habe ich Dynamisch erzeugt und das Event zugewiesen:</p>
<pre><code class="language-cpp">// ListView erzeugen
    list_Left[i_AktPos] = new TListView(tab_Left[i_AktPos]);
    list_Left[i_AktPos]-&gt;Parent = tab_Left[i_AktPos];
    list_Left[i_AktPos]-&gt;Align = alClient;
    list_Left[i_AktPos]-&gt;ViewStyle = vsReport;
    list_Left[i_AktPos]-&gt;GridLines=false;
    list_Left[i_AktPos]-&gt;OwnerData = true;

    list_Left[i_AktPos]-&gt;OnCustomDrawItem = ListViewCustomDrawItem;
</code></pre>
<p>Die Ivent Prozedur ist auch im Header deklariert so wie es sich gehört.</p>
<p>DAnke schonmal für eine Antwort.</p>
<p>Gruß<br />
Thorsten</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/128862/tlistview-ondrawitem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 13:45:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/128862.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Dec 2005 20:30:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 20:30:16 GMT]]></title><description><![CDATA[<p>Hallo Jungs und Mädels,</p>
<p>ich tu mich grade etwas schwer bei dem OnDrawItem Event des TListViews.</p>
<p>Ich habe die Eigenschaft OwnerData auf true gesetzt so wie es in der BCB Hilfe vermerkt ist.<br />
Nur leider wird das OnDrawItem Event nicht ausgelöst?</p>
<p>Eine neues Item habe ich immer so eingefügt:</p>
<pre><code class="language-cpp">TListItem *newItem; //Ein neues ListItem-Objekt erzeugen

newItem=list_Left[0]-&gt;Items-&gt;Add(); //Neus Item der Liste hinzufügen

newItem-&gt;Caption = wfd.cFileName;   //Den geundenen Namen ausgeben
newItem-&gt;SubItems-&gt;Add(&quot;--&quot;);       //Erweiterung angeben (bei Ordnern --)
newItem-&gt;SubItems-&gt;Add(&quot;&lt;DIR&gt;&quot;);    //Größe angeben (Bei Ordnern &lt;DIR&gt;
</code></pre>
<p>Wenn ich dabei nun OwnerData auf true setzte, werden die Daten garnicht mehr angezeigt.<br />
Wie muss ich dann angeben, dass da nun ein Dateiname und dessen Größe also die SubItems drin stehen soll.</p>
<p>Ich möchte das OnDrawItem Event haben,<br />
da ich vor dem Dateinamen das dazugehörige Icon setzten möchte.<br />
Icon hole ich dann ja mit folgendem Code (Zu mindestens wird es so kompiliert, ob es nun funktioniert weiß<br />
ich ja nicht</p>
<pre><code class="language-cpp">void __fastcall TForm1::ListViewDrawItem(TCustomListView *Sender,
      TListItem *Item, const TRect &amp;Rect, TOwnerDrawState State)
{

           AnsiString FileName = asFileName[iF];
           HICON  hGen16Icon;
           SHFILEINFO  shfi;

           unsigned short IconIndex = 0;

           // Systemincon zu einer Datei wird ermitelt
           if (SHGetFileInfo (FileName.c_str(),
                   0,
                   &amp;shfi,
                   sizeof (SHFILEINFO),
                   SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON))
        {
           hGen16Icon = shfi.hIcon;
          // if (hGen16Icon == NULL) return;
           // Text in Spalte übermalen (löschen, nur Icon ist gewollt)
           list_Left[0]-&gt;Canvas-&gt;FillRect(Rect);
               //StringGrid1-&gt;Canvas-&gt;FillRect(Rect);
           // Systemicon wird dargestellt.
           DrawIconEx(list_Left[0]-&gt;Canvas-&gt;Handle, Rect.Left+1,Rect.Top+1, hGen16Icon, 16, 16, 0, NULL, DI_NORMAL);
           //DrawIconEx(StringGrid1-&gt;Canvas-&gt;Handle, Rect.Left+1,Rect.Top+1, hGen16Icon, 16, 16, 0, NULL, DI_NORMAL);
         }

}
</code></pre>
<p>Mein ListView habe ich Dynamisch erzeugt und das Event zugewiesen:</p>
<pre><code class="language-cpp">// ListView erzeugen
    list_Left[i_AktPos] = new TListView(tab_Left[i_AktPos]);
    list_Left[i_AktPos]-&gt;Parent = tab_Left[i_AktPos];
    list_Left[i_AktPos]-&gt;Align = alClient;
    list_Left[i_AktPos]-&gt;ViewStyle = vsReport;
    list_Left[i_AktPos]-&gt;GridLines=false;
    list_Left[i_AktPos]-&gt;OwnerData = true;

    list_Left[i_AktPos]-&gt;OnCustomDrawItem = ListViewCustomDrawItem;
</code></pre>
<p>Die Ivent Prozedur ist auch im Header deklariert so wie es sich gehört.</p>
<p>DAnke schonmal für eine Antwort.</p>
<p>Gruß<br />
Thorsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936849</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 07 Dec 2005 20:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 20:32:37 GMT]]></title><description><![CDATA[<p>Oder soll ich lieber ein StringGrid benutzten für die Anzeige eines Ordners bzw. Verzeichnisses?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936852</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 07 Dec 2005 20:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:19:00 GMT]]></title><description><![CDATA[<p>Hah? Heißt es nicht Owner<strong>Draw</strong>? OwnerData macht vielleicht auch Sinn, aber dann musst du auch noch die ganzen anderen Ereignisse implementieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936889</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:23:29 GMT]]></title><description><![CDATA[<p>auszug aus der BCB Hilfe</p>
<blockquote>
<p>Das Ereignis OnDrawItem tritt ein, wenn ein Element in der Listenansicht gezeichnet werden soll.</p>
<p>__property TLVDrawItemEvent OnDrawItem = {read=FOnCustomDrawItem, write=FOnCustomDrawItem};</p>
<p>Beschreibung</p>
<p>Nehmen Sie in eine OnDrawItem-Ereignisbehandlungsroutine Code auf, um Elemente in der Listenansicht manuell zu zeichnen. OnDrawItem tritt nur ein, wenn OwnerData auf true gesetzt ist.</p>
</blockquote>
<p>welche anderen ereignisse ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936893</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:27:50 GMT]]></title><description><![CDATA[<p>Welche BCB-Version hast du?</p>
<p>BCB-Hilfe schrieb:</p>
<blockquote>
<p>Dieses Ereignis wird ausgelöst, wenn ein Element in der Listenansicht gezeichnet werden soll.</p>
<p>__property TLVDrawItemEvent OnDrawItem = {read=FOnDrawItem, write=FOnDrawItem};</p>
<p>Beschreibung</p>
<p>Dieses Ereignis wird ausgelöst, wenn ein Element in der Listenansicht gezeichnet werden <a href="http://soll.In" rel="nofollow">soll.In</a> einer Ereignisbehandlungsroutine für OnDrawItem können Befehle zum manuellen Zeichnen von Elementen in der Listenansicht enthalten sein. <strong>Dieses Ereignis wird nur ausgelöst, wenn OwnerDraw den Wert true hat.</strong></p>
<p>Hinweis: Listenansichten empfangen verschiedene weitere Ereignisse, [...]</p>
</blockquote>
<p>Nicht dass sich da ein Fehler in der Hilfe eingschlichen hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936897</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:29:44 GMT]]></title><description><![CDATA[<p>C++ 5</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936898</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:29:44 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:31:14 GMT]]></title><description><![CDATA[<p>Ich hab' die 6.</p>
<p>Versuche es mal mit OwnerDraw statt OwnerData. Vielleicht ist es ja wirklich ein Fehler in der Hilfe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936899</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:53:47 GMT]]></title><description><![CDATA[<p>jo, habe es schon ma versucht gehabt. nun funktioniert es wohl. zu mindestens wird mir ein icon gezeichnet. nur wie bekomme ich dann daneben den Text hin?<br />
das ist wohl meine letzte Frage diesbezüglich, dann müsste ich es verstanden habe.</p>
<p>bis dann und danke nochmal gruß thorsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936923</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Wed, 07 Dec 2005 21:55:02 GMT]]></title><description><![CDATA[<p>vlt. sollte man solche Hilfe &quot;Bugs&quot; hier irgendwie auf der Seite auch auflisten. Wird bestimmt nicht der einzige Fehler sein, bei einer so Umfangreichen aber auch guten Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/936925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/936925</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 07 Dec 2005 21:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Thu, 08 Dec 2005 08:34:56 GMT]]></title><description><![CDATA[<p>mit <strong>DrawText</strong> kannst du Text ausgeben. Ausserdem solltest du nicht jedesmal beim Zeichnen die Icons abfragen sondern die vorher in ner liste speichern. siehe Virtual ListView - Beispiel in deinem BCB-Installationsordner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/937055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/937055</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Thu, 08 Dec 2005 08:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Thu, 08 Dec 2005 14:31:24 GMT]]></title><description><![CDATA[<p>hmm sieht sehr gut aus das Example, genau sowas in etwa habe ich vor. nur wie lesen die die verzeichnisse ein? ich kenne das nur mit FindFirst etc. oder FindFirstFile etc.?</p>
<p>ein wenig kommmentare in diesem programm finde ich.</p>
<p>gruß<br />
thorsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/937398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/937398</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Thu, 08 Dec 2005 14:31:24 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Thu, 08 Dec 2005 14:45:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>In dem Beispiel wird <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/ishellfolder/ishellfolder.asp" rel="nofollow">eine alternative Möglichkeit</a> der WinAPI verwendet.<br />
Du kannst aber auch mit FindFirst/FindNext arbeiten.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/937420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/937420</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 08 Dec 2005 14:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to TListView OnDrawItem on Thu, 08 Dec 2005 14:48:33 GMT]]></title><description><![CDATA[<p>was ist denn nun besser? ich sehe zumindestens kein großen while schleife oder ist dass das selbe bei der alternative. werde den code dann wohl sehr gut interpretieren um zu verstehen was da abgeht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/937425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/937425</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Thu, 08 Dec 2005 14:48:33 GMT</pubDate></item></channel></rss>