Forum | | | | - Seite 1 - |
| Thomas Freier | Alle Eigenversuche schlugen fehl. Hat einer einen Vorschlag, wie zwei RTFs fester Größe und eine Dritte beliebig lang ausgedruckt werden können. Analog eines Beispiel von Uwe 'Pascal' wird hier nur eine Seite gedruckt. Aber wie geht's weiter? KompilierenMarkierenSeparieren $H Windows.ph
$H RichEdit.ph
$U RTFHandling.pcu = R_'RTF-PCU einbinden
$U objects.pcu = R_
proc DrawRichText2'---------------------------------------------------------DrawRichText2
parameters RTF&,PosX%,PosY%,MaxX%,MaxY%'--Position + Grösse in Pixeln!
declare PrinterDpiX%,PrinterDpiY%
declare WindowDpiX%,WindowDpiY%
declare fx!,fy!
if %printing'--Bei Druck: %HDC2 = %HDC = &PDC
~SetMapMode(%hdc2,1)
~SetWindowExtEx(%hdc2,1,1,0)
~SetViewPortExtEx(%hdc2,1,1,0)
PosX%=PosX%+30'--Korrektur ???
PosY%=PosY%+30'--Korrektur ???
endif
PrinterDpiX%=~GetDeviceCaps(%hdc2,~LOGPIXELSX)'--dpi X des Druckers
PrinterDpiY%=~GetDeviceCaps(%hdc2,~LOGPIXELSY)'--dpi X des Druckers
WindowDpiX%=~GetDeviceCaps(~GetDC(%hwnd),~LOGPIXELSX)'--dpi X des Bildschirms (!)
WindowDpiY%=~GetDeviceCaps(~GetDC(%hwnd),~LOGPIXELSY)'--dpi Y des Bildschirms (!)
PosX%=int(PosX%/WindowDpiX%*1440)
PosY%=int(PosY%/WindowDpiX%*1440)
MaxX%=int(MaxX%/WindowDpiX%*1440)
MaxY%=int(MaxY%/WindowDpiX%*1440)
declare Range#
dim Range#,48
clear Range#
long Range#, 0=%hdc2,%hdc2
long Range#, 8=PosX%,PosY%,PosX%+MaxX%,PosY%+MaxY%
long Range#,24=PosX%,PosY%,PosX%+MaxX%,PosY%+MaxY%
long Range#,44=-1
sendmessage(RTF&,~EM_FORMATRANGE,1,Range#)
if %printing
fx!=~GetDeviceCaps(%hdc2,~LOGPIXELSX)/300
fy!=~GetDeviceCaps(%hdc2,~LOGPIXELSY)/300
~SetMapMode(%hdc2,~MM_ANISOTROPIC)
~SetWindowExtEx(%hdc2,6400,9600,0)
~SetViewPortExtEx(%hdc2,int(2200*fx!),int(3300*fy!),0)
endif
dispose Range#
casenot %printing:repaint
endproc'---------------------------------------------------------------------------------
window 0,0-%maxX,800
var rtf_dll& = R_INTITFORCREATERTF()'DLL laden mit PCU
var _RichEdit& = R_CREATERICHEDIT(%hwnd,"",70,0,350,100,9000)' Richedit erstellen mit PCU
RTF("LoadRTF",_RichEdit&,"Bootsplatz.rtf")
var __RichEdit& = R_CREATERICHEDIT(%hwnd,"",480,0,280,100,9000)' Richedit erstellen mit PCU
RTF("LoadRTF",__RichEdit&,"Label 105x42.rtf")
var RichEdit& = R_CREATERICHEDIT(%hwnd,"",0,102,800,400,9000)' Richedit erstellen mit PCU
var rtf_hdc& = R_PREPAREFORLINEBREAK(RichEdit&)' Device Context erzeugen mit PCU
R_Init_object(RichEdit&)'Zum Bildempfang vorbereiten
RTF("LoadRTF",RichEdit&,"Bilder-Album.rtf")
startprint "*xx"
DrawRichText2 _RichEdit&,80,10,400,150
DrawRichText2 __RichEdit&,500,10,250,150
DrawRichText2 RichEdit&,0,150,800,14900
endprint
waitkey
R_DEINITRTF(RichEdit&,rtf_hdc&,rtf_dll&)'RTF-Aufräumen
R_DEINITRTF(_RichEdit&,rtf_hdc&,rtf_dll&)
R_DEINITRTF(__RichEdit&,rtf_hdc&,rtf_dll&)
R_DeInit_object()'RTF-Aufräumen
End
Rest in der zip. |
| | | | |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | Uwe ''Pascal'' Niemeier | Hi Thomas!
Also ist "RTF in RTF per OLE" für's Ausdrucken schon mal OK? Und es scheitert daran, daß die eingebetteten RTFs (die zusammen ja so 'ne Art Briefkopf bilden) nicht bearbeitet werden können, wenn kein Word vorhanden ist?
Habe das mit dem Drucken mal getestet; allerdings nur im MS Image Writer, weil ich momentan keinen "echten" Drucker zur Verfügung habe. Sieht exakt so aus wie per Wordpad ausgedruckt. Sollte also brauchbar sein. Siehe Anhang.
Mit dem Bearbeiten ohne Word: Mal sehen...
Noch ein Wort zu dem Code am Anfang dieses Threads: Der wurde ursprünglich entwickelt, um ein Bild während des Druckens in ein Dokument ohne OLE-Unterstützung einzublenden. Darum finden sich darin verschiedene APIs zur Größenanpassung, die zum Drucken reiner Dokumente (mit OLE) nicht nötig sind (hoffe ich zumindest).
SeeYou Pascal |
| | | | | |
| | | Hallo Thomas,
funktioniert die Lösung aus diesem Thread [...] bei Dir um eine komplette RTF auszudrucken und hilft Dir diese? |
| | | | |
| | Thomas Freier | Hallo iF,
im Moment nicht. Manipulationen meinerseits waren erfolglos und was ist mit gemeint: "hilft Dir diese?" . Auch mit der Lösung aus dem Thread bin ich noch nicht glücklich. Bei mir sind nach dem Druck die Zeilen zerstückelt. |
| | | | |
| | | Bild print-ende.jpg zeigt wohl das eine zu geringe Breite gesetzt ist - drum wirds alles so nach links gefercht.
Vlt. sollten wir erstmal das reine normale einfache RTF-Ausdrucken "sauber" und "überall" hinbekommen und darauf aufbauend dann solche Specials wie hier im Thread behandeln.
Ich würde sagen zurück zu dem alten Thread wenn das Programm dort nicht tut was es soll und dann vlt. darauf aufbauen.
Deinen obigen Code kann ich mir erst heute Abend richtig ansehen und testen. |
| | | | |
| | Thomas Freier | Ja, sehe ich auch so. Diese Umbrüche sind aber auch bei der Text99. Merkwürdig aber auch, wenn die Datei vorm Druck gespeichert und danach erneut geladen wird, bleiben die Veränderungen bestehen sind aber so nicht in der gespeicherten Datei. Der Versuch die gespeicherte Datei zum Druck in ein zu diesem Zwecke erstelltes KompilierenMarkierenSeparieren zu legen, endet immer mit Schutzverletzung (RTF.pcu). Mal sehen wie ich das behebe. |
| | | | |
| | | Ok verstehe, auch wenns ichs noch nicht überschaue. ^^ |
| | | | |
| | | Druckt dieser Code denn wenigstens die erste Seite halbwegs korrekt? KompilierenMarkierenSeparieren'{$cleq}
'{$pushkeyword R_*}
$H Windows.ph
$H RichEdit.ph
$U RTFHandling.pcu = R_'RTF-PCU einbinden
$U objects.pcu = R_
proc DrawRichText2'---------------------------------------------------------DrawRichText2
parameters RTF&,PosX%,PosY%,MaxX%,MaxY%'--Position + Grösse in Pixeln!
declare PrinterDpiX%,PrinterDpiY%
declare WindowDpiX%,WindowDpiY%
declare fx!,fy!
if %printing'--Bei Druck: %HDC2 = %HDC = &PDC
~SetMapMode(%hdc2,1)
~SetWindowExtEx(%hdc2,1,1,0)
~SetViewPortExtEx(%hdc2,1,1,0)
endif
PrinterDpiX%=~GetDeviceCaps(%hdc2,~LOGPIXELSX)'--dpi X des Druckers
PrinterDpiY%=~GetDeviceCaps(%hdc2,~LOGPIXELSY)'--dpi X des Druckers
WindowDpiX%=~GetDeviceCaps(~GetDC(%hwnd),~LOGPIXELSX)'--dpi X des Bildschirms (!)
WindowDpiY%=~GetDeviceCaps(~GetDC(%hwnd),~LOGPIXELSY)'--dpi Y des Bildschirms (!)
PosX%=int(PosX%/WindowDpiX%*1440)
PosY%=int(PosY%/WindowDpiX%*1440)
MaxX%=int(MaxX%/WindowDpiX%*1440)
MaxY%=int(MaxY%/WindowDpiX%*1440)
declare Range#
dim Range#,48
clear Range#
long Range#, 0=%hdc2,%hdc2
long Range#, 8=PosX%,PosY%,PosX%+MaxX%,PosY%+MaxY%
long Range#,24=PosX%,PosY%,PosX%+MaxX%,PosY%+MaxY%
long Range#,44=-1
sendmessage(RTF&,~EM_FORMATRANGE,1,Range#)
if %printing
fx!=~GetDeviceCaps(%hdc2,~LOGPIXELSX)/300
fy!=~GetDeviceCaps(%hdc2,~LOGPIXELSY)/300
~SetMapMode(%hdc2,~MM_ANISOTROPIC)
~SetWindowExtEx(%hdc2,6400,9600,0)
~SetViewPortExtEx(%hdc2,int(2200*fx!),int(3300*fy!),0)
endif
dispose Range#
casenot %printing:repaint
endproc'---------------------------------------------------------------------------------
window 0,0-%maxx,%maxy
var rtf_dll& = R_INTITFORCREATERTF()'DLL laden mit PCU
var _RichEdit& = R_CREATERICHEDIT(%hwnd,"",10000,0,350,100,9000)' Richedit erstellen mit PCU
RTF("LoadRTF",_RichEdit&,"Bootsplatz.rtf")
var __RichEdit& = R_CREATERICHEDIT(%hwnd,"",10000,0,280,100,9000)' Richedit erstellen mit PCU
RTF("LoadRTF",__RichEdit&,"Label 105x42.rtf")
var RichEdit& = R_CREATERICHEDIT(%hwnd,"",10000,102,800,400,9000)' Richedit erstellen mit PCU
var rtf_hdc& = R_PREPAREFORLINEBREAK(RichEdit&)' Device Context erzeugen mit PCU
R_Init_object(RichEdit&)'Zum Bildempfang vorbereiten
RTF("LoadRTF",RichEdit&,"Bilder-Album.rtf")
startprint "*xx"
DrawRichText2 _RichEdit&,70,0,350,100
DrawRichText2 __RichEdit&,480,0,280,100
DrawRichText2 RichEdit&,70,100,640,960
endprint
waitinput
external("kernel32","ExitProcess",0)
R_DEINITRTF(RichEdit&,rtf_hdc&,rtf_dll&)'RTF-Aufräumen
R_DEINITRTF(_RichEdit&,rtf_hdc&,rtf_dll&)
R_DEINITRTF(__RichEdit&,rtf_hdc&,rtf_dll&)
R_DeInit_object()'RTF-Aufräumen
End
|
| | | | |
| | Thomas Freier | | | | | |
| | | Juhu genau, also klappt doch schonmal 3 RTFs...
bleibt nur übrig von der Bilder-RTF ab 2. Seite zu drucken?! |
| | | | |
| | Thomas Freier | | | | | |
| | | Auch wieder mit den 2 RTF's im Kopf oder ab 2. Seite ohne? |
| | | | |
| | Thomas Freier | Folgeseiten ohne 1. und 2. RTF. Hintergrund ist, wenn MS Word auf dem System ist, kann mann weitere RTFs in die Haupt-RTF einbetten und sie auch bearbeiten und dann auch alles drucken. Im anderen Fall müßte ich die drei RTFs getrennt drucken ohne, dass nach Druck der 1. und 2. RTF ein Seitenvorschub erfolgt. |
| | | | |
|
AntwortenThemenoptionen | 10.267 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |