Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WebBrowser 'Ziel freigeben' (https://www.delphipraxis.net/102549-webbrowser-ziel-freigeben.html)

Berni68 30. Okt 2007 20:32


WebBrowser 'Ziel freigeben'
 
Hallo,

ich nutze den WebBrowser um unter anderem um .pdf-Dateien anzuzeigen:
WebBrowser.Navigate('x:\fifi.pdf');
geht soweit ganz gut.
Mein Problem ist, daß dann 'x:\fifi.pdf' blockiert ist, d.h. kann weder verschoben noch umbenannt werden.

Wie kann man das blockieren verhindern?
Bin für jede Anregung dankbar!

mkinzler 30. Okt 2007 20:34

Re: WebBrowser 'Ziel freigeben'
 
Liegt am Acrobat(-Plugin).

Berni68 30. Okt 2007 20:42

Re: WebBrowser 'Ziel freigeben'
 
wenn man statt des WebBrowsers das Acrobat-Plugin verwendet, kann man
fifi.pdf problemlos umbenennen oder verschieben. Am plugin allein liegt's also nicht.
Die Probleme mit dem Acrobat-Plugin liegen an vielen anderen Stellen: z.B. unterschiedliche
Reader-Versionen, Resize nicht pdf-Dateien ,z.B, .xls .doc etc.

marabu 31. Okt 2007 06:46

Re: WebBrowser 'Ziel freigeben'
 
Hallo Bernhard,

solange der Acrobat Reader die Datei im Zugriff hat, kannst du sie nicht verschieben. Sobald du den WebBrowser an eine andere Stelle navigierst (about:blank genügt schon), wird das Dokument wieder freigegeben - wenn keine Komplikationen auftreten.

Grüße vom marabu

torud 7. Jan 2008 12:26

Re: WebBrowser 'Ziel freigeben'
 
Diese Aussage kann ich leider nicht bestätigen. Folgendes mache ich derzeit und ab dem 2. Aufruf erhalte ich immer eine Exception:

Im Projekt test.exe ist eine Exception der Klasse EFCreateError aufgetreten. Meldung: 'Datei C:\Programme\Borland\Delphi6\Projects\test\ablage\ tmp\temp.pdf kann nicht erstellt werden'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.


Code:
procedure TForm1.btn_pdf_previewClick(Sender: TObject);
var
    FileName:String;
begin
    pdf.Navigate('about:blank'); //webbrowser auf leere seite führen
    FileName := tmp_path + 'temp.pdf'; //festlegen des dateinamens
    OverHandContent; //internes übergeben der inhalte an pdf-controls
    pg_main.ActivePageIndex := 2; //mogelpackung
    //erstellen der pdf-datei
    PReport1.FileName := FileName;
    PReport1.BeginDoc;
    PReport1.Print(pdf_doc);
    PReport1.EndDoc;
    //akualisieren einer internen liste
    list_pdf.Clear;
    GetFilesInDirectory(pdf_path,'*.pdf',list_pdf.Items,false,false);

    pdf.Navigate(FileName); //aufruf der pdf-datei im webbrowser
    pg_main.ActivePageIndex := 3; //wechsle auf die vorschauseite...
end;
Also woran könnte es nun liegen!? Gibt der Webbrowser denn die pdf-Datei wirklich wieder frei? In meinem Taskmanager läuft jedenfalls noch eine Instanz des Readers, auch nach dem about:blank!

Achso: Ich habe zum Testen die Version 7.0.9 benutzt...Vielleicht ist es doch sinnvoller direkt die PDF mit ShellExecude anzeigen zu lassen!? Dann kann das Programm wenigstens nach dem Schliessen des Readers die Datei wieder überschreiben...

marabu 9. Jan 2008 13:08

Re: WebBrowser 'Ziel freigeben'
 
Hallo Tom,

Zitat:

Zitat von torud
... Gibt der Webbrowser denn die pdf-Datei wirklich wieder frei? In meinem Taskmanager läuft jedenfalls noch eine Instanz des Readers, auch nach dem about:blank! ...

die Datei wird definitiv freigegeben, die Reader-Instanz bleibt natürlich im Speicher. In deinem Code solltest du mit dem Schreibzugriff auf die "freigegebene" Datei zumindest solange warten, bis sie auch wirklich freigegeben ist: Ich würde den Zugriff vom Ereignis OnDocumentComplete() abhängig machen.

Freundliche Grüße

inherited 9. Jan 2008 13:36

Re: WebBrowser 'Ziel freigeben'
 
Sonst kopier doch die Datei in ein temporäres Verzeichnis und navigiere sie dann an. Dann kann die Originaldatei immer noch geändert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz