StringGrid drucken im Querformat
-
hi,
ich möchte einfach alle Datensätze eines StringGrids im Querformat drucken,
mein Ansatz bisher lautet:
int x =0; //breite int y= 0; //höhe AnsiString druckstring; if(PrintDialog1->Execute()) { Printer()->BeginDoc(); x=500; y=10; for(int zeile=0;zeile<Form1->StringGrid1->RowCount;zeile++) { druckstring+=Form1->StringGrid1->Rows[zeile]->Text ; } Printer()->Canvas->TextOut(x,y, druckstring); Printer()->EndDoc(); }Kann mir wer helfen ? weil irgendwie druckt er nur die letzte zeile mitten ins blatt !
In der Hilfe finde ich leider nichts brauchbares !
-
Hallo
dein Problem : TextOut gibt keine mehrzeiligen Texte aus.
- Lösung eins :
du gibst die einzelnen Zeilen in deiner For-Schleife direkt mit TextOut aus, wobei du y jedesmal um Zeilenhöhe erhöhst
- Lösung zwei :
du ersetzt TextOut durch die WinAPI-Funktion DrawText :TRect Rect; Rect.left = ... Rect.top = ... Rect.right = ... Rect.bottom = ... // Koordinaten des Rects festlegen, in dem der Text ausgegeben werden soll DrawText(Printer()->Canvas->Handle,druckstring.c_str(), -1, &Rect, DT_WORDBREAK);bis bald
akari
-
hab meinen Code jetzt mal nach deinem Vorschlag angepasst,
aber leider bekomm ich nur noch ein leeres blatt
void __fastcall TForm1::Button2Click(TObject *Sender) { TRect Rect; Rect.left = 100; Rect.top = 100; Rect.right = 100; Rect.bottom = 100; // Koordinaten des Rects festlegen, in dem der Text ausgegeben werden soll AnsiString druckstring; if(PrintDialog1->Execute()) { Printer()->BeginDoc(); for(int zeile=0;zeile<Form1->StringGrid1->RowCount;zeile++) { druckstring+=Form1->StringGrid1->Rows[zeile]->Text ; } DrawText(Printer()->Canvas->Handle,druckstring.c_str(), -1, &Rect, DT_WORDBREAK); Printer()->EndDoc(); } }Hast du evtl ne erklärung dafür `?
Also druckstring enthält deinitiv Werte
-
Hallo
TRect Rect;
Rect.left = 100;
Rect.top = 100;
Rect.right = 100;
Rect.bottom = 100;dieses Rechteck hat ja gar keine Fläche!
TRect Rect; Rect.left = 100; Rect.top = 100; Rect.right = Rect.left + <gewünschte Breite>; Rect.bottom = Rect.top + <gewünschte Höhe>;bis bald
akari
-
TRect Rect;
Rect.left = 100;
Rect.top = 100;
Rect.right = Rect.left + 640;
Rect.bottom = Rect.top + 480;irgendwie komm ich damit nicht zurecht,
ich bekomm immer nur 2 cm ausgedruckt !??????
-
Hallo
probier mal
[cpp]DrawText(Printer()->Canvas->Handle,druckstring.c_str(), -1, &Rect, DT_WORDBREAK + DT_CALCRECT);
[/cpp]
ansonsten nimm mal die erste Lösung.bis bald
akari
-
@aepfl
Dein Rechteck ist vielleicht etwas klein.
Schau dir doch mal das Beispiel in der BCB-Hilfe zu TPrinter::PageHeight an.
-
aepfl schrieb:
ich möchte einfach alle Datensätze eines StringGrids im Querformat drucken
Querformat kann man beim Drucker einstellen
-> siehe Printer()->Orientation in der BCB-Hilfe