Deutsch
Forum

RTF und Ausdrucken

 
- Seite 1 -



Thomas
Freier
Gefunden hatte ich von Andreas:
KompilierenMarkierenSeparieren
 $I Profalt.inc
'################################
'Drucken mit dem Richedit-Control
'################################
DEF StartDoc(2)      ! "gdi32","StartDocA"
DEF StartPage(1)     ! "gdi32","StartPage"
DEF EndPage(1)       ! "gdi32","EndPage"
DEF EndDoc(1)        ! "gdi32","EndDoc"
DEF CreateDC(4)      ! "gdi32","CreateDCA"
DEF DeleteDC(1)      ! "gdi32","DeleteDC"
DEF GetDeviceCaps(2) ! "gdi32","GetDeviceCaps"
DEF PrintDlg(1)      ! "comdlg32","PrintDlgA"
Declare Richedit&,RichDLL&,Ende&,Print&,Exit&,FileName$,Driver$,Printer$
Declare Horzres&,Vertres&,PixelsX&,PixelsY&,iWidthTwips&,iHeightTwips&
Declare iTextOut&,iTextLength&,DocName$
Declare PrinterDC&
Declare FormatRange#,PrintDLG#,cRect#
Declare DocInfo#
Dim FormatRange#,48
Dim DocInfo#,12
Clear DocInfo#
Dim PrintDLG#,66
Clear PrintDLG#
Dim cRect#,16
SetTrueColor 1
Window 0,0-640,480
CLS RGB(196,196,196)
Print& = CreateButton(%hwnd,"Drucken",500,40,80,24)
Exit& = CreateButton(%hwnd,"Ende",500,70,80,24)
RichEdit& = Create("RichEdit",%hwnd,"",0,2,460,430)
FileName$ = LoadFile$("Als RTF öffnen","*.RTF")

If FileName$ <> ""

    RTF("LoadRTF",Richedit&,Filename$)

EndIf

DocName$ = "Profan-RTFPrinter"

