XbpRtf
Moderator: Moderatoren
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
XbpRtf
Hallo,
die Klassenfunktion xbprtf habe ich noch nicht ganz verstanden. Kann ich damit eine bestehende Datei im Format RTF zum Drucken bringen?
die Klassenfunktion xbprtf habe ich noch nicht ganz verstanden. Kann ich damit eine bestehende Datei im Format RTF zum Drucken bringen?
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: XbpRtf
hi,
D:\ALASKA\XPPW32\SOURCE\SYS\axctrls.prg
dort findest du dan die Methode ::print()
gruss by OHR
Jimmy
schau dir einfach den Source der RTF Class an :Rolf Ramacher hat geschrieben: die Klassenfunktion xbprtf habe ich noch nicht ganz verstanden. Kann ich damit eine bestehende Datei im Format RTF zum Drucken bringen?
D:\ALASKA\XPPW32\SOURCE\SYS\axctrls.prg
dort findest du dan die Methode ::print()
gruss by OHR
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Hallo Rolf,
ich habe mich Wochen mit XbpRtf() herumgeschlagen.
Das Drucken ist noch nicht völlig fehlerfrei von Alaska realisiert worden.
Wenn Du einfach einen Rtf-Text auf eine Seite (und sonst nichts) drucken möchtest, klappt es wahrscheinlich.
Anderenfalls (Integration in die Preview, mischen mit anderen Textteilen, Grafiken, etc) klappt es ohne externe Hlfe (noch) nicht.
Falls Du weitere Hilfe brauchst, melde Dich bitte nochmals.
Uli
ich habe mich Wochen mit XbpRtf() herumgeschlagen.
Das Drucken ist noch nicht völlig fehlerfrei von Alaska realisiert worden.
Wenn Du einfach einen Rtf-Text auf eine Seite (und sonst nichts) drucken möchtest, klappt es wahrscheinlich.
Anderenfalls (Integration in die Preview, mischen mit anderen Textteilen, Grafiken, etc) klappt es ohne externe Hlfe (noch) nicht.
Falls Du weitere Hilfe brauchst, melde Dich bitte nochmals.
Uli
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo Jimmy,
die Datei habe ich mir angesehen. Welche Methode oder Function soll das sein? Dort gibt es mehrere wenn ich das richtig gesehen habe.
Folgendes zur Problematik: Ich habe eine RTF-Datei als Vorlage, bei denen unsere User diese verändern können. z.b. andere Positionen Schrftart, Größe. Ist auch so gewollt, da verschiedene Anwender bei verschiedenen Punkten dies als Fett wollte oder größer - wie auch immer.
Diese Datei lade ich rein ins Programm ersetze die Platzhalter und speichere diese Datei wieder als RTF- ab. Kann ich dann diese Datei
mit xbprtf ausdrucken ? Geht dies auch mit xbpPrintDialog()
@Uli wie hast du dieses denn gelöst ?
die Datei habe ich mir angesehen. Welche Methode oder Function soll das sein? Dort gibt es mehrere wenn ich das richtig gesehen habe.
Folgendes zur Problematik: Ich habe eine RTF-Datei als Vorlage, bei denen unsere User diese verändern können. z.b. andere Positionen Schrftart, Größe. Ist auch so gewollt, da verschiedene Anwender bei verschiedenen Punkten dies als Fett wollte oder größer - wie auch immer.
Diese Datei lade ich rein ins Programm ersetze die Platzhalter und speichere diese Datei wieder als RTF- ab. Kann ich dann diese Datei
mit xbprtf ausdrucken ? Geht dies auch mit xbpPrintDialog()
@Uli wie hast du dieses denn gelöst ?
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo zusammen,
ich muß das Thema nochmal aufgreifen. Folgende Situation habe ich:
Es gibt eine RTF-Datei als Vorlage in welcher der User Änderungen wie Schriftart/größe ect. ändern soll. Soweit OK
Das Ergebnis darf aber nicht mehr zu verändern sein. Wenn ich dies mit Word starte, kann ich zwar mit Fattr die RTF-Dateien hidden, read only machen aber die Datei kann trotzdem verändert werden.
Oder gibt es hierzu einen befehl um die Bearbeitung in Word sperren zu können??
Oder kann ich die mit memowrit erstellte rtf-Datei zum Drucker schicken?
Macht das xbprtf() ?? Muß dieses Tool seperat installiert werden? die richtx32.ocx habe ich auf meinem Rechner gar nicht.
Oder kann ich Word starten- das Dokument zum Drucken zwingen und word wieder schliessen ??
Aber nicht zum Standarddrucker automatisch senden.
Auf jedenfall muß der Druck zu xbpprintdialog, da der User den Drucker
auswählen soll.
Weiß jemand hierzu eine funktionierende Lösung??
ich muß das Thema nochmal aufgreifen. Folgende Situation habe ich:
Es gibt eine RTF-Datei als Vorlage in welcher der User Änderungen wie Schriftart/größe ect. ändern soll. Soweit OK
Das Ergebnis darf aber nicht mehr zu verändern sein. Wenn ich dies mit Word starte, kann ich zwar mit Fattr die RTF-Dateien hidden, read only machen aber die Datei kann trotzdem verändert werden.
Oder gibt es hierzu einen befehl um die Bearbeitung in Word sperren zu können??
Oder kann ich die mit memowrit erstellte rtf-Datei zum Drucker schicken?
Macht das xbprtf() ?? Muß dieses Tool seperat installiert werden? die richtx32.ocx habe ich auf meinem Rechner gar nicht.
Oder kann ich Word starten- das Dokument zum Drucken zwingen und word wieder schliessen ??
Aber nicht zum Standarddrucker automatisch senden.
Auf jedenfall muß der Druck zu xbpprintdialog, da der User den Drucker
auswählen soll.
Weiß jemand hierzu eine funktionierende Lösung??
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
wenn du irgend ein Programm installiert hast, das eine RTF Datei sauber drucken kann, dann sollte die runshell Lösung hier http://www.xbaseforum.de/viewtopic.php? ... t=runshell hilfreich sein. Allerdings weiß ich nicht, ob das Programm danach geschlossen wird.
Unveränderbare Endversionen, sollte man aber nicht als Textdokument eines Textverarbeitungsprogrammes speichern.
1. sind die immer irgendwie wieder zu ändern.
2. wer weiß ob in 6 Jahren dieses Format noch gelesen werden kann.
hier sollte man einen PDF Druckertreiber oder einen TIFF Druckertreiber nutzen um auf dauer lesbare Dokumente zu erhalten. Einige dieser Treiber können auch ohne Eingriffe direkt speichern.
Bei meinem MS-Office ist eine Image-Schnittstelle enthalten, habe dieses aber noch nicht probiert, da ich Acrobat und den eDOCPrinter habe.
wenn du irgend ein Programm installiert hast, das eine RTF Datei sauber drucken kann, dann sollte die runshell Lösung hier http://www.xbaseforum.de/viewtopic.php? ... t=runshell hilfreich sein. Allerdings weiß ich nicht, ob das Programm danach geschlossen wird.
Unveränderbare Endversionen, sollte man aber nicht als Textdokument eines Textverarbeitungsprogrammes speichern.
1. sind die immer irgendwie wieder zu ändern.
2. wer weiß ob in 6 Jahren dieses Format noch gelesen werden kann.
hier sollte man einen PDF Druckertreiber oder einen TIFF Druckertreiber nutzen um auf dauer lesbare Dokumente zu erhalten. Einige dieser Treiber können auch ohne Eingriffe direkt speichern.
Bei meinem MS-Office ist eine Image-Schnittstelle enthalten, habe dieses aber noch nicht probiert, da ich Acrobat und den eDOCPrinter habe.
Zuletzt geändert von brandelh am Do, 26. Apr 2007 9:44, insgesamt 1-mal geändert.
Gruß
Hubert
Hubert
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hallo Rolf,
wenn es um den Druck des Dokumentes wird Word geht, dann versuche es mit folgende Routine:
Viele Grüße
Olaf
wenn es um den Druck des Dokumentes wird Word geht, dann versuche es mit folgende Routine:
Code: Alles auswählen
Func Print( cDoc, cDrucker)
Local cActivePrinter
Local oWord
Local oDoc
oWord := CreateObject("Word.Application")
IF Empty( oWord )
MsgBox( "Microsoft Word ist nicht installiert" )
RETURN
ENDIF
oWord:visible := .F. // Word unsichtbar!
cActivePrinter := oWord:Activeprinter // aktuellen Drucker feststellen
oWord:Activeprinter:= cDrucker // Neuen Drucker setzen
oWord:documents:Open(cDoc)
oDoc := oWord:ActiveDocument
oDoc:PrintOut(.T.) // .T.= Druck im Hintergrund
oWord:Activeprinter:= cActivePrinter // alten Drucker setzen
oDoc:close()
oWord:Quit()
oWord:destroy()
oWord := NIL
Return ( NIL )
Olaf
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 07. Aug 2006 10:18
- Wohnort: Leipzig
- Danksagung erhalten: 11 Mal
Hallo Olaf,
danke für Deinen Code. Ist auch für mich interessant.
Beim Ausprobieren bin ich auf ein kleines Problem gestoßen, und zwar erscheint bei jedem Druck folgende Meldung:
"Word druckt gerade. Wenn Sie Word jetzt beenden, werden alle anstehenden Druckaufträge gelöscht!"
Word wird also per ActiveX gestartet, der Druck wird abgesetzt und Word wird wieder beendet, jedoch bevor alle Daten zum Drucker übertragen wurden.
Gibt es eine Möglichkeit abzufragen, ob der Druck noch aktiv ist, und Word erst dann zu beenden, wenn alle Daten wirklich übertragen wurden?
Und noch eine Frage: Kann man die Anzahl der zu druckenden Exemplare über das ActiveX-Object einstellen?
Tschüs,
Sören
danke für Deinen Code. Ist auch für mich interessant.
Beim Ausprobieren bin ich auf ein kleines Problem gestoßen, und zwar erscheint bei jedem Druck folgende Meldung:
"Word druckt gerade. Wenn Sie Word jetzt beenden, werden alle anstehenden Druckaufträge gelöscht!"
Word wird also per ActiveX gestartet, der Druck wird abgesetzt und Word wird wieder beendet, jedoch bevor alle Daten zum Drucker übertragen wurden.
Gibt es eine Möglichkeit abzufragen, ob der Druck noch aktiv ist, und Word erst dann zu beenden, wenn alle Daten wirklich übertragen wurden?
Und noch eine Frage: Kann man die Anzahl der zu druckenden Exemplare über das ActiveX-Object einstellen?
Tschüs,
Sören
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hi Sören,
das Problem mit dem Rückfrage nach dem Druckabbruch hatte ich noch nie.
Überprüfe doch mal über die Druckeigenschaften des Druckes die Einstellung, "Über Spooler drucken, um Durckaufträge schneller abzuschließen". Diese Option sollte aktiviert sein.
Falls diese Option bereits aktiviert ist, dann setzte vor oWord:Quit() ein Sleep( nWert) und gehe in den Wartezustand. Die Druckwarteschlange kann meines Wissen selbst nur über das API abgefragt werden.
Was die Anzahl der Kopien betrifft, werde ich mal nachschauen. Folgt später....
das Problem mit dem Rückfrage nach dem Druckabbruch hatte ich noch nie.
Überprüfe doch mal über die Druckeigenschaften des Druckes die Einstellung, "Über Spooler drucken, um Durckaufträge schneller abzuschließen". Diese Option sollte aktiviert sein.
Falls diese Option bereits aktiviert ist, dann setzte vor oWord:Quit() ein Sleep( nWert) und gehe in den Wartezustand. Die Druckwarteschlange kann meines Wissen selbst nur über das API abgefragt werden.
Was die Anzahl der Kopien betrifft, werde ich mal nachschauen. Folgt später....
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Sören,
Wirklich ein klasse Beispiel.
Ich frag mich immer woher die Leute die Infos über die Methoden nehmen
Ich habe mir damals einen mit dem Macrorecorder und VBA abgebrochen bis es lief.
ich hatte ein ähnliches Problem vor ActiveX als ich ein Textprogramm per Runshell (nicht Word) startete. Damals habe ich den Hintergrunddruck abgeschaltet, dann hat der Prozess gewartet bis der Druck zu Ende war bevor das Programm geschlossen wurde. Somit versuche mal diese Zeile zu ersetzen, obs dann besser wird.Word druckt noch ...
Code: Alles auswählen
oDoc:PrintOut(.T.) -> oDoc:PrintOut(.F.)
Ich frag mich immer woher die Leute die Infos über die Methoden nehmen
Ich habe mir damals einen mit dem Macrorecorder und VBA abgebrochen bis es lief.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 07. Aug 2006 10:18
- Wohnort: Leipzig
- Danksagung erhalten: 11 Mal
Hallo Hubert,
Danke,
Sören
Genau das war's!ich hatte ein ähnliches Problem vor ActiveX als ich ein Textprogramm per Runshell (nicht Word) startete. Damals habe ich den Hintergrunddruck abgeschaltet, dann hat der Prozess gewartet bis der Druck zu Ende war bevor das Programm geschlossen wurde. Somit versuche mal diese Zeile zu ersetzen, obs dann besser wird.
Code:
oDoc:PrintOut(.T.) -> oDoc:PrintOut(.F.)
Danke,
Sören
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Parameter für die Methode :PrintOut()
Über diesen Weg lassen sich bequem die einzelnen Optionen setzen.
Viele Grüße,
Olaf
Code: Alles auswählen
#DEFINE W_BACKGROUND 1
#DEFINE W_APPEND 2
#DEFINE W_RANGE 3
#DEFINE W_OUTFILENAME 4
#DEFINE W_FROM 5
#DEFINE W_TO 6
#DEFINE W_ITEM 7
#DEFINE W_COPIES 8
#DEFINE W_PAGES 9
#DEFINE W_PAGETYPE 10
#DEFINE W_PRINTTOFILE 11
#DEFINE W_ACTIVEPRINTERMACGM 12
#DEFINE W_MANUELDUPLEXPRINT 13
#DEFINE W_PRINTZOOMCOLUMN 14
#DEFINE W_PRINTZOOMROW 15
#DEFINE W_PRINTZOOMPAPERWITDH 16
#DEFINE W_PRINTZOOMPAPERHIGHT 17
// Beispiel
Print( cDoc, cPrinter, nCopy)
Local aPrintOptions := Array(17)
aPrintOptions[W_BACKGROUND] := .T.
aPrintOptions[W_COPIES] := nCopy
// usw
:oDoc:PrintOut( ;
aPrintOptions[W_BACKGROUND] ,;
aPrintOptions[W_APPEND] ,;
aPrintOptions[W_RANGE] ,;
aPrintOptions[W_OUTFILENAME] ,;
aPrintOptions[W_FROM] ,;
aPrintOptions[W_TO] ,;
aPrintOptions[W_ITEM] ,;
aPrintOptions[W_COPIES] ,;
aPrintOptions[W_PAGES] ,;
aPrintOptions[W_PAGETYPE] ,;
aPrintOptions[W_PRINTTOFILE] ,;
aPrintOptions[W_ACTIVEPRINTERMACGM] ,;
aPrintOptions[W_MANUELDUPLEXPRINT] ,;
aPrintOptions[W_PRINTZOOMCOLUMN] ,;
aPrintOptions[W_PRINTZOOMROW] ,;
aPrintOptions[W_PRINTZOOMPAPERWITDH ] ,;
aPrintOptions[W_PRINTZOOMPAPERHIGHT] )
Viele Grüße,
Olaf
Zuletzt geändert von Lewi am Fr, 27. Apr 2007 15:40, insgesamt 1-mal geändert.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Olaf,
müsste es nicht so heißen ?
woher nimmst du nur diese Infos ?
Liegen diese Beschreibungen Word bei oder muss man das bei MS kaufen ?
müsste es nicht so heißen ?
Code: Alles auswählen
oDoc:PrintOut( aPrintOptions )
Liegen diese Beschreibungen Word bei oder muss man das bei MS kaufen ?
Gruß
Hubert
Hubert
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hi Hubert,
Gruß, Olaf
Nein, es darf kein Array übergeben werden, sondern nur kommaseparierte Array-Werte. Die Reihenfolge ergibt sich aus den Word Methoden-Parametern.oDoc:PrintOut( aPrintOptions )
Von MS habe ich nichts. Einen guten Einstieg bietet sicherlich das Studium von Makros. Der Rest sind "Erfahrungen" und jede Menge "Try and Errors"Liegen diese Beschreibungen Word bei oder muss man das bei MS kaufen ?
Gruß, Olaf
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Jetzt wo du es sagst, bei meinem PowerBasic Compiler ist ein 'COM Browser' enthalten. Im Beispiel steht was von 'Microsoft Word 8.0 Object Library' und damit kann man den PowerBasic Code generieren. VO soll später auch sowas bekommen haben.Lewi hat geschrieben:Auf alle Fälle ist ein Oject-Viewer erforderlich.
Was benützt du ?
Kann der Xbase++ Code generieren ?
Ob VX da was mitbringen wird ?
Gruß
Hubert
Hubert
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo Olaf,
ich bekomme eine Fehlermeldung beim oWord:documents:Open(cDoc)
die Zeichenfolge ist länger als 255 Zeichen.
wie gesagt : Die VorlageDatei wird in die Variable mit memoread cRTF geladen Kopfzeile mit strtran ersetzt und mit memowrit wieder geschrieben.
Die Daten habe ich jetzt erstmal weggelassen. also komplett mit Daten
aufruf word mit runshell - wäre kein Problem.
ich bekomme eine Fehlermeldung beim oWord:documents:Open(cDoc)
die Zeichenfolge ist länger als 255 Zeichen.
wie gesagt : Die VorlageDatei wird in die Variable mit memoread cRTF geladen Kopfzeile mit strtran ersetzt und mit memowrit wieder geschrieben.
Die Daten habe ich jetzt erstmal weggelassen. also komplett mit Daten
aufruf word mit runshell - wäre kein Problem.
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hallo Hubert,
http://www.devcomponents.com/comassistant/download.html
Dieser kann eine CHM-Hilfe mit allen Objecten und Methoden einer COM-Komponente erzeugen.
Gruß, Olaf
Ich nutze den "Com Assistent"Object-Vieer: Was benützt du ?
http://www.devcomponents.com/comassistant/download.html
Dieser kann eine CHM-Hilfe mit allen Objecten und Methoden einer COM-Komponente erzeugen.
Gruß, Olaf
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Ich würde das entsprechende Verzeichnis "mappen" und einem Laufwerksbuchstaben zuordnen. Da gibt es nicht das Problem mit den Anzahl der Zeichen.ich bekomme eine Fehlermeldung beim oWord:documents:Open(cDoc)
die Zeichenfolge ist länger als 255 Zeichen.
Mit Runshell() kann Du allerdings nicht einzelne Druckparameter setzen.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Du hast einen Dateinamen mit Pfad über 255 Zeichen ?Rolf Ramacher hat geschrieben:Hallo Olaf,
ich bekomme eine Fehlermeldung beim oWord:documents:Open(cDoc)
die Zeichenfolge ist länger als 255 Zeichen.
Das geht normalerweise nicht.
Bist du sicher, dass du den Pfad und nicht den Inhalt der Datei in cDOC übergibst ?
Gruß
Hubert
Hubert