CRichEditCtrl -> Textlänge herausfinden [GELÖST]



  • Hallihallo zusammen!

    Ich schlage mich jetzt seit geraumer Zeit mit einigen CRichEditCtrl-Feldern herum, die ich drucken möchte. Folgendes als Hintergrund: Es wird immer eine Überschrift gedruckt und dann der Inhalt eines CRichEditCtrls. D.h. der Bereich, auf dem das CRichEditCtrl auf dem Papier gedruckt wird, ist bei jedem Control anders und es kann auch schonmal vorkommen, dass ein CRichEditCtrl über mehrere Papier-Seiten gedruckt wird.
    Ich habe nun folgendes Problem: Wie finde ich heraus, ob das CRichEditCtrl vollständig gedruckt wurde oder ob nicht alles auf eine Seite passte?

    Ich benutze FormatRange. Vorher habe ich ja den bedruckbaren Bereich des Papiers in der FORMATRANGE-Struktur hinterlegt und den CDC der aktuellen Seite des Druckers. Wenn ich nun FormatRange aufrufe, wird mir das letzte gedruckte Zeichen zurückgegeben. Um zu überprüfen, ob dies das letzte Zeichne war, muss ich FormatRange anscheinend nochmal aufrufen (wenns fertig ist, wird der zurückgegebene Wert um 1 kleiner?!?). Damit habe ich ja aber schon den nächsten Bereich für die Ausgabe formatiert, allerdings wiederum auf der aktuellen Seite des Druckers und im falschen Bereich (unten auf der Seite).

    Kann mir jemand da weiterhelfen? Wie mache ich das mit dem drucken? Ich hatte die Idee, die Länge des Textes im RichEdit Ctrl mit GetTextLength() abzufragen und mit dem letzten zurückgegebenen Zeichen zu vergleichen, allerdings stimmen die beiden Werte nicht immer überein und ich weiß nicht, woran das liegt.

    Liebe Grüße,
    Meike *die hofft, dass sich irgendjemand im Druck-Dschungel auskennt*



  • Ach ja...und gleich noch eine Frage hinterher: Wie finde ich heraus, bis wo (auf dem Papier) gedruckt wurde? Also die Position, an der ich mit der nächsten Überschrift weitermachen kann?



  • Nach viel Rumprobieren und neuen Idee und verworfenen Ansätzen und und und...hats jetzt doch zumindest zum Teil geklappt. Ich weiß nicht, ob das jetzt die eleganteste Lösung ist (ich denke nicht ;-)), aber es tuts zumindest irgendwie!

    Für alle, die es interessiert: Ich habe eine zweite FORMATRANGE-Struktur angelegt und prüfe erst mit dieser Struktur und dem Aufruf

    m_edit_rtf_unsichtbar.FormatRange(&fr_tmp, FALSE);
    

    ob das Ende erreicht wurde, allerdings ohne auf den DCD schon zu zeichnen! Falls dann die Bedingungen für eine neue Seite erfüllt sind, mache ich den ganzen Rummel mit der eigentlichen FORMATRANGE-Struktur!

    Bleibt die Frage: Wie bekomme ich heraus, bis wohin gedruckt wurde?



  • Hat denn keiner eine Idee? *schnief*


  • Mod

    Es gibt doch GetWindowTextLength! Damit kannst Du doch die gesamte Länge prüfen.

    Zudem brauchst Du nur etwas googlen und die findest diesen perfrekten Artikel.
    http://www.codeproject.com/KB/printing/richeditprint.aspx



  • Oh suuuuuuuper, vielen vielen Dank! Ich werds gleich am Montag ausprobieren (war in der Zwischenzeit mit etwas anderem beschäftigt)!



  • Hallo Martin!

    Das Tutorial hat mir leider nicht besonders viel weitergeholfen. Es ist zwar gut und zeigt ausführlich, wie gedruckt wird - allerdings auch wieder nur jeweils auf die komplette Seite eines Blattes.

    Wie ich mit der Funktion GetWindowTextLength weiterkommen soll, ist mir auch noch nicht ganz klar. Wenn ich mit GetWindowTextLength die komplette Länge des Textes hole, kann ich zwar die Breite meines bedruckbaren Bereichs durch die Länge teilen und bekomme die Anzahl an Zeilen, die gedruckt wurde....aber dann brauche ich ja immer noch die Höhe jeder einzelnen Zeile, um zu berechnen, wie weit auf dem Blatt gedruckt wurde. Und die Höhe kann ja bei jeder Zeile unterschiedlich sein, je nach gewählter Schriftart und -größe!
    Und wenn ich einfach GetWindowTextLength aufrufe, wird bei der Berechnung der Anzahl der Zeilen doch auch kein durch den Benutzer hervorgerufener Zeilenumbuch beachtet? Wie bekomme ich den in meine Berechnung? Ist das ganze jetzt furchtbar kompliziert oder hab ich einfach so einen riesen Knoten im Kopf 😕



  • Für alle, die es (vielleicht irgendwann mal) interessiert:

    Ich habe einfach alle Überschriften mit den entsprechenden Inhalten darunter in ein einziges CRichEditCtrl-Element hineingepackt, alles schön entsprechend formatiert und dann diesen zusammengebastelten Inhalt ausgedruckt, da ich ja jetzt immer denselben Bereich auf dem Papier bedrucken kann.


Anmelden zum Antworten