Dateinamen aus Speichern unter Dialog abfangen - geht das?
-
Hallo Zusammen,
ich habe auf meinem Formular eine TWebBrowser Komponente. In der rufe ich eine Webseite auf. Auf dieser Webseite lade ich eine PDF Datei runter und speicher die Datei bei mir auf der Festplatte.Gibt es eine Möglichkeit, dass ich den Namen unter dem ich das PDF auf meiner Festplatte speicher aus dem Speichern unter Dialog auslese, oder abfange?
Danke im voraus.
-
Einen Abfangweg um den Dateinamen heraus zu bekommen wüsste ich nicht,
aber man kann das Ereignis OnBeforeNavigate2 auswerten und schauen ob der Benutzer ein PDF Dokument herunterladen möchte bzw. dann selbst den Speichern Dialog erstellen und die Datei herunter laden.So ala...
//--------------------------------------------------------------------------- #include <vcl.h> #include <memory> #include <stdio.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma comment(lib, "Wininet.lib") #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::WebBrowser1BeforeNavigate2(TObject *ASender, const IDispatch *pDisp, OleVariant &URL, OleVariant &Flags, OleVariant &TargetFrameName, OleVariant &PostData, OleVariant &Headers, WordBool &Cancel) { String sURI = URL.bstrVal; String sFileExt = ExtractFileExt(sURI); if (sFileExt.LowerCase() == ".pdf") { std::unique_ptr<TSaveDialog> SaveDialog(new TSaveDialog(this)); SaveDialog->DefaultExt = "pdf"; SaveDialog->Filter = "PDF Dokument (*.pdf)|*.pdf"; SaveDialog->FileName = "*.pdf"; if (SaveDialog->Execute()) { DownloadFile(sURI, SaveDialog->FileName); } } } //--------------------------------------------------------------------------- bool TForm1::DownloadFile(const String URL, const String File) { bool result = false; DWORD bytesRead; BYTE buffer[1024]; FILE *hDLFile; HINTERNET hSession, hRequest; hSession = InternetOpen(Application->Title.w_str(), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (hSession != NULL) { hRequest = InternetOpenUrl(hSession, URL.w_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0); if (hRequest != NULL) { hDLFile = _wfopen(File.w_str(), L"wb"); if (hDLFile != NULL) { while (true) { if (InternetReadFile(hRequest, buffer, 1024, &bytesRead) == false) { break; } if (bytesRead != 0) { fwrite(buffer, bytesRead, 1, hDLFile); } else { // ready downloaded result = true; break; } } fclose(hDLFile); } InternetCloseHandle(hRequest); } InternetCloseHandle(hSession); } return result; } //---------------------------------------------------------------------------
-
Nach dem letzten Tip aus dem Forum hier habe ich nun mal die POP3-Komponenten von IPWorks in der Version 8 ausprobiert. Das funktioniert auch alles wunderbar, das einzige Problem habe ich mit Umlauten, die werden einfach verschluckt. Leider ist die Doku von IPWorks nicht besonders Userfreundlich oder ich bin zu dumm dafür. Hat jemand Erfahrung mit dieser Komponente? Ich würde gerne einfach die Codepage auf UTF-8 umstellen.