Autor Beitrag
Guenter Forster
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 05.09.09 09:45 
Hallo Delphi-Fans,

ich habe seit einigen Jahren eine größere Anwendung laufen, die auch Daten von Projekten in einer Firbeird-Datenbank aufbewahrt. Zur Anzeige der Blobdaten sind auf einem Formular Timage, Richedit und TWebbrowser, die jeweils passend zum Inhalt sichtbar gemacht werden. Dazu speichere ich die Daten mit passender Endung als doku.jpg oder duko.pdf und lade sie dann in die Ansicht. (Webbrowser.navigate('c:\doku.pdf').
Blöderweise ist der PDF-Viewer innerhalb des Twebbrowser ein activex object, das nach der ersten Nutzung meine doku.pdf nicht freigibt, so dass ich bei einem Datensatzwechsel keine neue Datei erstellen kann. Mir fehlt der Befehl, das das Object nicht mehr zugreift. Oder muß ich Twebbrowser zerstören und jedesmal wieder neu erzeugen ??

Gruß Günter

Moderiert von user profile iconNarses: Titel geändert.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 05.09.09 09:56 
Hallo und :welcome: im Forum!

user profile iconGuenter Forster hat folgendes geschrieben Zum zitierten Posting springen:
Oder muß ich Twebbrowser zerstören und jedesmal wieder neu erzeugen ??
Das wäre wohl die einfachste Variante, vor allem kannst du dann die gerade benötigte Komponente erzeugen und musst die nicht alle unsichtbar auf dem Formular haben.

Ansonsten wäre es vielleicht sinnvoller die Dateien direkt in Delphi anzuzeigen statt den Umweg über den TWebBrowser zu gehen. Dafür gibt es z.B. von Foxit etwas. Das ist zwar nicht gerade billig, aber je nach Anwendungszweck lohnt es sich durchaus:
www.foxitsoftware.com/pdf/sdk/activex/
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Sa 05.09.09 10:23 
oder bastel dir eine leere html seite. immer, wenn du eine neue datei (pdf) generieren willst, navigierst du zu der html seite. wenn die pdf fertig ist, gehst du wieder dorthin. dann kannst du auch in der html sowas schreiben wie "bitte warten, dokument wird erstellt"...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Guenter Forster Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 05.09.09 11:10 
leere Seite geht nicht, die PDF ist dann immer noch am Acrobat gebunden. Seltsamerweise andere PDF auch nicht. Nur wenn ich zum Datensatz der ersten PDF gehe, kann diese auch wieder angelegt werden. Als würden bei webbrowser.navigate immer neue Instanzen des Controls angelegt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 05.09.09 11:12 
Dann gibt es eben nur die anderen Möglichkeiten. ActiveX-Control von Adobe vom Adobe Reader, Foxit Control, Komponente immer neu erzeugen, ...
Guenter Forster Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 07.09.09 08:46 
Ich habe leider keine saubere Lösung gefunden. Unsauber :

ich lege beim Öffnen des Formulars ein temp Verzeichnis an, speichere die Daten unter der Datenbank ID und räume das Verzeichnis nach dem Schließen des Formulars über shellexecute wieder weg. Ist ja eigentlich kein schöner Programmstil. Es ist mir nur aufgefallen, das einige Programme mit eingebetten Dokumenten es auch so machen (z.B. Elo-Office). Brauche ich also nicht schlecht zu schlafen :-))

Danke für eure Hilfe,

Gruß Günter