Forum | | | | Thomas Freier | voulais un RTF mehrfach sur mehreren Seiten drucken. un de Pascal angepasstes Script allez. KompilierenMarqueSéparationDEMO 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éparationLABEL-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? |
| | | | |
| | 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. |
| | | | |
| | Jörg Sellmeyer | | | | 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éparationDEMO 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éparationStartDoc(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. |
| | | | |
| | 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? |
| | | | |
|
répondreOptions du sujet | 1.419 Views |
Themeninformationencet Thema hat 3 participant: |