Italia
Foro

Drei RTF ausdrucken

 
- Page 1 -



Thomas
Freier
Alle Eigenversuche schlugen fehl. Hat einer einen Vorschlag, wie zwei RTFs fester Dimensione 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.

394 kB
Hochgeladen:12.10.2010
Downloadcounter89
Download
 
Gruß Thomas
Windows XP SP2, XProfan X2
12.10.2010  
 



« 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

346 kB
Version:1
Kurzbeschreibung: Drucken RTF
Hochgeladen:15.10.2010
Downloadcounter71
Download
 
15.10.2010  
 



Hallo Thomas,

funktioniert die Lösung aus diesem Thread [...]  bei Dir um eine komplette RTF auszudrucken und hilft Dir diese?
 
12.10.2010  
 




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.

106 kB
Hochgeladen:12.10.2010
Downloadcounter79
Download
70 kB
Hochgeladen:12.10.2010
Downloadcounter81
Download
 
Gruß Thomas
Windows XP SP2, XProfan X2
12.10.2010  
 



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.
 
12.10.2010  
 




Thomas
Freier
Ja, sehe ich auch so. Diese Umbrüche sind aber auch bei der Text99.
Merkwürdig aber auch, wenn die File vorm Druck gespeichert und danach erneut geladen wird, bleiben die Veränderungen bestehen sind aber so nicht in der gespeicherten File.
Der Versuch die gespeicherte File zum Druck in ein zu diesem Zwecke erstelltes
KompilierenMarkierenSeparieren
_RichEdit& = R_CREATERICHEDIT(%hwnd,"",0,0,0,0,9000)' Richedit erstellen mit PCU
_rtf_hdc& = R_PREPAREFORLINEBREAK(RichEdit&)' Device Context erzeugen mit PCU
R_Init_object(_RichEdit&)'Zum Bildempfang vorbereitenre>
zu legen, endet immer mit Schutzverletzung (RTF.pcu). Mal sehen wie ich das behebe.
 
Gruß Thomas
Windows XP SP2, XProfan X2
12.10.2010  
 



Ok verstehe, auch wenns ichs noch nicht überschaue. ^^
 
12.10.2010  
 



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

123 kB
Hochgeladen:12.10.2010
Downloadcounter143
Download
 
12.10.2010  
 




Thomas
Freier
Ja, eine A4 Seite.
 
Gruß Thomas
Windows XP SP2, XProfan X2
13.10.2010  
 



Juhu genau, also klappt doch schonmal 3 RTFs...

bleibt nur übrig von der Bilder-RTF ab 2. Seite zu drucken?!
 
13.10.2010  
 




Thomas
Freier
Ja genau.
 
Gruß Thomas
Windows XP SP2, XProfan X2
13.10.2010  
 



Auch wieder mit den 2 RTF's im Kopf oder ab 2. Seite ohne?
 
13.10.2010  
 




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.
 
Gruß Thomas
Windows XP SP2, XProfan X2
13.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

10.361 Views

Untitledvor 0 min.
Sven Bader18.11.2023
Alibre03.01.2020
kustg14.05.2019
GDL04.01.2016
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