RtfDisplay

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

RtfDisplay

Beitrag von Koverhage »

ich nutze dies um RTF Dateien und auch DOC Dateien anzuzeigen. Habe hierbei nur das Problem das dies nur dann funktioniert wenn die Doc Datei intern ein RTF Document ist.
Was kann ich tun um eine Doc Datei in einem eigenen Fenster anzuzeigen und eventuell zu drucken. Sonst sollte der Anwender mit dem Document nichts machen dürfen.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Klaus,

also RtfDisplay() sagt mir nichts. Finde ich nicht in der Doku von xbase auch nicht bei den xbase-Tools. Was ich benutze von Active-x ist ein Beispiel von Olaf. Hier frage ich, ob Word-Installiert ist und übergebe dann die RTF-Datei an XbpPrintDialog() - (damit der User den Drucker auswählen kann)

so zum Beispiel: die "filbestandliste.rtf" kann durch den User wieder ausgedruckt werden, deshalb habe ich sie "hidden" gemacht.


#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "Inkey.ch"
#include "xbpdev.ch"

#pragma Library( "XppUI2.lib" )

Function ListeDrucken()
Local cVerz:=""
FAttr("filbestandliste.rtf","-H")
FAttr("filbestandliste.rtf","-R")
cVerz:=CurDrive()+":\"+CurDir()
oDlg := XbpPrintDialog():new()
// Druckausgabe nicht standardmäßig in Datei umleiten
oDlg:enablePrintToFile := .f.
oDlg:printToFile := .f.
oDlg:create()

// Konfiguriertes Drucker Objekt erzeugen
oPrinter := oDlg:display()
oDlg:destroy()

IF oPrinter <> NIL
cPrinter:=oPrinter:DevName
Drucken(cVerz+"\filbestandliste.rtf",cPrinter)
EndIf
FAttr("filbestandliste.rtf","H")
FAttr("filbestandliste.rtf","R")
Return Nil

Hier erfolgt der Ausdruck

#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "Inkey.ch"
#include "xbpdev.ch"

#pragma Library( "XppUI2.lib" )
#pragma library( "ascom10.lib" )

Function Drucken( cDoc, cDrucker)
Local cActivePrinter
Local oWord
Local oDoc

oWord := CreateObject("Word.Application")

IF Empty( oWord )
MsgBox( "Microsoft Word ist nicht installiert" )
RETURN Nil
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(.f.) // .T.= Druck im Hintergrund
oWord:Activeprinter:= cActivePrinter // alten Drucker setzen
oDoc:close()
oWord:Quit()
oWord:destroy()
oWord := NIL
Return ( NIL )
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hallo Rolf,

wie ich das mit Word machen könnte, ist mir schon klar, aber es soll ja nur die Doc Datei angezeigt werden und zwar in einem eigenen Fenster.

Hier mal der Code den ich zur Zeit benutze:

* ----------------------
STATIC FUNCTION show_doc( oStatic, cDocument, cMemo, aGetList )
local oRtfDlg
local nFromCol := 0
local nFromRow := 0
local nMaxCol := ostatic:currentSize()[1]
local nMaxRow := ostatic:currentSize()[2]
// msgbox(cDocument)
cMemo := MemoRead(cDocument)

oRtfDlg := RtfDisplay():new(oStatic,,{nFromCol,nFromRow},{nMaxCol,nMaxRow},,.t.,cDocument):create()

// oRtfDlg := RtfDisplay():new(oStatic,,,,,,cDocument):create()

oRtfDlg :rtfMLE:setData(cMemo)

DC_GetRefresh(aGetList)

RETURN nil


Das Dokument um das es geht, wurde in Word unter Dateiformat
Word 97-2003 & 6.0/95 - RTF (*.doc) gespeichert.
Das bedeutet, die DOC Datei ist in Wirklichkeit eine RTF Datei
bloss als Doc Datei abgespeichert ind wird demzufolge per Doppelklick dann natürlich mit Word geöffnet.
Da es aber in Wirklichkeit eine RTF Datei ist, wird diese über die obige Funktion richtig angezeigt. Der Ausdruck funktioniert aber nicht richtig, da dieses Dokument in Word erstellt wurde und natürlich die Vorgaben für den Drucker von Word kommen.

Jetzt speichern aber manche Anwender ihre Vorlagen als ganz normale Doc Dateien in Word, es erfolgt dann mit obiger Funktion keine anzeige mehr.

Falls ich mich recht erinnere gab es mal einen undokumentierten Parameter, allerdings welcher und für was der war ist mir unbekannt.

Gruß Klaus
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Klaus,

kannst du vielleicht Word mit Hilfe von ActiveX direkt ins Fenster einbinden?
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Klaus.

ich vermute das dies wirklich eine RTF-Datei sein muß und somit auch als
RTF-abgespeichert muß. Ich meine, daß eineige Dinge bei RTF anders abgespeichert werden als bei DOC.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Rolf Ramacher hat geschrieben:Ich meine, daß eineige Dinge bei RTF anders abgespeichert werden als bei DOC.
das ist auf jeden Fall richtig, eine RTF Datei ist eine Textdatei mit RTF Steuercodes und Text im RTF Format. Wenn man diese in Word öffnet, wird die Endung und das Format beibehalten (soweit ich mich erinnern kann).

Beim Speichern unter DOC wird daraus aber ein normales DOC Dokument und die RTF Struktur wird in eine DOC Struktur umgewandelt. Ein RTF Dokument, das man nur umbenannt hat düfte eigentlich gar nicht geöffnet werden.

Soweit ich mich erinnere beginnt ein RTF Dokument mit

{rtf...
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Rolf,

es muss keine RTF Datei sein, es soll ja durchaus eine DOC Datei sein.
Bevor es die 1.9 Version gegeben hat, wurde von mir TagProcess von Phil Ide benutzt um "Seriendruckfelder" in RTF/DOC Dateien zu realisieren.
In der 1.9 Version wurde das von mir auf ActiceX umgestellt, d.gh. Doc Dateien mit Textmarken.
Mein Problem ist eigentlich folgendes.
Ich habe ein Static in dem ich die Dokumente mit RTFDisplay anzeige.
Das funktioniert solange wie es eine .RTF Datei oder eine .DOC Datei (die RTF enthält) ist. Bei einer reinen DOC Datei versagt RTFDisplay.
Hatte mal in Erinnerung das es ein undokumentierters (rtfMLE:Format) Format gibt, abre nicht ob das mit Doc Dateien zu tun hatte.
Ich möchte aber das auch reine Doc Dateien angezeigt werden, wobei hier wirklich nur das anzeigen und Drucken möglich sein sollten.
Antworten