<?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[Refresh eines String Grids (OnDrawCell)]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein String Grid ein wenig modifizieren.<br />
Das soll folgendes können:</p>
<p>- Elemente die nicht markiert sind haben eine bestimmte Höhe,<br />
sagen wir mal 10 Pixel.</p>
<p>- das markierte Element ist wesentlich grösser, so ca. 50 Pixel.</p>
<p>- über das markierte Element platziere ich ein Panel, welches mit<br />
weiteren Informationen du diesem Eintrag gefüllt wird.</p>
<p>im Test sieht das bei mir so aus:<br />
<a href="http://www.gsm-dev.de/newlist.GIF" rel="nofollow">www.gsm-dev.de/newlist.GIF</a></p>
<p>Problem: das ganze flackert schrecklich und wenn ich mit dem Cursor nach<br />
unten oder oben fahre wird ab dem Anschlag die OnDrawCell Routine nicht<br />
mehr aufgerufen.</p>
<p>hier die OnDrawCell Routine:</p>
<pre><code>void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &amp;Rect, TGridDrawState State)
{

    // wenn das markierte Element nicht im sichtbaren Bereich ist -&gt; ausblenden 
    if ((StringGrid1-&gt;TopRow &gt; StringGrid1-&gt;Selection.Top)
      ||(StringGrid1-&gt;VisibleRowCount + StringGrid1-&gt;TopRow &lt; StringGrid1-&gt;Selection.Top)
    ){
        Panel1-&gt;Visible = false;
    } else {
        Panel1-&gt;Visible = true;
    }

    if(ARow == StringGrid1-&gt;Selection.Top) {
        // Das markierte Element:
        if (StringGrid1-&gt;RowHeights[ARow] != 50)
        StringGrid1-&gt;RowHeights[ARow] = 50;
        Panel1-&gt;Top = Rect.Top + StringGrid1-&gt;Top + 2;
        Panel1-&gt;Left = Rect.Left + StringGrid1-&gt;Left + 2;
        Panel1-&gt;Height = Rect.Height();
        Panel1-&gt;Width = Rect.Width();
        lblUeberschrift-&gt;Caption = StringGrid1-&gt;Cells[0][ARow];
    } else {
        // ein normales (kleines) Element
        if (StringGrid1-&gt;RowHeights[ARow] != 15)
            StringGrid1-&gt;RowHeights[ARow] = 15;
    }
}
</code></pre>
<p>Tests zeigen, das die Routine 2-3 mal für jede Zelle aufgerufen wird. Daher<br />
wird das flackern kommen. Aber es muss doch eine Möglichkeit geben das zu<br />
verhindern oder?</p>
<p>Vielen Dank schonmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/79068/refresh-eines-string-grids-ondrawcell</link><generator>RSS for Node</generator><lastBuildDate>Mon, 29 Jun 2026 22:41:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/79068.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Jul 2004 16:19:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Refresh eines String Grids (OnDrawCell) on Wed, 07 Jul 2004 16:19:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein String Grid ein wenig modifizieren.<br />
Das soll folgendes können:</p>
<p>- Elemente die nicht markiert sind haben eine bestimmte Höhe,<br />
sagen wir mal 10 Pixel.</p>
<p>- das markierte Element ist wesentlich grösser, so ca. 50 Pixel.</p>
<p>- über das markierte Element platziere ich ein Panel, welches mit<br />
weiteren Informationen du diesem Eintrag gefüllt wird.</p>
<p>im Test sieht das bei mir so aus:<br />
<a href="http://www.gsm-dev.de/newlist.GIF" rel="nofollow">www.gsm-dev.de/newlist.GIF</a></p>
<p>Problem: das ganze flackert schrecklich und wenn ich mit dem Cursor nach<br />
unten oder oben fahre wird ab dem Anschlag die OnDrawCell Routine nicht<br />
mehr aufgerufen.</p>
<p>hier die OnDrawCell Routine:</p>
<pre><code>void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &amp;Rect, TGridDrawState State)
{

    // wenn das markierte Element nicht im sichtbaren Bereich ist -&gt; ausblenden 
    if ((StringGrid1-&gt;TopRow &gt; StringGrid1-&gt;Selection.Top)
      ||(StringGrid1-&gt;VisibleRowCount + StringGrid1-&gt;TopRow &lt; StringGrid1-&gt;Selection.Top)
    ){
        Panel1-&gt;Visible = false;
    } else {
        Panel1-&gt;Visible = true;
    }

    if(ARow == StringGrid1-&gt;Selection.Top) {
        // Das markierte Element:
        if (StringGrid1-&gt;RowHeights[ARow] != 50)
        StringGrid1-&gt;RowHeights[ARow] = 50;
        Panel1-&gt;Top = Rect.Top + StringGrid1-&gt;Top + 2;
        Panel1-&gt;Left = Rect.Left + StringGrid1-&gt;Left + 2;
        Panel1-&gt;Height = Rect.Height();
        Panel1-&gt;Width = Rect.Width();
        lblUeberschrift-&gt;Caption = StringGrid1-&gt;Cells[0][ARow];
    } else {
        // ein normales (kleines) Element
        if (StringGrid1-&gt;RowHeights[ARow] != 15)
            StringGrid1-&gt;RowHeights[ARow] = 15;
    }
}
</code></pre>
<p>Tests zeigen, das die Routine 2-3 mal für jede Zelle aufgerufen wird. Daher<br />
wird das flackern kommen. Aber es muss doch eine Möglichkeit geben das zu<br />
verhindern oder?</p>
<p>Vielen Dank schonmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/555416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/555416</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Wed, 07 Jul 2004 16:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to Refresh eines String Grids (OnDrawCell) on Thu, 08 Jul 2004 05:21:27 GMT]]></title><description><![CDATA[<p>Problem gelöst <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>
<p>ich mach die Anpassung der Cell-Höhe nun in OnSelectCell. Das ganze ist noch<br />
nicht 100% perfekt (flackert nicht immer etwas) aber schon sehr viel besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/555700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/555700</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Thu, 08 Jul 2004 05:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Refresh eines String Grids (OnDrawCell) on Thu, 08 Jul 2004 05:34:02 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>leg das StringGrid mal auf ein Panel und setze DoubleBuffered = true. Obwohl ich nicht weiß, ob das in diesem Fall hilft.</p>
<p>Ansonsten solltest Du versuchen auf das Panel zu verzichten und direkt in den Canvas zu zeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/555702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/555702</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 08 Jul 2004 05:34:02 GMT</pubDate></item></channel></rss>