Italia
Foro

RTF und Ausdrucken

 
- Page 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#
DeleteDCan>PrinterDC&)
End

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

2.867 kB
Hochgeladen:06.10.2010
Downloadcounter89
Download
 
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
Downloadcounter151
Download
 
26.10.2010  
 



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



.

16 kB
Hochgeladen:06.10.2010
Downloadcounter82
Download
 
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=s2>(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
Downloadcounter98
Download
6 kB
Hochgeladen:06.10.2010
Downloadcounter83
Download
54 kB
Hochgeladen:06.10.2010
Downloadcounter96
Download
234 kB
Hochgeladen:06.10.2010
Downloadcounter196
Download
 
Gruß Thomas
Windows XP SP2, XProfan X2
06.10.2010  
 



Für die rtfhandling.pcu konnte ich die .def-File aus dem Originalpaket [...]  entnehmen, per 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
Downloadcounter138
Download
1.254 kB
Hochgeladen:06.10.2010
Downloadcounter118
Download
 
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 circa XProfan possibile 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 corre der Druck gesteuert circa
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

E
e
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
Downloadcounter76
Download
4 kB
Hochgeladen:08.10.2010
Downloadcounter75
Download
2.049 kB
Hochgeladen:08.10.2010
Downloadcounter152
Download
 
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
Downloadcounter92
Download
346 kB
Hochgeladen:08.10.2010
Downloadcounter80
Download
 
08.10.2010  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

16.989 Views

Untitledvor 0 min.
Uwe Lang18.02.2024
H.Brill18.09.2020
boh111.09.2020
Alibre25.12.2019
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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