Hallo zusammen,
ich habe hier ein riesiges spezielles Problem, bei dem ich so langsam verzweifle - ich hoffe, hier im Forum gibt es jemand, der Erfahrung damit hat (die Hoffnung stirbt ja bekanntlich zuletzt
)...
Ich verwende hier noch Delphi 7 in Zusammenhang mit Crystal Reports.
Für den Zugriff auf Crystal Reports wird die letzte verfügbare Delphi Wrapper-Klasse Ucrpe32 (war glaube ich für Crystal 11) verwendet (die ich aber inzwischen verändert habe, um Fehler zu beheben bzw. generell ein verbesserte Fehlerhandling zu haben) - ich kann aber schon vorausschauend sagen, dass es am Wrapper nicht liegt
(aber vielleicht an dessen Verwendung?).
Falls es an den Reports selber liegen sollte:
Die eigentlichen Reports (und damit deren Dateiformat) sind noch mit Crystal Reports v7 erstellt worden - das darf ich aktuell auch nicht ändern, weil es noch andere (noch ältere) Delphi-Programme gibt, die diese über den v7-Wrapper verwenden.
Wenn ich diese in einem neueren Crystal Reports-Version Dateiformat speichere, können diese Programme die Reports nicht mehr verwenden.
Die auf den Arbeitsrechnern installierte und damit verwendete Crystal-Reports-Version ist v9, es ginge auch noch v11 - sofern ich noch irgendwo mind. 10 Lizenzen dafür auftreiben kann (aktuell existieren fünfzehn v9 Lizenzen und eine v11-Lizenz).
So jetzt zum eigentlichen Problem: in den Reports integriert sind Bilddateien vom Typ .wmf; diese sind in den Reports als
OLE-Link integriert mit "automatischer Aktualisierung".
Wenn der Report geäffnet wird, sollen sich die Inhalte aktualisieren; die dahinterliegenden .wmf-Dateien werden dynamisch über das Programm angepasst (es werden Maßangaben darin ersetzt).
Werden diese Reports in Crystal Reports geöffnet, kann ich kurz den Dialog "
ActiveX-Objekte werden aktualisiert" sehen und die Bilder enthalten den Inhalt der aktuellen Dateien.
Also alles so, wie es sein soll.
Das passt auch, wenn ich vom Programm aus Crystal starte (über TCrpe.Output := toExport; TCRpe.ExportOptions.Destination := toApplication; TCRpe.ExportOptions.FileType = CrystalReportRPT).
Aber sobald ich das ganze direkt (über Crystal) an den Drucker schicke (TCrpe.Output := toPrinter) oder auch wenn ich das Crystal Vorschaufenster öffne (TCrpe.Output := toWindow), aktualisieren sich die Links nicht und enthalten den Inhalt, den sie während des Report-Designs hatten und nicht den aktuellen, der in der verlinkten Datei enthalten ist.
Die verlinkten .wmf-Dateien liegen im gleichen Verzeichnis wie die .rpt-Datei - das zeigt mir auch die Ausgabe von TCrpe.OleObjects.Items[x].LinkSource, die den vollständigen (korrekten) Pfad der Datei angibt.
Leider lässt sich dieser Pfad nicht anpassen oder sonst irgendwie die Aktualisierung der
OLE-Links über Programmcode erzwingen - zumindest habe ich keine Lösung dafür gefunden.
Nachdem es beim Öffnen von Crystal Reports funktioniert hatte, habe ich versucht das ganze zweistufig zu machen - also zuerst einen Export (TCrpe.Output := toExport; TCRpe.ExportOptions.Destination := toFile; TCrpe.ExportOptions.FileType := CrystalReportRPT) und danach die exportierte Datei an den Drucker oder das Vorschaufenster.
Ich hatte die Hoffnung, dass beim Export-Schritt der Link aktualisiert werden würde - aber leider hat das ebenfalls nicht funktioniert
Ich habe jetzt absolut keine Idee mehr, was ich noch tun könnte und bin völlig ratlos...
Eine (verzweifelte) Idee wäre noch, Crystal Reports minimiert zu starten (das aktualisiert die Links ja dann) und es dann vom Programm aus anzuweisen, das ganze zu drucken - aber wie stelle ich das ohne Benutzerinteraktion an?
Übrigens: in den o.a. Uralt-Programmversionen (die wurden noch mit Delphi v5 geschrieben und verwenden den Crystal v7 Delphi-Wrapper) funktionierte die Aktualisierung der Links noch...