Whilenot Ende&

    Waitinput

    If GetFocus(Exit&)

        Ende& = 1

    ElseIf GetFocus(Print&)

        Long PrintDLG#,0  = 66
        Long PrintDLG#,4  = %hwnd
        Long PrintDLG#,20 = $0140'PD_RETURNDC,PD_PRINTSETUP
        PrintDlg(PrintDLG#)
        PrinterDC& = Long(PrintDLG#,16)

        If PrinterDC&

            HorzRes& = GetDeviceCaps(PrinterDC&,8)
            VertRes& = GetDeviceCaps(PrinterDC&,10)
            PixelsX& = GetDeviceCaps(PrinterDC&,88)
            PixelsY& = GetDeviceCaps(PrinterDC&,90)
            iWidthTwips& = Int((HorzRes&/PixelsX&))*1440
            iHeightTwips& = Int((VertRes&/PixelsY&))*1440
            Long cRect#,0 = 0
            Long cRect#,4 = 0
            Long cRect#,8 = iWidthTwips&
            Long cRect#,12 = iHeightTwips&
            Long DocInfo#,0 = 12
            Long DocInfo#,4 = ADDR(Docname$)
            Long FormatRange#,0 = PrinterDC&'HDC
            Long FormatRange#,4 = PrinterDC&'TargetHDC
            Long FormatRange#,8 = 0'linker Rand in Twips
            Long FormatRange#,12 = 0'oberer Rand in Twips
            Long FormatRange#,16 = iWidthTwips&'rechter Rand in Twips
            Long FormatRange#,20 = iHeightTwips&'unterer Rand in Twips
            Long FormatRange#,24 = 0'linker Rand in Twips
            Long FormatRange#,28 = 0'oberer Rand in Twips
            Long FormatRange#,32 = iWidthTwips&'rechter Rand in Twips
            Long FormatRange#,36 = iHeightTwips&'unterer Rand in Twips
            Long FormatRange#,40 = 0'CharRange-MIN
            Long FormatRange#,44 = -1'CharRange MAX ( -1 = alles )
            iTextOut& = 0
            iTextLength& = SendMessage(RichEdit&, 14, 0, 0)- SendMessage(RichEdit&,186,0,0)
            StartDoc(PrinterDC&,DocInfo#)

            Whilenot OR(iTextOut& >= iTextLength&,itextOut& = -1)

                StartPage(PrinterDC&)
                Long FormatRange#,44 = -1
                iTextOut& = SendMessage(RichEdit&, 1081, 1, FormatRange#)
                Long FormatRange#,40 = iTextOut&
                SendMessage(RichEdit&,1075,0,cRect#)
                EndPage(PrinterDC&)

            Wend

            EndDoc(PrinterDC&)
            SendMessage(RichEdit&, 1081, 1, 0)

        Endif

    Endif

EndWhile

Dispose FormatRange#
Dispose DocInfo#
Dispose PrintDLG#
DeleteDC(PrinterDC&)
End

Leider endet der Druck nach 3 Seiten. WordPad druckt alles. Wie geht's mit XProfan?

2.867 kB
Hochgeladen:06.10.2010
Ladeanzahl89
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
06.10.2010  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


Uwe
''Pascal''
Niemeier
Hi Thomas!

Anscheinend wird aus der FORMATRANGE-Struktur nicht nur der zu bedruckende Bereich ausgelesen, sondern nach dem Drucken auch der tatsächlich genutzte Bereich hinterlegt (oder sowas in der Art). Darum muß der betroffene Abschnitt der Struktur bei jedem Schleifendurchlauf neu bestückt werden.

SeeYou
Pascal

6 kB
Version:2
Kurzbeschreibung: RTF drucken
Hochgeladen:26.10.2010
Ladeanzahl151
Herunterladen
 
26.10.2010  
 



Und bei mir (win7) erscheinen die Bilder erst garnicht:



.

16 kB
Hochgeladen:06.10.2010
Ladeanzahl82
Herunterladen
 
06.10.2010  
 




Thomas
Freier
Sorry! In meinem Beispiel hatte ich die RTFHandling.pcu verwendet: [...] 
Hänge die wichtigen Teile an und der geänderte Script:
KompilierenMarkierenSeparieren
 $U RTFHandling.pcu = R_'TRF-PCU einbinden
 $U objects.pcu = R_
 $I Profalt.inc
'################################
'Drucken mit dem Richedit-Control
'################################
DEF StartDoc(2)      ! "gdi32","StartDocA"
DEF StartPage(1)     ! "gdi32","StartPage"
DEF EndPage(1)       ! "gdi32","EndPage"
DEF EndDoc(1)        ! "gdi32","EndDoc"
DEF CreateDC(4)      ! "gdi32","CreateDCA"
DEF DeleteDC(1)      ! "gdi32","DeleteDC"
DEF GetDeviceCaps(2) ! "gdi32","GetDeviceCaps"
DEF PrintDlg(1)      ! "comdlg32","PrintDlgA"
Declare Richedit&,RichDLL&,Ende&,Print&,Exit&,FileName$,Driver$,Printer$,Print_PCU&
Declare Horzres&,Vertres&,PixelsX&,PixelsY&,iWidthTwips&,iHeightTwips&
Declare iTextOut&,iTextLength&,DocName$
Declare PrinterDC&
Declare FormatRange#,PrintDLG#,cRect#
Declare DocInfo#
Dim FormatRange#,48
Dim DocInfo#,12
Clear DocInfo#
Dim PrintDLG#,66
Clear PrintDLG#
Dim cRect#,16
SetTrueColor 1
Window 0,0-1040,480
CLS RGB(196,196,196)
Print_PCU& = CreateButton(%hwnd,"Druck PCU",900,40,120,24)
Print& = CreateButton(%hwnd,"Druck direkt",900,80,120,24)
Exit& = CreateButton(%hwnd,"Ende",900,120,120,24)
Declare rtf_dll&,rtf_hdc&
rtf_dll& =  R_INTITFORCREATERTF()'DLL laden mit PCU
RichEdit& = R_CREATERICHEDIT(%hWnd,"",0,0,810,420)' Richedit erstellen mit PCU
rtf_hdc& = R_PREPAREFORLINEBREAK(RichEdit&)' Device Context erzeugen mit PCU
R_Init_object(RichEdit&)'Zum Bildempfang vorbereiten
FileName$ = R_RTFLOAD(RichEdit&)
DocName$ = "Profan-RTFPrinter"

Whilenot Ende&

    Waitinput

    If GetFocus(Exit&)

        Ende& = 1

    ElseIf GetFocus(Print_PCU&)

        R_RTFPrint(RichEdit&,0,0,0)' Print über die PCU

    ElseIf GetFocus(Print&)

        Long PrintDLG#,0  = 66
        Long PrintDLG#,4  = %hwnd
        Long PrintDLG#,20 = $0140'PD_RETURNDC,PD_PRINTSETUP
        PrintDlg(PrintDLG#)
        PrinterDC& = Long(PrintDLG#,16)

        If PrinterDC&

            HorzRes& = GetDeviceCaps(PrinterDC&,8)
            VertRes& = GetDeviceCaps(PrinterDC&,10)
            PixelsX& = GetDeviceCaps(PrinterDC&,88)
            PixelsY& = GetDeviceCaps(PrinterDC&,90)
            '     iWidthTwips& = Int((HorzRes&/PixelsX&))*1440 ' Original
            '     iHeightTwips& = Int((VertRes&/PixelsY&))*1440 ' Original
            iWidthTwips& = Int((HorzRes&/PixelsX&))*1450' geändert, nun ohne Umbruch in Zeile 1
            iHeightTwips& = Int((VertRes&/PixelsY&))*1240' geändert, nun alle Bilder gedruckt
            ' Bei weiteren Seiten werden dann allerdings nicht mehr alle gedruckt??
            Long cRect#,0 = 0
            Long cRect#,4 = 0
            Long cRect#,8 = iWidthTwips&
            Long cRect#,12 = iHeightTwips&
            Long DocInfo#,0 = 12
            Long DocInfo#,4 = ADDR(Docname$)
            Long FormatRange#,0 = PrinterDC&'HDC
            Long FormatRange#,4 = PrinterDC&'TargetHDC
            Long FormatRange#,8 = 0'linker Rand in Twips
            Long FormatRange#,12 = 0'oberer Rand in Twips
            Long FormatRange#,16 = iWidthTwips&'rechter Rand in Twips
            Long FormatRange#,20 = iHeightTwips&'unterer Rand in Twips
            Long FormatRange#,24 = 0'linker Rand in Twips
            Long FormatRange#,28 = 0'oberer Rand in Twips
            Long FormatRange#,32 = iWidthTwips&'rechter Rand in Twips
            Long FormatRange#,36 = iHeightTwips&'unterer Rand in Twips
            Long FormatRange#,40 = 0'CharRange-MIN
            Long FormatRange#,44 = -1'CharRange MAX ( -1 = alles )
            iTextOut& = 0
            iTextLength& = SendMessage(RichEdit&, 14, 0, 0)- SendMessage(RichEdit&,186,0,0)
            StartDoc(PrinterDC&,DocInfo#)

            Whilenot OR(iTextOut& >= iTextLength&,itextOut& = -1)

                StartPage(PrinterDC&)
                Long FormatRange#,44 = -1
                iTextOut& = SendMessage(RichEdit&, 1081, 1, FormatRange#)
                Long FormatRange#,40 = iTextOut&
                SendMessage(RichEdit&,1075,0,cRect#)
                EndPage(PrinterDC&)

            Wend

            EndDoc(PrinterDC&)
            SendMessage(RichEdit&, 1081, 1, 0)

        Endif

    Endif

EndWhile

R_DEINITRTF(RichEdit&,rtf_hdc&,rtf_dll&)'RTF-Aufräumen
R_DeInit_object()'RTF-Aufräumen
Dispose FormatRange#
Dispose DocInfo#
Dispose PrintDLG#
DeleteDC(PrinterDC&)
End

Beim Druck bin ich etwas weiter, aber nicht wiklich glücklich.
3 Seiten Muster ohne Rand oben ok. Ab 5 Seiten alter Fehler.

63 kB
Hochgeladen:06.10.2010
Ladeanzahl98
Herunterladen
6 kB
Hochgeladen:06.10.2010
Ladeanzahl83
Herunterladen
54 kB
Hochgeladen:06.10.2010
Ladeanzahl96
Herunterladen
234 kB
Hochgeladen:06.10.2010
Ladeanzahl196
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
06.10.2010  
 



Für die rtfhandling.pcu konnte ich die .def-Datei aus dem Originalpaket [...]  entnehmen, für die objects.pcu habe ich aber keine gefunden.

Bei mir drucken beide Optionen bis T.Radke auf 3 Seiten aber nicht das Wort "Ende.".

Vlt. sollte man das alles erstmal auf eine (überall-gleich-) funktionierende Basis reduzieren oder vlt. liegt das Problem am Ende des Dokumentes. ^^

Auch wenns mit dem Problem "RTF-Ausdrucken" nicht viel zu tun hat so ists am Ende vlt. einfacher einfach selbst zu drucken bzw. selbst die Seiten/ Bilder zu erzeugen. ^^

Lässt sich HTML einfacher drucken?

1.254 kB
Hochgeladen:06.10.2010
Ladeanzahl138
Herunterladen
1.254 kB
Hochgeladen:06.10.2010
Ladeanzahl118
Herunterladen
 
06.10.2010  
 




Thomas
Freier
Löst nicht die Aufgabe, dass das Dokument weiter gegeben werden soll, derjenige es eben mit Word oder WordPad öffnen und bearbeiten können soll. Einfach aus dem Programm drucken ist nicht das Problem und es müßte doch wie bei WordPad auch über XProfan möglich sein.
Dieter wird diese Zeilen ja auch lesen und vielleicht nach einer Lösung suchen.

Nachtrag: eine 26 seitige RTF mit reinem Text ist problemlos zu drucken.
 
Gruß Thomas
Windows XP SP2, XProfan X2
06.10.2010  
 



Irgendwas hab ich schonmal gefunden [...]  ^^
 
06.10.2010  
 




Thomas
Freier
Jo! Die Seite [...]  habe ich schon lange als Lesezeichen im Browser liegen. Kann aber nur wenig mangels Programmier- und Englischkenntnissen verwerten.
Bei reinen Textseiten läuft der Druck gesteuert über
KompilierenMarkierenSeparieren
While 1

    StartPage(PrinterDC&)
    Long FormatRange#,44 = -1
    iTextOut& = SendMessage(RichEdit&, 1081, 1, FormatRange#)
    Long FormatRange#,40 = iTextOut&
    SendMessage(RichEdit&,1075,0,cRect#)
    EndPage(PrinterDC&)
    case (iTextOut& >=iTextLength&) OR (itextOut& = -1): Break

EndWhile

ordentlich ab.
Hat die RTF aber nur Bilder, stimmt das Dokumentenende nicht mehr. Der Druck endet schon vorher.
Mit etwas Spielerei
KompilierenMarkierenSeparieren
var x%=1

While 1

    StartPage(PrinterDC&)
    Long FormatRange#,44 = -1
    iTextOut& = SendMessage(RichEdit&, 1081, 1, FormatRange#)
    Long FormatRange#,40 = iTextOut&
    SendMessage(RichEdit&,1075,0,cRect#)
    EndPage(PrinterDC&)
    case (iTextOut& > (iTextLength&+x%)) OR (itextOut& = -1): Break' OR ((itextOut&+1) = -1)
    x%=x%+2

Wend

konnte ich es so steuern, dass die zu erwarteten sieben Seiten mit Bildern alle ausgedruckt wurden. Hatte aber auch bei zu hohem x% bis zu 12.000 zusätzliche Leerseiten.
 
Gruß Thomas
Windows XP SP2, XProfan X2
08.10.2010  
 



Und wenn Du mal PrinterDC auch pro Schleifendurchgang neu erzeugst?

Nachtrag: Eher Quatsch da PrinterDC& = Long(PrintDLG#,16)
 
08.10.2010  
 



Ich glaub ich hab was, muss noch verifizzeln...
 
08.10.2010  
 



Trotz absolutem Chaos-Müll tue ich Dir das an weil das bei mir alle Seiten druckt bis zum Ende:

346 kB
Hochgeladen:08.10.2010
Ladeanzahl76
Herunterladen
4 kB
Hochgeladen:08.10.2010
Ladeanzahl75
Herunterladen
2.049 kB
Hochgeladen:08.10.2010
Ladeanzahl152
Herunterladen
 
08.10.2010  
 




Thomas
Freier
Im Moment komme ich damit nicht weiter. Erststart der text99.exe mit Drucker freePDF wurde die 1. Seite gedruckt. Als Drucker den Epson ausgewählt --> keine Reaktion. Als Drucker den Destiller gewählt --> keine Reaktion. Wieder freePDF gewählt --> nun auch keine Reaktion mehr. Werde mir am Abend die text99.xprf vornehmen und versuchen zu Druckergebnissen zu kommen.
 
Gruß Thomas
Windows XP SP2, XProfan X2
08.10.2010  
 



Ah eins sehe ich sofort - habe beim Übersetzen
KompilierenMarkierenSeparierenhdc... müsste hdcc heissen.

4 kB
Hochgeladen:08.10.2010
Ladeanzahl92
Herunterladen
346 kB
Hochgeladen:08.10.2010
Ladeanzahl80
Herunterladen
 
08.10.2010  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

17.127 Betrachtungen

Unbenanntvor 0 min.
Uwe Lang18.02.2024
H.Brill18.09.2020
boh111.09.2020
Alibre25.12.2019
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie