Forum | | | | - 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? |
| | | | |
| | « 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 |
| | | | | |
| | | Und bei mir (win7) erscheinen die Bilder erst garnicht:
. |
| | | | |
| | 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. |
| | | | |
| | | 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? |
| | | | |
| | 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. |
| | | | |
| | | Irgendwas hab ich schonmal gefunden [...] ^^ |
| | | | |
| | 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 ordentlich ab. Hat die RTF aber nur Bilder, stimmt das Dokumentenende nicht mehr. Der Druck endet schon vorher. Mit etwas Spielerei KompilierenMarkierenSeparieren 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. |
| | | | |
| | | Und wenn Du mal PrinterDC auch pro Schleifendurchgang neu erzeugst?
Nachtrag: Eher Quatsch da PrinterDC& = Long(PrintDLG#,16) |
| | | | |
| | | Ich glaub ich hab was, muss noch verifizzeln... |
| | | | |
| | | Trotz absolutem Chaos-Müll tue ich Dir das an weil das bei mir alle Seiten druckt bis zum Ende: |
| | | | |
| | 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. |
| | | | |
| | |
| | | | |
|
AntwortenThemenoptionen | 17.127 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |