wieso druckt er nicht so wie ich will



  • hallo zusammen. ich habe da ein problem. und zwar habe ich ein array mit ca. 500 zahlenkombinationen. jetzt möchte ich diese aufs papier bringen. gedruckt soll aber von obne nach unten werden. ích muß also gucken wann ich unten am papier angekommen bin und wieder hochspringen in die nächste spalte. das ganze dann soweit bis die breite nicht mehr stimmt. dann soll eine neue seite genommen werden. das ganze habe ich folgendermassen programmiert:

    if(syszahlDrucken->Execute())
       {
    
          double fh,fw;
          String reihe;
          P->Orientation=poLandscape;
          P->Title="Systemzahlen Drucken";
    
          fh=P->PageHeight/210.0;
          fw=P->PageWidth/296.0;
          int ypos=int(5*fh);
          int xpos=int(5*fw);
          P->Canvas->Font->Size=8;
          P->BeginDoc();
    
          for(int i=0;i<(int)syszahlen.size();i++)
          {
             if(syszahlen[i].z1!=0)
             {
                    reihe="";
    
                    if(IntToStr(syszahlen[i].z1).Length()==1)reihe+=" ";
                    reihe+=IntToStr(syszahlen[i].z1)+"  ";
                    if(IntToStr(syszahlen[i].z2).Length()==1)reihe+=" ";
                    reihe+=IntToStr(syszahlen[i].z2)+"  ";
                    if(IntToStr(syszahlen[i].z3).Length()==1)reihe+=" ";
                    reihe+=IntToStr(syszahlen[i].z3)+"  ";
                    if(IntToStr(syszahlen[i].z4).Length()==1)reihe+=" ";
                    reihe+=IntToStr(syszahlen[i].z4)+"  ";
                    if(IntToStr(syszahlen[i].z5).Length()==1)reihe+=" ";
                    reihe+=IntToStr(syszahlen[i].z5)+"  ";
                    if(IntToStr(syszahlen[i].z6).Length()==1)reihe+=" ";
                    reihe+=IntToStr(syszahlen[i].z6);
    
                    if(P->Canvas->PenPos.x+P->Canvas->TextWidth(reihe) >= P->PageWidth)
                    {
                            P->NewPage();
                            ypos=int(5*fh);
                            xpos=int(5*fw);
                    }
                    if(P->Canvas->PenPos.y+P->Canvas->TextHeight(reihe) >= P->PageHeight)
                    {
    
                            xpos+=int(35*fw);
                            ypos=int(5*fh);
    
                    }
    
                    P->Canvas->TextOutA(xpos,ypos,reihe);
                    ypos+=int(5*fh);
    
             }
          }
          P->EndDoc();
    

    Nun zum problem. Die spalten länge wird richtig gedruckt. Leider geht das mit der breite irgendwie nicht. es wird dann nur die erste zeile von der spalte gedruckt und dann kommt schon die nächste seite. So sieht das ca aus:

    123456 ...... 123456
    123456
    123456
    123456
    122345
    ....
    ...
    .
    .

    was mache ich das falsch mit der x koordinate. ich weiß wirklich nicht mehr weiter. ich habe es auch schon aus viele büchern versucht und immer das gleich ergebnis.
    ich hoffe jemand kann mir helfen oder einen tip geben
    danke



  • Wieviele Spalten druckt er denn richtig (komplett bis unten)?

    Macht der den Seitenwechsel nach Zeile 1 in der 2. Spalte oder in der letzten?

    Falls in letzter:

    Die Spalte passt nicht ganz auf die Seite, der Test auf Breite ist aber VORHER!!!

    Vertausch mal die 2 if- Teile in der Reihenfolge!



  • nein, es passe auf eineer seite genau 8 spalten. er druckt aber genau sieben und bei der achten nur die erste zeile und springt dann in die nächste seite. ich habe auch schon die beiden if anweisungen vertauscht. ich kann mir das einfach nicht erklären. sowas habe ich nie gehabt. wenn er denn etwas abschneiden würde dann wäre das ja einfach. aber er schreibt genau die eine zeile hin und geht dann weite. wenn ich aber die x-begrenzung rausnehmen dann druckt er die acht spalte komplett aus nur leider paßt dann die neunte spalte nicht mehr ganz aufs blatt. und ab da soll er ja erst die neue seite nehmen.



  • Was kommt denn heraus, wenn Du die if's vertauschst???

    Der ist ev. nur durch rundungsfehler der Meinung, die Seite ist zu schmal???


Anmelden zum Antworten