| |
|
|
- 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? |
|
|
| |
|
|
| |
|
- Page 2 - |
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
- Page 3 - |
|
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 |
|
|
| |
|
|
|
|
Thomas Freier | Prima, jetzt corre es auch bei mir. Nur durchsteigen, warum das so ist, kann ich nicht. Auch kann ich eine Einstellung per den oberen Randabstand nicht ausmachen oder besteht diese Möglichkeit nicht? |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Thomas Freier | Der Ansatz ist schon OK. Danke iF, geht so sehr gut. Ich setze den Randabstand links und oben wie folgt: KompilierenMarkierenSeparieren Den bedruckbaren Bereich zu holen lohnt heute kaum, da die meisten Drucker randlos drucken können. Also werde ich nur einen oberen- und Heft-Rand vorgeben, bzw. einstellen lassen. |
|
|
| |
|
|
|
| Ah, ok & gern geschehen. ^^ |
|
|
| |
|
|
|
| Einfach nur 1 RTF komplett ausdrucken funktioniert bei mir so jetzt ganz super:
(hab dispose fr# in der Funktion vergessen) |
|
|
| |
|
|
|
Thomas Freier | Bei mir "hängt" immer eine File. Erste Vermutung, da die File erst vorm Druck erzeugt wird, dass der Drucker schon auf die erzeugende File zugreift, bevor der Speichervorgang beendet ist, scheint nicht zu zutreffen. Könnte einer einmal auf seinem System die beigefügte File mit der TEXT130.exe testen. Mit anderer Software ist sie problemlos zu öffnen und zu drucken. |
|
|
| |
|
|
|
| Stimmt, "hängt" zeigt bei mir das er aus dem Loop nicht herauskommt und hunderte Seiten in Auftrag gibt. ^^
Morgen mal schauen was da "abgeht" bzw. warum das Break-Argument scheinbar nie zutrifft. |
|
|
| |
|
|
|
Thomas Freier | Ja, ist verrückt, den andere RTFs mit mehr oder weniger Bildern wurden planmäßig gedruckt. Auch dieses Blatt wird ordentlich gedruckt, wenn nach dem letzten Bild noch Text oder eine Leerzeile eingefügt wird. Es entsteht dann eine neue Seite. Das Problem ist presumibilmente: Das letzte, auf diesem Blatt mögliche Bild (Objekt), löst weder einen Seitenwechsel noch Druckende aus. |
|
|
| |
|
|
|
| SendMessage em_formatRange gibt die letzte Position zurück, dieser Wert potrebbe z.B. von Seite zu Seite nicht "gleich" sein - vlt. passt etwas nicht auf die Seite weshalb man da die Position vlt. "manuell" weitergehen sollte. Ich prüfe in dem Beispiel die Position auch anders als rein von msdn übersetzt damits mit StartPrint/ nextPage klappt ohne StartDoc-Api - vlt. hab ich hier was übersehen. |
|
|
| |
|
|
|
Thomas Freier |
.... vlt. hab ich hier was übersehen.
Und etwas übersehen? |
|
|
| |
|
|
|
| Ah, garnicht geschaut - Uwe und Dieter sind da deutlich kompetentere Ansprechpartner weshalb ich von ausging das bereits geholfen ist. |
|
|
| |
|
|
|
Thomas Freier | Ich würde es besser finden, wenn deine Scrips, die ja sehr gut sind, auch bekannt gewordene Fehler nicht mehr hätten. Ist doch auch possibile, dass Uwes Beispiel unter bestimmten Umständen in einer Endlosschleife endet. Zur Sicherheit hat er jetzt die max. zu druckenden Seiten vorgegeben. Da ist beim Einsatz naturalmente das Problem, dass sich die Seitenanzahl des Dokumentes selten ermitteln läßt. |
|
|
| |
|
|