Net-srac Geschrieben 29. August 2001 Geschrieben 29. August 2001 Hi Leutz, ich schaff mich hier immernoch fleißig am drucken, und wollt etwas mehrseitig ausdrucken. Ich habe in OnPreparePrinting die pInfo->SetMaxPage(2) gestellt. Laut einem Buch hier soll das ja dann die Funktion onPrint 2x aufrufen richtig? Jetzt hab ich in OnPrint folgendes geschrieben. str++; pDC->StartPage(); // Endpreis wird formatiert und ausgegeben. endpreis.Format("Gesamtpreis %d", str); pDC->TextOut(0,0,endpreis); Er sollte doch jetzt auf die erste Seite eine Zahl schreiben, und auf die 2. die selbe Zahl um eins erhöht schreiben oder lieg ich da falsch. str ist als public member variable deklariert. Er schreibt mir aber auf beide Seiten die schon um eins erhöhte Zahl. Soll er doch aber nicht??! Kann mir jemand helfen? Zitieren
Crush Geschrieben 29. August 2001 Geschrieben 29. August 2001 Hi, Du mußt StartPage(); und EndPage(); für zwei Seiten auch zweimal aufrufen. Sonst wird wohl die Seitenformatierung nicht so richtig stimmen. Wahrscheinlich gibt er zweimal den letzten Stand der Seite aus! Kannst ja mal hier schaun. Du zwingst ihn also 2 Seiten zu drucken, gibst ihm aber nur eine Seite als Vorlage. http://www.fachinformatiker.de/cgi-bin/ubbcgi/ultimatebb.cgi?ubb=get_to pic&f=21&t=000121&counterhit=yes <FONT COLOR="#a62a2a" SIZE="1">[ 29. August 2001 13:43: Beitrag 2 mal editiert, zuletzt von Crush ]</font> Zitieren
Net-srac Geschrieben 30. August 2001 Autor Geschrieben 30. August 2001 Ja, das dacht ich auch schon, aber normalerweise wird ja, wenn ich die MaxPage auf 2 setze, OnPrint acuh 2x aufgerufen. Also werden 2 Seiten erzeugt, wenn ichs so mache funtzt es ja. if (pInfo->m_nCurPage == 1) str; if (pInfo->m_nCurPage == 2) str++; pDC->TextOut(0,0,str); Dann brauch ich auch kein StartPage. Weil er halt bei jedem Aufruf von OnPrint was unterschiedliches macht. .amaizing. Zitieren
Crush Geschrieben 30. August 2001 Geschrieben 30. August 2001 Mir fällt gerade auf, Du redest dauernd von einer Zahl aber irgendwie assoziiere ich mit str einen String? Sowas kann schnell zu mißverständnissen führen. Außerdem wenn sich str in OnPrint() befindet, mußt Du ihn unbedingt als static definieren, sonst weiß man nie was der Inhalt beim 2. Aufruf ist. <FONT COLOR="#a62a2a" SIZE="1">[ 30. August 2001 13:28: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
Net-srac Geschrieben 30. August 2001 Autor Geschrieben 30. August 2001 Ja, ok, das mit dem str der als Int deklariert ist, ist schon klar, aber ich hab ihn doch schon als Membervariable der Klasse deklariert in dem auch diese OnPrint() liegt. Er ist als public deklariert. Also müßte er doch, wenn er beim ersten lauf verändert wird sich auch den wert merken oder denk ich da falsch? Zitieren
Crush Geschrieben 30. August 2001 Geschrieben 30. August 2001 Nicht unbedingt. Eine Member-Variable ist nicht unbedingt eine Garantie, daß der Inhalt überall geshared und erhalten bleibt. Ich habe mal einen Resize() auf einen Dialog und die Komponenten gemacht und habe mich gewundert, warum der Wert manchmal überhaupt nicht gestimmt hat - obwohl auch als Member definiert. Static hat alles gerettet. Es kann sein, daß str bei jedem Aufruf von OnPrint() auf dem Stack als Variable neu angelegt wird. Nach verlassen von OnPrint() wird der Stack aufgeräumt und von anderen Funktionen verwendet - das wäre übel. Probiere mal einfach ein static davor zu schreiben. Vielleicht ist das des Pudels Kern! (seit wann haben eigentlich Pudel Kerne?) Static heißt übrigens, daß nur immer der gleiche Speicherplatz für eine Variable verwendet werden soll. Das Problem ist nur, daß wenn dieser Platz auf dem Stack ist (wegen Call by Value, z.B.), dann wird zwar tatsächlich immer die gleiche Position am Stack angesprochen, allerdings wird dieser ja jedesmal aufgelöst bei verlassen des Namensbereiches. Wird ausgerechnet dann (wieso auch immer) halt ausgerechnet an diese Adresse geschrieben, weil sie ja offiziell "frei" ist, dann klappt das nicht mehr. Die Variable darf also nicht innerhalb der Funktion definiert werden (auch wenn static) sondern im Header (am besten im Konstruktor), damit es wirklich keinen Ärger gibt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.