wxWidgtes, PrinterDC, Vorschau und Seitenränder



  • Hallo,

    dieses Forum ist jetzt meine letze Hoffnung. Seit einigen Tagen versuche ich meine Anwendung eine Druckroutine zu spendieren. Dabei bin ich auf verschiedene Probleme gestossen.

    Ich habe einen gültigen PrinterDC und meine Daten darauf geschrieben. Soweit klappt es auch wunderbar, nur möchte ich jetzt eine Druckvorschau realisieren, aber ich komme mit dem wxPrintout Objekt nicht zurecht. Scheinbar muss ich bei der OnPrintPage Funktion mir den DC mittels GetDC() holen und dann wieder darauf schreiben. Ich habe aber bereits ein DC fertig. Geht das nicht irgendwie anders ?

    Das zweite Problem was ich habe, sind die Druckränder des Druckers. Fast alle Drucker haben einen nicht bedruckbaren Bereich. Wenn ich jetzt eine 10 cm lange Linie bei den Koordinaten 0, 10 male, dann drucken einige Drucker diese Direkt am Rand und andere erst nach einen 5 mm Rand. Die Ergebnisse sind immer unterschiedlich. Kann ich diese Druckränder auslesen ? Am besten auch ohne einem Dialog, weil eingige Druckvorgänge automatisch erfolgen sollen.

    Ich habe die Anleitung jetzt rauf und runter gelesen und habe schon rot tränende Augen, aber ich bin keinen Schritt weitergekommen 😞

    Viele Grüße

    SciFi

    [Edit]
    Die Seitenränder kann ich nun ermittelm, indem ich ich mir die Grösse des Zeichenbereiches mittels dc->GetSizeMM() hole. Da die Grösse eines A4 Blattes bekannt ist ergibt sich (A4Original - GetSizeMM()) / 2 der Seitenrand. *puh* Bleibt nur noch die Druckvorschau 😕
    [/edit]



  • Vielleicht kennst du's ja schon, aber wenn nicht:
    das offizielle wxWigets-Buch hat ein paar Seiten ueber Druckvorschau. Du findest das Buch unter http://www.phptr.com/promotions/promotion.asp?promo=1484 zum Download.



  • Da steht das gleiche wie im Handbuch. Zudem gibt es dort auch eine Routine die auf das DC von dem wxPrintout schreibt.

    Trotzdem Danke 🙂



  • SciFi schrieb:

    Ich habe einen gültigen PrinterDC und meine Daten darauf geschrieben. Soweit klappt es auch wunderbar, nur möchte ich jetzt eine Druckvorschau realisieren, aber ich komme mit dem wxPrintout Objekt nicht zurecht. Scheinbar muss ich bei der OnPrintPage Funktion mir den DC mittels GetDC() holen und dann wieder darauf schreiben. Ich habe aber bereits ein DC fertig. Geht das nicht irgendwie anders ?

    Der DC für die Druckvorschau ist, wie in der Doku nachzulesen, ein wxMemoryDC.
    Und genau genommen sehe ich dein Problem auch nicht so wirklich. Du wirst doch irgendwie, irgendwo ein Funktion/Methode à la void Foo::print( wxDC dc )* oder so ähnlich haben, oder?



  • Die Druckvorschau scheint _nur_ mit der wxPrintout Klasse zu Funktionieren. Man selber muss eine eigene Klasse schreiben und dort einige Funktionen ableiten. Das Framework ruft dann die Funktion OnPrintPage auf und als Parameter erhält man die Seite, welche gedruckt werden soll. Danach kann man mit der Methode GetDC() sich ein das DC holen und die entsprechende Seite malen. Das stellt mich vor ein Problem, weil ich gar nicht weiss, wieviele Seiten das sind, da der Druckvorgang durch ein Script gesteuert wird. Erst wenn dieses durchgelaufen ist, kenne ich die Seitenanzahl. Ich kann mit dem PrinterDC direkt drucken. Das ist kein Problem, aber ich suche eine Möglichkeit das vorhandene DC in die Vorschau einzubauen und nicht irgendwie alles nochmal zu Zeichnen 😕



  • SciFi schrieb:

    Die Druckvorschau scheint _nur_ mit der wxPrintout Klasse zu Funktionieren. [...]

    www.wxwidgets.org/manuals/2.6.3/wx_wxprintout.html#wxprintoutgetdc

    SciFi schrieb:

    Das stellt mich vor ein Problem, weil ich gar nicht weiss, wieviele Seiten das sind, da der Druckvorgang durch ein Script gesteuert wird. Erst wenn dieses durchgelaufen ist, kenne ich die Seitenanzahl.

    Kannst du dich nicht ein wenig ungenauer ausdrücken? Ist ja nicht auszuhalten wie konkret und präzise du dein Problem darlegst...
    Was heisst "wird durch ein Script gesteuert"? Wie läuft das ganze denn ab?



  • finix schrieb:

    www.wxwidgets.org/manuals/2.6.3/wx_wxprintout.html#wxprintoutgetdc

    Das hatte ich bereits geschrieben :
    *
    Danach kann man mit der Methode GetDC() sich ein das DC holen und die entsprechende Seite malen
    *

    Ich weiss ehrlich gesagt nicht wie ich es anders schreiben soll. Eigentlich ist es ganz einfach. Ich habe ein fertiges PrinterDC. Egal woher, egal womit. Ich suche nur eine Möglichkeit dieses DC in ein wxPrintout Objekt einzubauen.
    Das DC von der Klasse ist _leer_ und muss bemalt werden und zwar immer die Seite die das Framework haben will.



  • SciFi schrieb:

    finix schrieb:

    www.wxwidgets.org/manuals/2.6.3/wx_wxprintout.html#wxprintoutgetdc

    Das hatte ich bereits geschrieben :
    *
    Danach kann man mit der Methode GetDC() sich ein das DC holen und die entsprechende Seite malen
    *

    Ich weiss ehrlich gesagt nicht wie ich es anders schreiben soll. Eigentlich ist es ganz einfach. Ich habe ein fertiges PrinterDC. Egal woher, egal womit. Ich suche nur eine Möglichkeit dieses DC in ein wxPrintout Objekt einzubauen.
    Das DC von der Klasse ist _leer_ und muss bemalt werden und zwar immer die Seite die das Framework haben will.

    Sag mal kannst du nicht lesen? 🙄

    wxWidgets Manual schrieb:

    wxPrintout::GetDC

    wxDC * GetDC()

    Returns the device context associated with the printout (given to the printout at start of printing or previewing). This will be a wxPrinterDC if printing under Windows, a wxPostScriptDC if printing on other platforms, and a wxMemoryDC if previewing.

    Naja, wie auch immer, wünsch dir noch viel Glück bei deiner Problemlösung, vielleicht findet sich ja noch ein in der Programmierung bewandertes Medium 💡 🙄 👍



  • Sorry, aber Du verstehst es nicht. Welches DC ich bekomme ist mir eigentlich wurscht. Ich _habe_ bereits ein fertiges und möchte die Daten nicht _nochmal_ zeichnen. Ich kann dem printout kein DC übergeben.



  • Heh... dein Wahrnehmungsvermögen möcht ich haben. An dir rauscht ja alles vorbei!

    Ich verzieh mich lieber aus dem Thread, sonst muss ich mir wieder mal anhören ich sei ein arrogantes Arschloch...



  • finix schrieb:

    Heh... dein Wahrnehmungsvermögen möcht ich haben. An dir rauscht ja alles vorbei!

    Ich verzieh mich lieber aus dem Thread, sonst muss ich mir wieder mal anhören ich sei ein arrogantes Arschloch...

    ohne worte.


Anmelden zum Antworten