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


Anmelden zum Antworten