Foro | | | | - Página 1 - |
| Thomas Freier | Gefunden Tuve de Andreas: KompilierenMarcaSeparación $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#
DeleteDCa>PrinterDC&)
End
Leider endet el Druck después de 3 Páginas. WordPad druckt alles. Como geht's con XProfan? |
| | | | |
| | « Dieser Contribución wurde como Solución gekennzeichnet. » | | - Página 3 - |
| Uwe ''Pascal'' Niemeier | Hi Thomas!
Anscheinend se de el FORMATRANGE-Struktur no sólo el a bedruckende Zona ausgelesen, pero después de el Drucken auch el tatsächlich genutzte Zona hinterlegt (oder algo como en el Art). Darum muß el betroffene Abschnitt el Struktur cada Schleifendurchlauf neu bestückt voluntad.
SeeYou Pascal |
| | | | | |
| | | | - Página 3 - |
| | | | | - Página 2 - |
| Thomas Freier | Yo sería lo mejor encontrar, si deine Scrips, el sí muy bien son, auch bekannt gewordene Fehler no mehr hätten. Ist doch auch posible, dass Uwes Ejemplo bajo cierto Umständen en uno Endlosschleife endet. A Sicherheit ha él ahora el max. a druckenden Páginas vorgegeben. Como es beim Einsatz natürlich el problema, dass el Seitenanzahl des Dokumentes selten ermitteln läßt. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Personas!
Wenn uno todos Características, el el Drucker direkt ansprechen (StartDoc/EndDoc, StartPage/EndPage) auskommentiert, puede ser el FormatRange-Rutina auch "im Leerlauf" betreiben y así vorab ermitteln, wieviele Páginas gedruckt würden .
Mit algo Geschick puede ser así incluso antes el Drucken al Seitenanfang y / oder Seitenende zusätzliche Textos einbauen, z.B. "Ende Página 1" "Anfang Página2" "Seite 1 de 3" usw.
Übrigens scheint lo en meiner letzten Demo en el Hilo nebenan en Dokumenten con Bildern Abweichungen en el eingestellten Rändern a geben; como tener lugar teilweise Seitenumbrüche, wo no nötig wären. Tiempo sehen, si como todavía qué hacer läßt.
@ Thomas: Hoffe en Kürze una solución para Bearbeitern de RTF en RTF gefunden a haben.
SeeYou Pascal |
| | | | |
| | | Thomas Freier
Yo sería lo mejor...
Keine Cuestión, sobald Yo otra vez a diesem PC ... |
| | | | |
| | Thomas Freier | He Pascal, konntest du a dieser Punto ni Verbesserung encontrar?
Übrigens scheint lo en meiner letzten Demo en el Hilo nebenan en Dokumenten con Bildern Abweichungen en el eingestellten Rändern a geben; como tener lugar teilweise Seitenumbrüche, wo no nötig wären. Tiempo sehen, si como todavía qué hacer läßt.
Yo habe hin y her probiert y folgendes festgestellt: Wenn Yo a el, z.B. Hemmelsdorf, erstellte RTF algunos große Bilder (P1010404.JPG= 640x480) como groß anhänge, así Es el 1. Página OK. Auf el Folgenden es jeweils sólo una Bild pro Página. Wenn Yo el Bilder en el neu erstellten Página lösche salvo el Texto y sechsmal el Bild (P1010404.JPG) como groß einfüge, voluntad pro Página 2 Bilder gedruckt. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Anscheinend se de el FORMATRANGE-Struktur no sólo el a bedruckende Zona ausgelesen, pero después de el Drucken auch el tatsächlich genutzte Zona hinterlegt (oder algo como en el Art). Darum muß el betroffene Abschnitt el Struktur cada Schleifendurchlauf neu bestückt voluntad.
SeeYou Pascal |
| | | | |
| | Thomas Freier | He Pascal, el sieht super de. Gracias!
Mit algo Geschick puede ser así incluso antes el Drucken al Seitenanfang y / oder Seitenende zusätzliche Textos einbauen, z.B. "Ende Página 1" "Anfang Página2" "Seite 1 de 3" usw.
Hast du como ni tolle Concepto? Bisher Yo : KompilierenMarcaSeparación eingesetzt. Macht beim Font todavía Problemas. Tiempo se el Font el 1. Línea en zwei Páginas verwendet y luego folgt una otro. Ein más Tiempo se él en allen Páginas verwendet. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Voraussetzung para el de me verwendete Technik es, daß Dokument y gedruckte Página igual viele Zeilen enthalten, porque el entsprechende Rutina antes el Drucken direkt en el RTF-Editar schreibt. Lo darf also no unkontrollierten Zeilenumbrüche al Rand de Dokument y/oder Página geben. Außerdem gibt's todavía Problemas wegen el Bilder.
SeeYou Pascal |
| | | | |
| | Thomas Freier | He Pascal, wo bist du en Problemas con Bildern gestoßen? Yo habe así a el zwanzig Beispiele, große/kleine Bilder y Textzeilen einfügen/löschen, getestet y Druck war siempre OK. Für el Seitenzahl Puse unteren Blattrand con 12mm y drucke el Seitenzahl en esta Rand sin Prüfung en bedruckbaren Zona y Blattausrichtung se zwangsweise en A4-hoch gesetzt. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
Como ya he dicho, mi Método es, antes el real Drucken Kopf- y/oder Fußzeilen direkt en el RTF-Editar a escribir. Sombrero para mi Zwecke bisher bien funktioniert, ha aber eben auch Nachteile o. es no para cada Fall anwendbar. Tiempo sehen, si la todavía ändern läßt. Werde me deine Technik aber auch otra vez anschauen.
BTW: Diese RTF-Versión [...] kann auch en Word erstellte Tabellen con más Zeilen darstellen.
SeeYou Pascal |
| | | | |
| | Thomas Freier | He Pascal, media du : el Typ RichEdit50W (RichEdit 4.1) ? Aus uno alten Anwendung (hier reduziert) Todavía: KompilierenMarcaSeparación' 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
Aber desafortunadamente läßt se el Raster no formatieren, d.h. wenigens deutlicher darstellen. |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Thomas!
A Einblendung de Kopf/Fußzeilen: Anscheinend kommt en FormatRange-Message una Función para Einsatz, el ähnlich como DrawText wirkt. Darum kann en deiner eingeblendeten Línea el Font wechseln. Umgekehrt puede ser el Font no vorgeben, porque se el el todo Dokument auswirkt. Solución: Den Texto en el Profano-Speicherbitmap invertir y luego en el Páginas einblenden: KompilierenMarcaSeparación...
~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 y Position necesario a el jeweiligen Drucker angepaßt werden; antes Allem, si una Fußzeile voluntad se. Kann uno sicher encima Seitegröße/Auflösung berechnen. Aber dieser Trick es en cada Fall en Längen mejor como mi Technik; Gracias para el Tipp!
Zu Tabellen: Tatsächlich verhält se dein Code con un 50W-Control anders. Aber dieses Comportamiento es nun veces undokumentiert y por lo tanto debería uno se no necesariamente en él verlassen. Tipp: si du el Tabla con Word erstellst y weiße Linien wählst, es ellos en el 50W no como Tabla a erkennen.
SeeYou Pascal |
| | | | |
| | Thomas Freier | Su Script para el Fußzeile voluntad Todavía testen. Was el Tabla angeht, así Tuve ellos, versehen con Platzhaltern, 2005 para Listen (Auftragsbestätigung, Rechnung, usw.) verwendet y sólo encima XProfan gedruckt. El Listen sahen con el schwach grauen Tabellenraster siempre todavía mejor de como sin y la página podría como RTF gespeichert voluntad. |
| | | | |
|
RespuestaTema opciones | 17.046 Views |
ThemeninformationenDieses Thema ha 3 subscriber: |