Français
Forum

RTF - Imprimer

 

Thomas
Freier
voulais un RTF mehrfach sur mehreren Seiten drucken. un de Pascal angepasstes Script allez.
KompilierenMarqueSéparation
DEMO DRAWRICHTEXT GRÖSSENABFRAGE
window 0,0-400,300
 $H Windows.ph
 $H Messages.ph
 $H RichEdit.ph

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---------------------------------------------------------------------------------
    Print "Bitte warten, der Druck wird vorbereitet!"
    var hFont% = @Create("Font","Arial",20,12,0,0,0)
    declare RtfDll&,RichEdit&
    RtfDll&=usedll("RichEd20.dll")
    RichEdit&=control("RichEdit20A","Test",$500050c4,0,0,0,0,%hwnd,5000,0)
    settext RichEdit&,"Diese RTF-Anwendung läßt mich nicht verzweifeln!"
    SetFont RichEdit&,hFont%
    declare Breite%,Höhe%
    Breite%= 400
    Höhe%= 200
    var    y1%=0
    var    x1%=0
    startprint
    var y%=0

    While y% < 26  ....einfach einmal auf zwei Seiten drucken

        DrawRichText2 RichEdit&,(y1%*4.40),(x1%*4.40),400,200
        inc y%
        y1%=y1% + 105

        if y1%>105

            y1%=0
            x1%=x1%+43

            IF x1%>290

                x1%=0
                NEXTPAGE

            endif

        endif

    wend

    endprint
    destroywindow(RichEdit&/span>
    waitkey

dans meiner, ici stark gekürzten, Anwendung wird qui Font sur qui zweiten page geändert et je trouve den faute pas.
KompilierenMarqueSéparation
LABEL-EDIT-DRUCK-E
 $H Windows.ph
 $H Messages.ph
 $H RichEdit.ph

proc DrawRichText2---------------------------------------------------------DrawRichText2

    parameters RTF&,PosX%,PosY%,MaxX%,MaxY%--Position + Grösse dans Pixeln!
    declare PrinterDpiX%,PrinterDpiY%
    declare WindowDpiX%,WindowDpiY%
    declare fx!,fy!

    si %printing--chez Druck: %HDC2 = %HDC = &PDC

        ~SetMapMode(%hdc2,1)
        ~SetWindowExtEx(%hdc2,1,1,0)
        ~SetViewPortExtEx(%hdc2,1,1,0)
        PosX%=PosX%+3--Correction ???
        PosY%=PosY%+3--Correction ???

    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 la gamine#
    dim la gamine#,48
    clear la gamine#
    long la gamine#, 0=%hdc2,%hdc2
    long la gamine#, 8=PosX%,PosY%,PosX%+MaxX%,PosY%+MaxY%
    long la gamine#,24=PosX%,PosY%,PosX%+MaxX%,PosY%+MaxY%
    long la gamine#,44=-1
    sendmessage(RTF&,~EM_FORMATRANGE,1,la gamine#)

    si %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 la gamine#
    casenot %printing:repaint
    endproc---------------------------------------------------------------------------------
    #########################################################################################

    Proc Label

        declare x1%,y1%
        Déclarer rtf#
        Déclarer x&,x%,y%
        declare Label_m&,RtfDll&,Label_dlg&
        declare a#
        declare LB_form&
        declare RichEdit&
        declare MaxB%,MaxH%
        declare IstB%,IstH%
        declare Pos#
        declare WndProc&
        dim Pos#,8
        dim rtf#,512
        RtfDll&=usedll("RichEd20.dll")
        WINDOWSTYLE 16
        Label_m&=create("Window",%hwnd,"Adresslabelformat: 105x43 ; sur dem Blatt: 7 Zeilen + 2 Reihen",100,50, 640,640)
        usefont "MS Sans Serif",16,0,0,0,0
        setdialogfont 1
        var hFont% = @Créer("Font",Arial,20,12,0,0,0)
        var  BP_but4& =@Créer("Button",Label_m&,"Drucken",450,554,82,25)
        var  BP_but5& = @Créer("Button",Label_m&,"Ende",540,554,82,25)
        .....................................................................RTF-Éditer erzeugen
        Label_dlg&=@Contrôle("STATIC",»,$5400110E,0,32,624,340,Label_m&,$7918,%HINSTANCE)
        MaxB%=405
        MaxH%=243
        x%= (MaxB%/2) - 50
        Lb_form&=@Contrôle("STATIC",»,$5400110E,x%,5,MaxB%/2,20,Label_dlg&,$7918,%HINSTANCE)
        RichEdit&=control("RichEdit20A",»,$54005004,33,33,MaxB%,MaxH%,Label_dlg&,5000,0)
        settext RichEdit&,"Diese RTF-Anwendung läßt mich verzweifeln!"
        SetFont RichEdit&,hFont%

        tandis que 1

            WaitInput
            cas GetFocus(BP_but5&): pause

            Si GetFocus(BP_but4&)  ----------------------------Drucken

                y1%=0
                x1%=0
                startprint
                y%=0

                Tandis que y% < 26  ....simple einmal sur deux Seiten drucken

                    DrawRichText2 RichEdit&,(y1%*4.40),(x1%*4.40),400,200
                    inc y%
                    y1%=y1% + 105

                    si y1%>105

                        y1%=0
                        x1%=x1%+43

                        IF x1%>290

                            x1%=0
                            NEXTPAGE

                        endif

                    endif

                Wend

                endprint

            EndIf

        endwhile

        destroywindow(RichEdit&)
        dispose rtf#
        dispose a#
        dispose pos#
        destroywindow(Label_m&)
        freedll RtfDll&

    ENDPROC

    #########################################################################################
    WINDOWSTYLE 543512+8+2
    Windowtitle "CSV données pour Adresslabel"
    window 0,0 - 900,600
    Label                       Adresslabel
    destroywindow(%hWnd)
    end

Sieht ihn einer de euch ou bien hat une Tip, woran es liegen pourrait?
 
Gruß Thomas
Windows XP SP2, XProfan X2
20.08.2008  
 




Dieter
Zornow
je denke la fois pour chaque nextpage sollte ou bien muss qui Font récente transfert volonté.
Tricolore pas getestet, là je rien zum ausdrucken habe.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
20.08.2008  
 




Thomas
Freier
@ Dieter , je verwende beim Testen "FreePDF XP".
qui eigentliche Vorgang:
erster dbf Datensatz
qui blanko.rtf wird geladen
qui Platzhalter (dbf-Feldnamen) volonté encore einmal überprüft
ensuite qui entsprechende RTF-la ligne avec den données aus qui dbf ersetzt
Ausdruck à qui vorgesehenen Position.
qui RTF gelöscht
prochaine dbf Datensatz
qui blanko.rtf wird geladen
usw.
so devrait es eigentlich aller. malheureusement seulement sur qui 1. page.
 
Gruß Thomas
Windows XP SP2, XProfan X2
20.08.2008  
 




Jörg
Sellmeyer
Daieter hat droite avec NextPage: [...]  [...] 
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
20.08.2008  
 




Thomas
Freier
@ Jörg, dass du cela ausbuddeln würdest était mir bien sûr.
mais, ici erweitert avec données, ergibt cela Gewünschte avec "nextpage".
KompilierenMarqueSéparation
DEMO DRAWRICHTEXT GRÖSSENABFRAGE
 $H Windows.ph
 $H Messages.ph
 $H RichEdit.ph
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 $I Listview_Funktionen.inc
var lvdll&=usedll("Listview.dll")
Declare bereich#,bytes&,Label_view&,x&,y&,z&,x%
Declare listview&, text$
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Def GetSysColor(1) !"USER32","GetSysColor"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Proc ErsetzeMultiLine

        Parameters REdit&,Line&
        Declare Index&,Index1&
        Index& = ~sendMessage(REdit&,~EM_LINEINDEX,Line&-1,0)
        Index1& = ~sendMessage(REdit&,~EM_LINEINDEX,Line&,0)
        ~sendmessage(REdit&,~EM_SETSEL,Index&,Index1&)
        ~sendmessage(REdit&,~EM_REPLACESEL,0,addr(c$)) Ersetzt den markierten Text
        Endproc----------------------------------------------------------------------------------
        WINDOWSTYLE 543512+8+2
        Windowtitle "CSV Daten für Adresslabel"
        window 0,0 - 900,600
        AppendMenuBar 3,"   Adresslabel   "
        x&=MixRGBs(GetSysColor(15),$00ffffff)
        listview&=CreateListView(%hwnd,%hinstance,0,x&,-1,$31)
        text$="Pliete.csv"
        bytes&=@FileSize(text$)

        If bytes&>0

            Dim bereich#,bytes&
            ReadFileQuick(addr(text$),bereich#,0,bytes&)
            x&=SetColumnsFromMem(listview&,bereich#,addr(y&))
            CsvToListview(listview&,(bereich#+y&),(bytes&-y&),x&)

        EndIf

        AutoSortListview listview&,1,1,1,1,2,2
        ShowListView(listview&,100,32,754,456)
        Print "Bitte warten, der Druck wird vorbereitet!"
        var hFont% = @Create("Font","Arial",20,12,0,0,0)
        declare RtfDll&,REdit&
        RtfDll&=usedll("RichEd20.dll")
        REdit&=control("RichEdit20A","Test",$500050c4,0,0,0,0,%hwnd,5000,0)
        RTF("LoadRTF",REdit&,"Aufkleber Brief.rtf")
        x%=3
        declare c$
        declare Breite%,Höhe%
        Breite%= 800
        Höhe%= 400
        var    y1%=0
        var    x1%=0
        startprint
        y&=0

        While y& < 226  ....einfach einmal auf zwei Seiten drucken

            c$="Herrn"+"
            "
            ErsetzeMultiLine(REdit&,4)Zeile ersetzen
            GetItemText(listview&,bereich#,1,y&)
            c$=String$(bereich#,0)
            GetItemText(listview&,bereich#,2,y&)
            c$=c$ + " " + String$(bereich#,0) + "
            "
            ErsetzeMultiLine(REdit&,5)Zeile ersetzen
            GetItemText(listview&,bereich#,11,y&)
            c$=String$(bereich#,0) + "
            "
            ErsetzeMultiLine(REdit&,6)Zeile ersetzen
            GetItemText(listview&,bereich#,9,y&)
            c$=String$(bereich#,0)
            GetItemText(listview&,bereich#,10,y&)
            c$=c$ + " " + String$(bereich#,0) + "
            "
            ErsetzeMultiLine(REdit&,8)Zeile ersetzen
            DrawRichText2 REdit&,(y1%*4.40),(x1%*4.40),400,200
            inc y&
            y1%=y1% + 105

            if y1%>105

                y1%=0
                x1%=x1%+43

                IF x1%>290

                    x1%=0
                    NEXTPAGE

                endif

            endif

        wend

        endprint
        WaitInput
        destroywindow(REdit&)
        dispose bereich#
        destroywindow(%hWnd)
        /../../funcion-referencias/XProfan/freedll/'>freedll lvdll&
         $I Listview_Dispose.inc

Habe mais encore une code trouvé:
KompilierenMarqueSéparation
StartDoc(PrinterDC&,DocInfo#)

Whilenot OU(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&)

den je ausprobieren werde.
 
Gruß Thomas
Windows XP SP2, XProfan X2
21.08.2008  
 




Thomas
Freier
@Jörg, je hoffe mon Kommentar était pas trop dur. mais UseFont darf eigentlich sur den Font dans qui RTF aussi beim Drucken ou bien erzwungenem Seitenwechsel keinen influence prendre. quoique, chez XProfan ist cela pas gewiss. une A5 RTF wird beim Sauver trop einer A4 RTF. pourquoi??? Genaues wird wohl seulement Roland savons.
Hat pas einer une Tip, comment un Seitenwechsel erzwungen wird, sauf Druckersteuerzeichen trop senden?
 
Gruß Thomas
Windows XP SP2, XProfan X2
22.08.2008  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.444 Views

Untitledvor 0 min.
Uwe Lang20.06.2023
Member 361000501.12.2022
H.Brill08.02.2022
RudiB.06.11.2021
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie