<?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[Farbige Zellen im StringGrid]]></title><description><![CDATA[<p>hallo!</p>
<p>dieses problem wurde schon in der FAQ besprochen aber ich hab es bis jetzt leider nicht geschaft ganz diese lösung auf mein problem anzuwenden.</p>
<p>folgendes:<br />
ich habe ein array in dem die werte in das StringGrid sollen und jeder wert soll seine eigene hintergrund-farbe bekommen. je nach art des wertes sollen auch dementsprechend x nachfolgende zellen diese farbe bekommen.<br />
mein problem ist, dass wenn die &quot;OnDraw&quot; methode einmal ausgeführt wurde für eine zelle, beim ausführen dieser für die nächste, die schon gefärbte zelle wieder zurückgesezt wird.</p>
<p>vieleicht stelle ich mich grad auch nur etwas blöd an bei dieser sache, da ich das erste mal mit StringGrids arbeite und allgemein noch nicht so lange mit der Borland 2006er C++ umgebung aber ich komme auf keine vernünftige lösung.</p>
<p>mein momentaner ansatz ist dieser:<br />
(die nachfolgezellen werden hier noch nicht gefärbt)</p>
<pre><code class="language-cpp">//auszug aus einer Methode
//...
//Das Array durchlaufen
while (i &lt; LayoutSignaleLength)
{

 //Position ermitteln aus einem 1-Dim Array
 SignalPosition = LayoutSignale[i].get_SignalPositionInMessage();
 zeile = SignalPosition / 8;
 spalte = SignalPosition % 8;	

 StringGrid_Msg_Layout-&gt;Cells[spalte+1][zeile+1] = &quot;Sig&quot;+(IntToStr(i));
 //Hier werden noch evtl. Folgezellen gefärbt. QC kommt noch.

 i++;
}
//...

//OnDraw Methode:
void __fastcall TPagesDlg_Msg::StringGrid_Msg_Layout_OnDraw(TObject *Sender,
	  int ACol, int ARow, TRect &amp;Rect, TGridDrawState State)
{

 if (ACol == (spalte+1) &amp;&amp; ARow == (zeile+1))
{
 StringGrid_Msg_Layout-&gt;Canvas-&gt;Brush-&gt;Color = clRed;
 StringGrid_Msg_Layout-&gt;Canvas-&gt;Font-&gt;Color = clBlack; 	         
 StringGrid_Msg_Layout-&gt;Canvas-&gt;FillRect(Rect);

 //für die Textausrichtung
 int hAlign;   // text align, 0/1/2 - Left/Center/Right

 if (ACol % 2)
 hAlign = 1;

 else
 hAlign = 2;

 //Text in die Zelle malen
 DrawText(StringGrid_Msg_Layout-&gt;Canvas-&gt;Handle,              
 StringGrid_Msg_Layout-&gt;Cells[ACol][ARow].c_str(),
 -1, &amp;Rect, DT_SINGLELINE | DT_VCENTER | hAlign);
 }

}
</code></pre>
<p>das ganze soll so in etwa aussehen:<br />
<a href="http://www.ks-board.de/bilder/prog.JPG" rel="nofollow">BILD</a></p>
<p>bitte um hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176842/farbige-zellen-im-stringgrid</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 07:13:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176842.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Mar 2007 17:36:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Farbige Zellen im StringGrid on Sun, 25 Mar 2007 17:36:23 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>dieses problem wurde schon in der FAQ besprochen aber ich hab es bis jetzt leider nicht geschaft ganz diese lösung auf mein problem anzuwenden.</p>
<p>folgendes:<br />
ich habe ein array in dem die werte in das StringGrid sollen und jeder wert soll seine eigene hintergrund-farbe bekommen. je nach art des wertes sollen auch dementsprechend x nachfolgende zellen diese farbe bekommen.<br />
mein problem ist, dass wenn die &quot;OnDraw&quot; methode einmal ausgeführt wurde für eine zelle, beim ausführen dieser für die nächste, die schon gefärbte zelle wieder zurückgesezt wird.</p>
<p>vieleicht stelle ich mich grad auch nur etwas blöd an bei dieser sache, da ich das erste mal mit StringGrids arbeite und allgemein noch nicht so lange mit der Borland 2006er C++ umgebung aber ich komme auf keine vernünftige lösung.</p>
<p>mein momentaner ansatz ist dieser:<br />
(die nachfolgezellen werden hier noch nicht gefärbt)</p>
<pre><code class="language-cpp">//auszug aus einer Methode
//...
//Das Array durchlaufen
while (i &lt; LayoutSignaleLength)
{

 //Position ermitteln aus einem 1-Dim Array
 SignalPosition = LayoutSignale[i].get_SignalPositionInMessage();
 zeile = SignalPosition / 8;
 spalte = SignalPosition % 8;	

 StringGrid_Msg_Layout-&gt;Cells[spalte+1][zeile+1] = &quot;Sig&quot;+(IntToStr(i));
 //Hier werden noch evtl. Folgezellen gefärbt. QC kommt noch.

 i++;
}
//...

//OnDraw Methode:
void __fastcall TPagesDlg_Msg::StringGrid_Msg_Layout_OnDraw(TObject *Sender,
	  int ACol, int ARow, TRect &amp;Rect, TGridDrawState State)
{

 if (ACol == (spalte+1) &amp;&amp; ARow == (zeile+1))
{
 StringGrid_Msg_Layout-&gt;Canvas-&gt;Brush-&gt;Color = clRed;
 StringGrid_Msg_Layout-&gt;Canvas-&gt;Font-&gt;Color = clBlack; 	         
 StringGrid_Msg_Layout-&gt;Canvas-&gt;FillRect(Rect);

 //für die Textausrichtung
 int hAlign;   // text align, 0/1/2 - Left/Center/Right

 if (ACol % 2)
 hAlign = 1;

 else
 hAlign = 2;

 //Text in die Zelle malen
 DrawText(StringGrid_Msg_Layout-&gt;Canvas-&gt;Handle,              
 StringGrid_Msg_Layout-&gt;Cells[ACol][ARow].c_str(),
 -1, &amp;Rect, DT_SINGLELINE | DT_VCENTER | hAlign);
 }

}
</code></pre>
<p>das ganze soll so in etwa aussehen:<br />
<a href="http://www.ks-board.de/bilder/prog.JPG" rel="nofollow">BILD</a></p>
<p>bitte um hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252373</guid><dc:creator><![CDATA[P_E_T_E_R]]></dc:creator><pubDate>Sun, 25 Mar 2007 17:36:23 GMT</pubDate></item><item><title><![CDATA[Reply to Farbige Zellen im StringGrid on Sun, 25 Mar 2007 19:01:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>mein problem ist, dass wenn die &quot;OnDraw&quot; methode einmal ausgeführt wurde für eine zelle, beim ausführen dieser für die nächste, die schon gefärbte zelle wieder zurückgesezt wird.</p>
</blockquote>
<p>Du kannst dich nicht darauf verlassen das die OnDraw-Events für die Zellen der Reihe nach ausgeführt werden. Ganz im Gegenteil, es werden nur Zellen neugezeichnet wo es unumgänglich ist. Deshalb must du jeden OnDraw-Event allein für sich abbearbeiten.<br />
Zum einen must du auf solche Variablen wie wie <em>zeile</em> oder <em>spalte</em> verzichten. Diese sind bestenfalls beim ersten OnDraw-Aufruf mit einem gültigen Wert gefüllt. Spätestens wenn aber ein nachfolgender Redraw-Aufruf nötig ist (und sei es nur weil eine Zelle ausgewählt wird) haben die nicht mehr den Wert den du ihnen irgendwann einmalig zugewiesen hast.</p>
<p>Du must also nur auf Basis der Werte in ACol und ARow alles weitere berechnen, und sei es einfach einen Zugriff auf ein zusätzliches Array im Form, wo die Werte zwischengespichert werden</p>
<pre><code class="language-cpp">StringGrid_Msg_Layout-&gt;Canvas-&gt;Brush-&gt;Color = BackGroundColors(ARow, ACol);
StringGrid_Msg_Layout-&gt;Canvas-&gt;Font-&gt;Color = FontColor(ARow, ACol);
</code></pre>
<p>Deine Aufgabe ist es jetzt diese Funktion/Membermethoden/Arrayzugriffe <em>BackgroundColour</em> und <em>FontColour</em> zu schreiben, so das sie nur Abhängig von ARow und ACol sind.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252460</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 25 Mar 2007 19:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to Farbige Zellen im StringGrid on Sun, 25 Mar 2007 19:16:02 GMT]]></title><description><![CDATA[<p>ah, danke für die antwort!</p>
<p>also, muss ich einmalig den OnDraw aufruf antriggern und dann das StringGrid in der OnDraw vollständig füllen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252475</guid><dc:creator><![CDATA[P_E_T_E_R]]></dc:creator><pubDate>Sun, 25 Mar 2007 19:16:02 GMT</pubDate></item><item><title><![CDATA[Reply to Farbige Zellen im StringGrid on Sun, 25 Mar 2007 19:26:20 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du hast das OnDraw-Konzept noch nicht verstanden.<br />
Am besten stellst du dir zwei verschiedene Ebenen vor.<br />
1. Erstellen der Zeilen, Spalten und Zellinhalte.<br />
Eventuell werden auch zusätzliche Angaben zur Ausgabe in ein extra Member-Array des Forms zwischengespeichert</p>
<p>2. OnDraw-Aufruf für eine <strong>einzelne Zelle</strong>. Deshalb heißt der Event richtigerweise auch <strong>OnDrawCell</strong>. Hier sollte möglicht schnell notwendige Farben, Ausrichtungen... etc nur auf Basis von ARow und ACol bestimmt und angewendet werden.</p>
<p>Zwischen diesen beiden Ebenen darf es keine weitere Bindung geben. Weder &quot;triggerst&quot; du manuell irgendwelche Draw-Events noch wird das StringGrid in einem einzelnen OnDrawCell-Event komplett gezeichnet.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252479</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 25 Mar 2007 19:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to Farbige Zellen im StringGrid on Sat, 31 Mar 2007 11:19:35 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>und sei es einfach einen Zugriff auf ein zusätzliches Array im Form, wo die Werte zwischengespichert werden</p>
</blockquote>
<p>damit hat es geklappt.</p>
<p>danke nochmals!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256532</guid><dc:creator><![CDATA[P_E_T_E_R]]></dc:creator><pubDate>Sat, 31 Mar 2007 11:19:35 GMT</pubDate></item></channel></rss>