Forum | | | | - page 1 - |
| Thomas Freier | trouvé J'ai eu de Andreas: KompilierenMarqueSéparation $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#
DeleteDCà>PrinterDC&)
Fin
malheureusement endet qui Druck pour 3 Seiten. WordPad druckt alles. comment geht's avec XProfan? |
| | | | |
| | « cette Beitrag wurde comme Solution gekennzeichnet. » | | - page 3 - |
| Uwe ''Pascal'' Niemeier | Hi Thomas!
Anscheinend wird aus qui FORMATRANGE-Struktur pas seulement qui trop bedruckende Bereich ausgelesen, mais pour dem Drucken aussi qui réellement genutzte Bereich hinterlegt (ou bien quelque chose comme dans qui Art). tout autor doit qui betroffene paragraphe qui Struktur chez chaque Schleifendurchlauf récente bestückt volonté.
SeeYou Pascal |
| | | | | |
| | | | - page 3 - |
| | | | | - page 2 - |
| Thomas Freier | je serait es besser trouver, si deine Scrips, qui oui très bien sommes, aussi bekannt gewordene faute pas plus hätten. Ist doch aussi possible, dass Uwes Beispiel sous certain Umständen dans einer Endlosschleife endet. Zur Sicherheit hat il maintenant qui max. trop druckenden Seiten vorgegeben. voilà beim Einsatz naturellement cela Problem, dass sich qui Seitenanzahl des Dokumentes selten ermitteln läßt. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi gens!
si on alle Funktionen, qui den Drucker direct ansprechen (StartDoc/EndDoc, StartPage/EndPage) auskommentiert, peux on qui FormatRange-Routine aussi "im Leerlauf" betreiben et so vorab ermitteln, wieviele Seiten gedruckt würden .
avec quelque chose Geschick peux on so sogar avant dem Drucken am Seitenanfang et / ou bien Seitenende zusätzliche Textes einbauen, z.B. "Ende page 1" "Anfang page2" "Seite 1 de 3" usw.
Incidemment scheint es chez meiner letzten Demo im Fil nebenan chez Dokumenten avec Bildern Abweichungen chez den eingestellten Rändern trop geben; là avoir lieu partiellement Seitenumbrüche, wohin aucun nötig wären. la fois voyons, si sich là encore quoi faire läßt.
@ Thomas: Hoffe dans Kürze une Solution zum Bearbeitern de RTF dans RTF trouvé trop avons.
SeeYou Pascal |
| | | | |
| | | Thomas Freier
je serait es besser...
aucun Frage, sobald je wieder à diesem PC ... |
| | | | |
| | Thomas Freier | hé Pascal, konntest du à cette Stelle encore une amélioration trouver?
Incidemment scheint es chez meiner letzten Demo im Fil nebenan chez Dokumenten avec Bildern Abweichungen chez den eingestellten Rändern trop geben; là avoir lieu partiellement Seitenumbrüche, wohin aucun nötig wären. la fois voyons, si sich là encore quoi faire läßt.
j'ai hin et her probiert et folgendes festgestellt: si je à qui, z.B. Hemmelsdorf, erstellte RTF quelques grand Bilder (P1010404.JPG= 640x480) comme grand anhänge, so ist qui 1. page OK. sur den Folgenden ist jeweils seulement un Bild pro page. si je qui Bilder sur qui récente erstellten page lösche jusqu'à sur den Text et sechsmal cela Bild (P1010404.JPG) comme grand einfüge, volonté pro page 2 Bilder gedruckt. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Anscheinend wird aus qui FORMATRANGE-Struktur pas seulement qui trop bedruckende Bereich ausgelesen, mais pour dem Drucken aussi qui réellement genutzte Bereich hinterlegt (ou bien quelque chose comme dans qui Art). tout autor doit qui betroffene paragraphe qui Struktur chez chaque Schleifendurchlauf récente bestückt volonté.
SeeYou Pascal |
| | | | |
| | Thomas Freier | hé Pascal, cela sieht super aus. merci!
avec quelque chose Geschick peux on so sogar avant dem Drucken am Seitenanfang et / ou bien Seitenende zusätzliche Textes einbauen, z.B. "Ende page 1" "Anfang page2" "Seite 1 de 3" usw.
la hâte du là encore une tolle concept? Bisher habe je : KompilierenMarqueSéparation eingesetzt. pouvoir beim Font encore Probleme. la fois wird qui Font qui 1. la ligne sur deux Seiten verwendet et ensuite folgt un anderer. un d'autre la fois wird il sur allen Seiten verwendet. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Voraussetzung pour qui de mir verwendete technologie ist, qui Dokument et gedruckte page juste viele Zeilen enthalten, weil qui entsprechende Routine avant dem Drucken direct ins RTF-Éditer écrit. Es darf alors aucun unkontrollierten Zeilenumbrüche am rebord de Dokument et/ou bien page donner. Aussi gibt's encore Probleme à cause de qui Bilder.
SeeYou Pascal |
| | | | |
| | Thomas Freier | hé Pascal, wohin es du sur Probleme avec Bildern gestoßen? j'ai so à qui vingt Beispiele, grand/kleine Bilder et Textzeilen insérer/effacer, getestet et qui Druck était toujours OK. Pour qui Seitenzahl mets je unteren Blattrand avec 12mm et drucke qui Seitenzahl dans cette rebord sans Prüfung sur bedruckbaren Bereich et Blattausrichtung wird zwangsweise sur A4-hoch gesetzt. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Comme je le disais, mon Methode ist, avant dem réel Drucken tête- et/ou bien Fußzeilen direct ins RTF-Éditer trop écrivons. Hat pour mon Zwecke bisher bien funktioniert, hat mais plan aussi Nachteile bzw. ist pas pour jeden le cas anwendbar. la fois voyons, si sich le reste changement läßt. Werde mir deine technologie mais aussi nochmal anschauen.
BTW: cet RTF-Version [...] peux aussi dans Word erstellte Tabellen avec mehreren Zeilen représenter.
SeeYou Pascal |
| | | | |
| | Thomas Freier | hé Pascal, meinst du : den Typ RichEdit50W (RichEdit 4.1) ? Aus einer alten Anwendung (ici reduziert) habe je encore: KompilierenMarqueSéparation' ab XProfan 8.0
Def SetEditNumeric(1) SetWindowLong(@&(1),-16, (GetWindowLong(@&(1),-16) | $2002))
Def SetWindowLong(3) !"USER32", "SetWindowLongA"
Def GetWindowLong(2) !"USER32", "GetWindowLongA"
Def GetSysColor(1) !"USER32","GetSysColor"
Declare text$,text1$,x%,h$
Declare ed1&,ed2&
Declare sed1&,sed2&,sed3&,sed4&,sed5&
Declare hed1&
Declare but&,sich&
Declare font&
SetTrueColor 1
Window 10,10 - 900,600
cls GetSysColor(15)
font&=CreateFont("Arial",16,0,0,0,0)
SetDialogFont font&
ed1&=Create("RichEdit",%hwnd,"",11,10,700,500)
ed2&=Create("RichEdit",%hwnd,"",0,00,0,0)
CreateText(%hwnd,"Spaltenbreite",760,80,100,22)
sed1&=CreateEdit(%hwnd,"200",760,110,100,22)
sed2&=CreateEdit(%hwnd,"200",760,140,100,22)
sed3&=CreateEdit(%hwnd,"200",760,170,100,22)
sed4&=CreateEdit(%hwnd,"",760,200,100,22)
sed5&=CreateEdit(%hwnd,"",760,230,100,22)
SetEditNumeric(sed1&)
SetEditNumeric(sed2&)
SetEditNumeric(sed3&)
SetEditNumeric(sed4&)
SetEditNumeric(sed5&)
CreateText(%hwnd,"Zeilenhöhe",760,300,100,22)
hed1&=CreateEdit(%hwnd,"12",760,330,100,22)
SetEditNumeric(hed1&)
but&=CreateButton(%hwnd,"Einfügen",760,360,100,24)
sich&=CreateButton(%hwnd,"Speichern",760,460,100,24)
SetFocus(ed1&)
settext Ed1&,"Bitte eine Tabellenzeile einfügen\nund für weitere Zeilen"+ \
" den Curser ans Zeilenende setzen und die Taste ENTER drücken.\n"+ \
"Die Spaltenbreite ist nachträglich nicht mehr zu verändern."+Chr$(13)+Chr$(10)
SendMessage(Ed1&,$00B1,-1,-1)
While 1
WaitInput
case %key=2:BREAK
case GetFocus(But&) AND (val(GetText$(sed1&))>0) : RTF_Zeile
If GetFocus(sich&)
Text$ = @SaveFile$("Speichern","Neu.rtf")
case Len(trim$(Text$))>0 : call(&SaveRTF,Ed1&,addr(Text$))
EndIf
wend
DeleteObject font&
End
Proc RTF_Zeile
Assign #1,"Zeile.tmp"
Rewrite #1
Print #1,"{\"+chr$(114)+"tf1\"+chr$(097)+"nsi\"+chr$(097)+"nsicpg1252\deff0\deflang1049\deflangfe1049{\"+chr$(102)+"onttbl{\"+chr$(102)+"0\"+chr$(102)+"nil\"+chr$(102)+"charset0 Arial;}}"
Print #1,"\viewkind4\uc1"
text$="\"+chr$(116)+"rowd\"+chr$(116)+"rgaph30"
x%= int(val(GetText$(sed1&))*10)
text$=text$+"\cellx"+str$(x%)
text1$="\cell"
h$= str$(int(val(GetText$(hed1&))*2))
If val(GetText$(sed2&))>0
x%= x%+int(val(GetText$(sed2&))*10)
text$=text$+"\cellx"+str$(x%)
text1$=text1$+"\cell"
EndIf
If val(GetText$(sed3&))>0
x%= x%+int(val(GetText$(sed3&))*10)
text$=text$+"\cellx"+str$(x%)
text1$=text1$+"\cell"
EndIf
If val(GetText$(sed4&))>0
x%= x%+int(val(GetText$(sed4&))*10)
text$=text$+"\cellx"+str$(x%)
text1$=text1$+"\cell"
EndIf
If val(GetText$(sed5&))>0
x%= x%+int(val(GetText$(sed5&))*10)
text$=text$+"\cellx"+str$(x%)
text1$=text1$+"\cell"
EndIf
Print #1,text$+"\pard\intbl\lang1031\"+chr$(102)+"s"+h$+text1$+"\"+chr$(114)+"ow"
Print #1,"\par}"
Close #1
Rtf("LoadRTF",ed2&,"Zeile.tmp")
SetFocus(ed2&)
sendmessage(ed2&,$00B1,0,-1)
Sendmessage(ed2&,$301,0,0)
Sendmessage(ed1&,$302,0,0)
SetFocus n>ed1& )
ENDPROC
mais malheureusement läßt sich cela Raster pas formatieren, d.h. wenigens deutlicher représenter. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Zur Einblendung de tête/Fußzeilen: Anscheinend venez chez qui FormatRange-Message une Funktion zum Einsatz, qui ähnlich comment DrawText wirkt. tout autor peux chez deiner eingeblendeten la ligne qui Font échanger. renversé peux on den Font pas vorgeben, weil sich cela sur cela ganze Dokument auswirkt. Solution: Den Text dans qui Profan-Speicherbitmap anlegen et ensuite dans qui Seiten einblenden: KompilierenMarqueSéparation...
~StartDoc(DC&,DocInfo#)'-------Druckauftrag beginnen
whileloop 1,Seiten%'-----------Anzahl ermittelte Seiten
mcls 500,100,255'--Farbe nur zu Testzwecken
startpaint -1'-----%HDC nach StartPaint -1: DC der Speicherbitmap
usefont "Balloon",50,0,0,0,0
drawtext 0,0,"Seite "+str$(&loop)+" von "+str$(Seiten%)
~BitBlt(DC&,10,10,500,100,%hdc,0,0,~SRCCOPY)'--Parameter 2+3: Position in der Seite
endpaint
~StartPage(DC&)'------------Seite beginnen > Vorbereitung Drucken ...
Schriftgröße et Position doit à den jeweiligen Drucker ajusté werden; avant Allem, si es une Fußzeile volonté soll. peux on sûrement sur Seitegröße/Auflösung berechnen. mais cette Trick ist sur jeden le cas um Längen besser comme mon Technik; merci pour den Tipp!
trop Tabellen: réellement verhält sich dein Code avec einem 50W-Contrôle anders. mais cet Verhalten ist eh bien la fois undokumentiert et tout autor sollte on sich pas absolument sur elle sortir de. Tipp: si du qui Tabelle avec Word erstellst et weiße Linien wählst, ist vous im 50W pas comme Tabelle trop erkennen.
SeeYou Pascal |
| | | | |
| | Thomas Freier | Deinen Script pour qui Fußzeile werde je encore testen. quoi qui Tabelle angeht, so J'ai eu vous, versehen avec Platzhaltern, 2005 pour Listen (Auftragsbestätigung, la facture, usw.) verwendet et seulement sur XProfan gedruckt. qui Listen sahen avec dem schwach grauen Tabellenraster toujours besser aus comme sans et qui page konnte comme RTF gespeichert volonté. |
| | | | |
|
répondreOptions du sujet | 17.157 Views |
Themeninformationencet Thema hat 3 participant: |