<?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[StringGrid in Image - ClientRect?]]></title><description><![CDATA[<p>Hallo, zeichne in ein TStringGrid mittels DrawCell eine grafische Oberfläche über viele Spalten und Zeilen (z.B. 12 Spalten, 80 Zeilen). Ich bekomme nicht alle Spalten und Zeilen im StringGrid angezeigt, muss also über die Regler scrollen. Jetzt möchte ich aber das Gesamtbild des TStringGrid (also alle Spalten und Zeilen) an ein externes Grafikprogramm übergeben:</p>
<pre><code class="language-cpp">AnsiString z1,z2;                                                              // Vars definieren
 Graphics::TBitmap *bmp  = new Graphics::TBitmap();                             // BMP  Image anlegen
 TStringGrid *Grid;                                                             // TStringGrid vorbereiten

 Grid=frm14_grd6_Schrank;                                                       // StringGrid übergeben

 //TRect RectA=Rect(0,0,Grid-&gt;Width,Grid-&gt;Height);                                // nur aktuelle Fenstergrösse vom TStringGrid
 TRect RectA=Grid-&gt;ClientRect;                                                  // kompletter TStringGrid-Bereich?

 bmp-&gt;Height=RectA.Width();                                                     // Breite Image einstellen
 bmp-&gt;Width =RectA.Height();                                                    // Höhe   Image einstellen
 bmp-&gt;Canvas-&gt;CopyRect(RectA,Grid-&gt;Canvas,RectA);                               // und Grid in Image kopieren

 z1=Form1-&gt;PrgPfad+&quot;\\Ablage\\Grafik_&quot;+frm14_lblSchrank-&gt;Caption+&quot;.bmp&quot;;        // Dateiname bilden
 bmp-&gt;SaveToFile(z1);                                                           // Grafik sichern
 delete bmp;                                                                    // Image löschen

 if(FileExists(Form1-&gt;PrgGrafEx)==false) { Form1-&gt;PrgGrafEx=&quot;mspaint.exe&quot;; }    // externes Prg. ggfs. korrigieren
 z2=Form1-&gt;PrgGrafEx+&quot; \&quot;&quot;+z1+&quot;\&quot;&quot;;                                             // ergänzen
 WinExec(z2.c_str(),SW_NORMAL);                                                 // Malprogramm aufrufen
</code></pre>
<p>Problem: Er übergibt mir nur den sichtbaren Bereich des TStringGrid; alles verdeckte bleibt bei der Übergabe weiss. Frage: Wie kann ich auch den verdeckten Teil übergeben?</p>
<p>Vorher alle Spalten und Zeilen auf den sichtbaren Bereich zoomen habe ich als Funktion zwar, wird aber teilweise zu klein und daher nicht praktikabel.</p>
<p>Danke für jeden Tip...</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149777/stringgrid-in-image-clientrect</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 22:30:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149777.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Jun 2006 09:27:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 09:27:31 GMT]]></title><description><![CDATA[<p>Hallo, zeichne in ein TStringGrid mittels DrawCell eine grafische Oberfläche über viele Spalten und Zeilen (z.B. 12 Spalten, 80 Zeilen). Ich bekomme nicht alle Spalten und Zeilen im StringGrid angezeigt, muss also über die Regler scrollen. Jetzt möchte ich aber das Gesamtbild des TStringGrid (also alle Spalten und Zeilen) an ein externes Grafikprogramm übergeben:</p>
<pre><code class="language-cpp">AnsiString z1,z2;                                                              // Vars definieren
 Graphics::TBitmap *bmp  = new Graphics::TBitmap();                             // BMP  Image anlegen
 TStringGrid *Grid;                                                             // TStringGrid vorbereiten

 Grid=frm14_grd6_Schrank;                                                       // StringGrid übergeben

 //TRect RectA=Rect(0,0,Grid-&gt;Width,Grid-&gt;Height);                                // nur aktuelle Fenstergrösse vom TStringGrid
 TRect RectA=Grid-&gt;ClientRect;                                                  // kompletter TStringGrid-Bereich?

 bmp-&gt;Height=RectA.Width();                                                     // Breite Image einstellen
 bmp-&gt;Width =RectA.Height();                                                    // Höhe   Image einstellen
 bmp-&gt;Canvas-&gt;CopyRect(RectA,Grid-&gt;Canvas,RectA);                               // und Grid in Image kopieren

 z1=Form1-&gt;PrgPfad+&quot;\\Ablage\\Grafik_&quot;+frm14_lblSchrank-&gt;Caption+&quot;.bmp&quot;;        // Dateiname bilden
 bmp-&gt;SaveToFile(z1);                                                           // Grafik sichern
 delete bmp;                                                                    // Image löschen

 if(FileExists(Form1-&gt;PrgGrafEx)==false) { Form1-&gt;PrgGrafEx=&quot;mspaint.exe&quot;; }    // externes Prg. ggfs. korrigieren
 z2=Form1-&gt;PrgGrafEx+&quot; \&quot;&quot;+z1+&quot;\&quot;&quot;;                                             // ergänzen
 WinExec(z2.c_str(),SW_NORMAL);                                                 // Malprogramm aufrufen
</code></pre>
<p>Problem: Er übergibt mir nur den sichtbaren Bereich des TStringGrid; alles verdeckte bleibt bei der Übergabe weiss. Frage: Wie kann ich auch den verdeckten Teil übergeben?</p>
<p>Vorher alle Spalten und Zeilen auf den sichtbaren Bereich zoomen habe ich als Funktion zwar, wird aber teilweise zu klein und daher nicht praktikabel.</p>
<p>Danke für jeden Tip...</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074398</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Fri, 09 Jun 2006 09:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 09:35:19 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>benutzt <em>TStringGrid::PaintTo</em> auf ein ausreichend großes TCanvas.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074407</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 09 Jun 2006 09:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 10:05:57 GMT]]></title><description><![CDATA[<p>Hallo, Akari</p>
<pre><code class="language-cpp">bmp-&gt;Height=RectA.Width();                                                     // Breite Image einstellen
 bmp-&gt;Width =RectA.Height();                                                    // Höhe   Image einstellen
 Grid-&gt;PaintTo(bmp-&gt;Canvas,0,0);
 //bmp-&gt;Canvas-&gt;CopyRect(RectA,Grid-&gt;Canvas,RectA);                               // und Grid in Image kopieren
</code></pre>
<p>So zeichnet er auch nur den sichtbaren Bereich (einschl. Fensterrahmen).<br />
Muss ich die Zellen einzeln umlenken mit PaintTo?</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074437</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Fri, 09 Jun 2006 10:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 10:11:13 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>hm... ja PaintTo liefert auch nur das gewohnte, hab irgendwie noch geschlafen.</p>
<p>Es wird dir wohl nichts anders übrigbleiben als alle Zellen selber zu zeichnen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074443</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 09 Jun 2006 10:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 11:09:28 GMT]]></title><description><![CDATA[<p>Hatte auch schon mal das Problem,<br />
und habe es so gelößt, das ich die Breite/Höhe des StringGrids vor dem PaintTo auf die komplette gewünschte Druckgröße geändert habe.</p>
<pre><code class="language-cpp">StringGrid1-&gt;Align = alNone;
StringGrid1-&gt;Width = StringGrid1-&gt;ColCount * StringGrid1-&gt;DefaultColWidth;
StringGrid1-&gt;Height = StringGrid1-&gt;RowCount * StringGrid1-&gt;DefaultRowHeight;
TImage *myImage = new TImage(this);
if (myImage) {
  myImage-&gt;Picture-&gt;Bitmap-&gt;Height = StringGrid1-&gt;Height;
  myImage-&gt;Picture-&gt;Bitmap-&gt;Width = StringGrid1-&gt;Width;
  StringGrid1-&gt;PaintTo(myImage-&gt;Canvas-&gt;Handle, 0, 0);
  ....
  delete myImage; 
  myImage=NULL; 
} 
StringGrid1-&gt;Align = alClient;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1074504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074504</guid><dc:creator><![CDATA[VergissEs]]></dc:creator><pubDate>Fri, 09 Jun 2006 11:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 11:12:41 GMT]]></title><description><![CDATA[<p>Hei, Akari</p>
<p>also wenn ich es so mache:</p>
<pre><code class="language-cpp">Integer iCol,iRow,iB,iH; AnsiString z1,z2;                                     // Vars definieren
 TStringGrid *Grid;                                                             // TStringGrid vorbereiten

 Grid=frm14_grd6_Schrank;                                                       // StringGrid übergeben
 iCol=Grid-&gt;ColCount;                                                           // Anzahl Spalten
 iRow=Grid-&gt;RowCount;                                                           // Anzahl Zeilen

 iB=0; for(int i1=0;i1&lt;iCol;i1++) { iB=iB+Grid-&gt;ColWidths[i1];  }               // Breite aller Spalten?
 iH=0; for(int i1=0;i1&lt;iRow;i1++) { iH=iH+Grid-&gt;RowHeights[i1]; }               // Höhe   aller Zeilen?

 Form1-&gt;ExtPrgBmp-&gt;Width =iB;                                                   // Breite Image einstellen
 Form1-&gt;ExtPrgBmp-&gt;Height=iH;                                                   // Höhe   Image einstellen
 if(Form1-&gt;PrgComp==true) { ShowMessage(&quot;BxH = &quot;+IntToStr(iB)+&quot; x &quot;+IntToStr(iB)); } // nur im IDE zeigen

 TRect RectA;                                                                   // Rect  vorbereiten
 TGridDrawState State;                                                          // State vorbereiten

 for(int i1=0;i1&lt;iRow;i1++) {                                                   // alle Zeilen
  for(int i0=0;i0&lt;iCol;i0++) {                                                  // alle Spalten
   RectA=Grid-&gt;CellRect(i0,i1);                                                 // Rect der Zelle ermitteln
   GridZeichnen(99,i0,i1,RectA,State,frm14_grd6_Schrank);                       // und Zelle einzeln zeichnen (mit 99 in Grafik kopieren)
  }                                                                             // ende
 }

 z1=Form1-&gt;PrgPfad+&quot;\\Ablage\\Grafik_&quot;+frm14_lblSchrank-&gt;Caption+&quot;.bmp&quot;;        // Dateiname bilden
 Form1-&gt;ExtPrgBmp-&gt;SaveToFile(z1);                                              // Grafik sichern

 if(FileExists(Form1-&gt;PrgGrafEx)==false) { Form1-&gt;PrgGrafEx=&quot;mspaint.exe&quot;; }    // externes Prg. ggfs. korrigieren
 z2=Form1-&gt;PrgGrafEx+&quot; \&quot;&quot;+z1+&quot;\&quot;&quot;;                                             // ergänzen
 WinExec(z2.c_str(),SW_NORMAL);                                                 // Malprogramm aufrufen
</code></pre>
<p>Und in der Funktion GridZeichnen(...) unten das anhänge, dann<br />
bekomme ich auch nur den sichtbaren Bereich...?</p>
<pre><code class="language-cpp">if(p1==99) {                                                                   // Bitmap für externes Programm wird erzeugt
  Form1-&gt;ExtPrgBmp-&gt;Canvas-&gt;CopyRect(ARect, Grid-&gt;Canvas, ARect);
  //Grid-&gt;PaintTo(Form1-&gt;ExtPrgBmp-&gt;Canvas-&gt;Handle,ARect.Left,ARect.Top);
 }
</code></pre>
<p>Liegt das an den Rect Strukturen?<br />
Wenn ich statt der Schleifen oben nur ein Grid-&gt;Repaint(); nehme, dann flackert sich das StringGrid tot (und ich beim Zuschauen auch)...</p>
<p>Bin etwas ratlos... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074509</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Fri, 09 Jun 2006 11:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 11:21:46 GMT]]></title><description><![CDATA[<p>Hallo, VergissEs</p>
<p>das geht aber auch nur mit dem möglichen sichtbaren Bereich.<br />
Mein Problem: Das StringGrid kann eigentlich z.B. doppelte Bildschirm-<br />
höhe haben. Daher dachte ich es muss doch möglich sein, das zeichnen<br />
so umzulenken, daß es direkt in ein Image gezeichnet wird.</p>
<p>Dummerweise scheinen die Koords aber nicht übergeben zu werden,<br />
wenn die Zellen nicht mehr sichtbar sind... ?</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074521</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Fri, 09 Jun 2006 11:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 12:15:59 GMT]]></title><description><![CDATA[<p>Wenn du doch sowieso DrawCell für alle Zellen zum Zeichnen benutzt, dann brauchst du doch nur eine doppelte Schleife verwenden und das Rechteck selber bestimmen.</p>
<p>Also erstmal ein genügend großes Canvas (Spalten * Spaltenbreite, Zeilen*Zeilenbreite) bereitstellen und dann einfach jede Zelle darauf zeichnen...</p>
<pre><code class="language-cpp">for(int i=0; i&lt;Spalten; i++)
  for(int j=0; j&lt;Zeilen; j++)
  {
    Rect r(i*Spaltenbreite, j*Zeilenbreite, (i+1)*Spaltenbreite, (j+1)*Zeilenbreite);

    DrawCell(canvas, i, j, r, TGridDrawState());
  }
</code></pre>
<p>wobei DrawCell deine eigene Zeichenroutine ist, so daß im Ereignis für OnDrawCell einfach DrawCell(this-&gt;Canvas, Col, Row, Rect, State) aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074568</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 09 Jun 2006 12:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to StringGrid in Image - ClientRect? on Fri, 09 Jun 2006 12:26:17 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>so kann das StringGrid beliebig viele Zellen beliebiger Grösse haben;<br />
leicht unschön anzuschauen aber es funktioniert.</p>
<pre><code class="language-cpp">Integer ix,iy,iCol,iRow,iB,iH,iAktC,iAktR; AnsiString z1,z2;                   // Vars definieren
 TStringGrid *Grid;                                                             // TStringGrid vorbereiten
 Graphics::TBitmap *bmp  = new Graphics::TBitmap();                             // BMP  Image anlegen

 Grid =frm14_grd6_Schrank;                                                      // StringGrid übergeben
 iCol =Grid-&gt;ColCount;                                                          // Anzahl Spalten
 iRow =Grid-&gt;RowCount;                                                          // Anzahl Zeilen
 iAktC=Grid-&gt;LeftCol;                                                           // aktuelle linke Spalte?
 iAktR=Grid-&gt;TopRow;                                                            // aktuelle obere Zeile?

 iB=0; for(int i1=0;i1&lt;iCol;i1++) { iB=iB+Grid-&gt;ColWidths[i1];  }               // Breite aller Spalten?
 iH=0; for(int i1=0;i1&lt;iRow;i1++) { iH=iH+Grid-&gt;RowHeights[i1]; }               // Höhe   aller Zeilen?

 bmp-&gt;Width =iB;                                                                // Breite Image einstellen
 bmp-&gt;Height=iH;                                                                // Höhe   Image einstellen
 //if(Form1-&gt;PrgComp==true) { ShowMessage(&quot;BxH = &quot;+IntToStr(iB)+&quot; x &quot;+IntToStr(iB)); } // nur im IDE zeigen

 TRect RectA,RectB;                                                             // Rects vorbereiten
 TGridDrawState State;                                                          // State vorbereiten

 iy=0;                                                                          // Start Koordinate Y
 for(int i1=0;i1&lt;iRow;i1++) {                                                   // alle Zeilen
  Grid-&gt;TopRow=i1; ix=0;                                                        // Zeile
  for(int i0=0;i0&lt;iCol;i0++) {                                                  // alle Spalten
   Grid-&gt;LeftCol=i0;                                                            // Spalte neu einstellen

   RectA=Grid-&gt;CellRect(i0,i1);                                                 // Rect der aktuellen Zelle ermitteln
   GridZeichnen(1,i0,i1,RectA,State,frm14_grd6_Schrank);                        // und Zelle direkt einzeln zeichnen

   RectB=Rect(ix,iy,ix+RectA.Width(),iy+RectA.Height());                        // Rect für Image ermitteln
   bmp-&gt;Canvas-&gt;CopyRect(RectB, Grid-&gt;Canvas, RectA);                           // und Zelle in Image kopieren
   ix=ix+Grid-&gt;ColWidths[i0];                                                   // Breite dazuaddieren
  }                                                                             // ende for(i0
  iy=iy+Grid-&gt;RowHeights[i1];                                                   // Höhe dazuaddieren
 }                                                                              // ende for(i1

 Grid-&gt;LeftCol=iAktC;                                                           // aktuelle Spalte wieder einstellen
 Grid-&gt;TopRow =iAktR;                                                           // aktuelle Höhe   wieder einstellen

 z1=Form1-&gt;PrgPfad+&quot;\\Ablage\\Grafik_&quot;+frm14_lblSchrank-&gt;Caption+&quot;.bmp&quot;;        // Dateiname bilden
 bmp-&gt;SaveToFile(z1);                                                           // Grafik sichern
 delete bmp;                                                                    // und freigeben

 if(FileExists(Form1-&gt;PrgGrafEx)==false) { Form1-&gt;PrgGrafEx=&quot;mspaint.exe&quot;; }    // externes Prg. ggfs. korrigieren
 z2=Form1-&gt;PrgGrafEx+&quot; \&quot;&quot;+z1+&quot;\&quot;&quot;;                                             // ergänzen
 WinExec(z2.c_str(),SW_NORMAL);                                                 // Malprogramm aufrufen
</code></pre>
<p>Das Grid=frm14_grd6_Schrank; kann ersetzt werden mit einer Funktion und<br />
dann Übergabe des StringGrid als TObject:</p>
<pre><code class="language-cpp">TStringGrid *Grid  = dynamic_cast&lt;TStringGrid *&gt; (Sender);                     // Versuchen, Sender als StringGrid anzusprechen
</code></pre>
<p>Danke für alle Tips und Hinweise, Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074584</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Fri, 09 Jun 2006 12:26:17 GMT</pubDate></item></channel></rss>