Printing mit Print Dialog -> neues Blatt ?

MFC openGL

Erfahrenes Mitglied
Hi Mädels,

habe nochmal ein klitzekleines Problem. Ich habe mir so einen PrintingDialog erstellt, und dort jetzt meinen Report erstellt. Problem nur, wie kann ich dem sagen das ich jetzt auf eine Neue Seite schreiben will ?

Also wie komme ich von Blatt 1 auf Blatt 2 ?

Dieses "HasMorePages = true" produziert bei mir entweder endlos viele neue Blätter, oder garkeins :(

Oder muss man dann einfach über die Blattlänge hinaus schreiben ?

Gruß

MFC OpenGL
 
Dann muss ich irgend einen Fehler in meinem Code haben, denn so habe ich das gemacht :(

Werde jetzt mal mein Noti auf VS2005 umstellen, und dann nochmal schaun.

Danke Norbert.


Gruß

MFC OpenGL
 
PHP:
float lpp = 0;
float yPos = 0;
int count = 0;
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
String line = null;
string[] testtext = new string[101];
for (int i = 0; i < 100; i++)
testtext[i] = i.ToString();
testtext[70] = null;
//Work out the number of lines per page 
//Use the MarginBounds on the event to do this
lpp = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
//Now iterate over the file printing out each line 
//NOTE WELL: This assumes that a single line is not wider than the page width 
//Check count first so that we don't read line that we won't print 
while (count < lpp && ((line = testtext[count]) != null))
{
yPos = topMargin + (count * printFont.GetHeight(e.Graphics));
//Print Preview control will not work.
e.Graphics.DrawString(testtext[count], printFont, Brushes.Black, leftMargin,
yPos, new StringFormat());
count++;
}
//If we have more lines then print another page 
if (line != null)
e.HasMorePages = true;
else
e.HasMorePages = false;

So habe ich jetzt meinen Testcode... Der erzeugt einfach ein testtext mit der Zeilennummer, und soll beim 60. auf Seite 2 weiterschreiben. Problem, sofern er auf Seite 1 bleibt, geht alles reibungslos. Er schreibt seine X Zeilen und bricht dann ab... Seite okey... alles Super.

Aber wehe es soll eine 2. Seite geschrieben werden, wie jetzt oben im Code. Dann schreibt er unendlich viele neue Seiten, und kommt auf kein Ende :(

Ich verstehe einfach nicht wieso. Auch verstehe ich nicht, wieso der nach dem HasMorePages die Funktion schreinbar selbstständig nochmal aufruft (stört mich zwar nicht, aber wissen wieso würde ichs trotzdem gerne)

Kann einer von euch mal den Code bei sich reinpacken, und schaun das der dann an der 2. oder x. Seite auch anhält ? Das wäre echt klasse, weil ich echt kurz vor dem Verzweifeln bin.

Aso Norbert, das ist überigens der Code aus deinem Link. Nur soweit abgeändert das ich nicht aus einer Textdatei lese, sondern aus einem String.

Danke schonmal.

Gruss

MFC OpenGL
 
Hi Norbert,

Ups ;)

Habe die Count Varialbe in der Funktion gemacht... daran lags das er dann ne Endlosschleife hatte.

Aber mein Problem lößt er damit auch nicht.

Es wird zwar eine 2. Seite erzeugt, und dann beendet sich die Funktion auch, aber es wird nichts auf die 2. Seite geschrieben :(
Das Problem liegt an der While, da er durch das count < lpp keine 2. Seite beschreiben darf.

Kann ich den
"e.Graphics.DrawString(testtext[count], printFont, Brushes.Black, leftMargin,
yPos, new StringFormat());"
Befehl nicht irgendwie anweisen, das er auf die 2. Seite schreiben soll ? Das muss doch machbar sein.

Also das mit dem erzeugen der 2. Seite geht ja nun, aber das reinschreiben nicht.
An den Zählern kanns auch nicht liegen, habe die nun ausserhalb der Funktion deklariert. Bin total ratlos.

Gruss

MFC OpenGL
 
Wieso sollte er die zweite Seite nicht beschreiben dürfen? Dein Code wird doch für jede Seite erneut ausgeführt. Ergo wird auch deine Variable lpp wieder zurückgesetzt.

Vermutlich liegts auch daran, dass du dein testtext innerhalb von PrintPage definierst .. wird ja dann bei jeder neuen Seite wieder neu initialisiert etc.
 
Norbert Eder hat gesagt.:
Wieso sollte er die zweite Seite nicht beschreiben dürfen? Dein Code wird doch für jede Seite erneut ausgeführt. Ergo wird auch deine Variable lpp wieder zurückgesetzt.

Vermutlich liegts auch daran, dass du dein testtext innerhalb von PrintPage definierst .. wird ja dann bei jeder neuen Seite wieder neu initialisiert etc.

Nein Norbert, die Variablen sind außerhalb definiert, und da der testtext immer gleich ist, ist es egal wo der definiert wird.

Hast du den Code bei dir mal getestet ?
 
Hallo Darki!

Hab jetzt nicht so die Zeit um das mal schnell zu testen.
Ich würd aber sagen, dass wenn Du die Zeile
Code:
lpp = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
in
Code:
lpp +=e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
änderst, solltest Du bis zur letzten Zeile drucken können.
Wie Norbert schon sagte, lpp wir bei jedem Seitendruck zurück gesetzt.
Und count repräsentiert ja die gedruckten Zeilen...

lg, cosmo
 
Zurück