Mehrere Strings auf einer Seite drucken!



  • Hallo alle zusammen,

    ich habe ein Problem beim drucken meiner Liste, und zwar ich bekomme nur die letzte Zeile ausgedruckt, obwohl der Dokument enthält 4 Zeilen.
    Hier ist mein Code:

    void __fastcall TForm1::FilePrintSetup1Accept(TObject *Sender)
    {
    TStringList *meine_liste = new TStringList(); 
    meine_liste->LoadFromFile("liste.txt");  //Inhalt des Dokumentes in die Liste laden
    
    TPrinter *Prntr = Printer();
      TRect r = Rect(200,200,(Prntr->PageWidth)-200,(Prntr->PageHeight)-200);
      Prntr->BeginDoc();
      for(int i=0; i<4; i++)
            {
            Prntr->Canvas->TextRect(r, 200, 200, meine_liste->Strings[i]);
            }
            Prntr->EndDoc();
    
    delete meine_liste;
    }
    

    Was mach ich falsch?



  • Du druckst schon alle 4 Zeilen, allerdings immer wieder an die gleiche Stelle auf dem Blatt...



  • Hallo,

    aber wenn das so ist, dann würde die Ausgedruckte Zeile nicht lesbar sein, oder anders gesagt würde der Drucker vier mal an der selber Stelle drucken, aber der Druckt auf dem Blatt ganz sauber nur die letzte zeile aus.

    Oder verstehe ich das falsch?



  • Hallo

    TextRect zeichnet immer erst das angegebene Rechteck als Hintergrund in der aktuellen Hintergrundfarbe, dann die Schrift drüber.
    Das heißt jedesmal wird die alte Schrift komplett abgedeckt, dann die neue drüber geschrieben.

    bis bald
    akari



  • ich hab mein Code angepasst, dass bei jedem Schleifendurchlauf der TextRect um Wert 10 nach unten verschoben wird und ich bekomme nur zwei Zeilen ausgedruckt und immer die gleiche letzte Zeile.

    void __fastcall TForm1::FilePrintSetup1Accept(TObject *Sender)
    {
    TStringList *meine_liste = new TStringList(); //Speicher reservieren
    meine_liste->LoadFromFile("liste.txt");  //Inhalt des Dokumentes in die Liste laden
    
    TPrinter *Prntr = Printer();
      TRect r = Rect(200,200,(Prntr->PageWidth)-200,(Prntr->PageHeight)-200);
      Prntr->BeginDoc();
      static int j = 200;
      for(int i=0; i<4; i++)
            {
            Prntr->Canvas->TextRect(r, 200, j, meine_liste->Strings[i]);
            j += 10;
            }
            Prntr->EndDoc();
    
    delete meine_liste; //Speicher freigeben
    }
    

    Was ist noch falsch?



  • Frag doch mal den Debugger.. damit findet sich der fehler bestimmt einfacher





  • Hallo Christian,

    ist dieser "Quickie" von Dir?
    Was ich dort nicht verstehe ist Deine Berechnungsmethode für die Zeilenhöhe!

    Warum machst Du das nicht mit der Funktion "TCanvas::TextExtent"?

    Kommt mir ein wenig "verwirrend" vor 🙂

    Gruß,
    Robert



  • Joo, der ist von mir. Mich verwirrt es nicht



  • Hi,

    🙂 - kannst Du mir das mal erklären? Warum multiplizierst du das ganze dann mit 1,4? Verstehe ich nicht ganz 🙂

    Gruß,
    Robert



  • Die Höhe des Fonts ist das eine -> das sollte den Zeilenabstand ergeben.


Log in to reply