![]() |
PDF aus Delphi heraus öffnen
Hallo :hi:
Ich versuche über
Delphi-Quellcode:
eine PDF Datei zu öffnen. GetLastError meldet mir nun:
ShellExecute(Application.Handle, 'open', PChar('"' + FileDir + 'helpfile.pdf' + '"'),
nil, nil, SW_NORMAL); Zitat:
|
Re: PDF aus Delphi heraus öffnen
Moin Matze,
laut Dokumentation von ShellExecute, spielt GetLastError hier keine Rolle. Schau Dir doch noch mal die möglichen Rückgabewerte von ShellExecute an. BTW: Was liefert Dir denn Assoc .pdf zurück, wenn Du es in einer Konsole ausführst? |
Re: PDF aus Delphi heraus öffnen
|
Re: PDF aus Delphi heraus öffnen
Also bei mir liefert assoc .pdf z.B
Delphi-Quellcode:
das scheint mir so nach "Acrobat Reader Dokument" auszusehen..
.pdf=AcroExch.Document
Ansonsten geh mal im Explorer auf Extras-> Ordneroptionen->Dateitypen und such dir pdf aus und ordne pdf den Acrobat Reader zu. Dann müsste es gehen denke ich. |
Re: PDF aus Delphi heraus öffnen
Da es aus dem Explorer, laut Matze, mit einem Doppelklick geht, ist dem Dateityp pdf auch der Reader als Anwendung zu geordnet.
|
Re: PDF aus Delphi heraus öffnen
Zitat:
|
Re: PDF aus Delphi heraus öffnen
Moin moin, zusammen
also normalerweise würde ich das auch so angehen wie Matze geschildert hat, aber das Problem kann bei Acrobat liegen. Probier mal erst den Acrobat zu starten und dann das PDF:
Delphi-Quellcode:
Über die Schöheit / Grausamkeit dieser Lösung brauchen wir aber nicht zu diskutieren.
ShellExecute(0, 'Open', PChar('C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe'), PChar(''), PChar(''), SW_Hide);
ShellExecute(0, 'Open', PChar('C:\...\prices.pdf'), PChar(''), PChar(''), SW_Normal); Wie man aber auf eine bestimmte Seite navigiert da habe ich immer noch keine Ahnung... Grüße // Martin PS: Du kanst natürlich PDF auch im TWebBrowser öffnen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin webbrowser1.Navigate('c:\..\MyPDFFile.pdf'); end; |
Re: PDF aus Delphi heraus öffnen
Hallo Martin,
deine erste Lösung startet zwar den Adobe Reader, jedoch im Hintergrund, d.h. ohne GUI :shock: Doch möchte ich diesen Weg nicht gehen, da nicht jeder den Adobe Reader zum anzeigen von PDF-Dateien nutzt. Und TWebBrowser integrieren muss auch nicht sein, nur um eine PDF öffnen zu können. Ich bin echt ratlos und kann mir das absolut nicht erklären. :-| Nachtrag: Achso SW_HIDE, klar sehe ich den nicht. Aber es würde auch nicht gehen. |
Re: PDF aus Delphi heraus öffnen
Matze ich habe Dein Problem irgendwo schonmal gesehen und da war die einhellige Meinung, dass es an Acrobat liegt.
Mir würde da leider nur was kommerzielles Einfallen... Grüße // Martin |
Re: PDF aus Delphi heraus öffnen
Zitat:
Gibt es denn absolut keine andere Möglichkeit? Vom Explorer kann ich diese Datei ja auch öffnen und da passiert bestimmt auch nichts anderes, als dass dem Reader über den Parameter der Pfad zur Datei übermittelt wird. |
Re: PDF aus Delphi heraus öffnen
Vielleicht nicht das was du suchst, wäre doch aber auch ne Möglichkeit: Guck dich nach guten Freeware-PDF-Komponenten um und lasse dein PDF dann direkt in deinem Programm anzeigen. Not macht erfinderisch. ;)
|
Re: PDF aus Delphi heraus öffnen
Hallo, nein ich möchte die PDF so öffnen, wie es der Anwender gewöhnt ist.
|
Re: PDF aus Delphi heraus öffnen
Und was gibt nun ShellExecute zurück?
|
Re: PDF aus Delphi heraus öffnen
Zitat:
Nur sagt mir das nicht viel. SysErrorMessage meldet mir zum Wert 31: Ein an das System angeschlossenes Gerät funktioniert nicht. Das muss wohl eine andere Funktion sein, mit der ich mit den Fehler in Textform anzeigen lassen kann. :oops: |
Re: PDF aus Delphi heraus öffnen
Das hat Christian doch schon geschrieben, dass das mit Shellexecute nicht geht:
Zitat:
Code:
0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found. ERROR_PATH_NOT_FOUND The specified path was not found. ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image). SE_ERR_ACCESSDENIED The operating system denied access to the specified file. SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid. SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed. SE_ERR_DDEFAIL The DDE transaction failed. SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out. SE_ERR_DLLNOTFOUND The specified dynamic-link library (DLL) was not found. SE_ERR_FNF The specified file was not found. SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable. SE_ERR_OOM There was not enough memory to complete the operation. SE_ERR_PNF The specified path was not found. SE_ERR_SHARE A sharing violation occurred.
Code:
/* regular WinExec() codes */
#define SE_ERR_FNF 2 // file not found #define SE_ERR_PNF 3 // path not found #define SE_ERR_ACCESSDENIED 5 // access denied #define SE_ERR_OOM 8 // out of memory #define SE_ERR_DLLNOTFOUND 32 #endif /* WINVER >= 0x0400 */ /* error values for ShellExecute() beyond the regular WinExec() codes */ #define SE_ERR_SHARE 26 #define SE_ERR_ASSOCINCOMPLETE 27 #define SE_ERR_DDETIMEOUT 28 #define SE_ERR_DDEFAIL 29 #define SE_ERR_DDEBUSY 30 #define SE_ERR_NOASSOC 31 |
Re: PDF aus Delphi heraus öffnen
Äh und wieso wolltest du dann wissen, was es zurückgibt?
|
Re: PDF aus Delphi heraus öffnen
Deswegen:
Zitat:
|
Re: PDF aus Delphi heraus öffnen
Code:
Aber das haben wir ja zu Beginn schon herausgefunden.
#define SE_ERR_NOASSOC 31
Zitat:
|
Re: PDF aus Delphi heraus öffnen
Ahm, könnte es etwas mit den "" zutun haben? Was passiert, wenn Du die Hai-Routine bei Dir in den Quellcode einsetzt?
Grüße // Martin |
Re: PDF aus Delphi heraus öffnen
Zitat:
|
Re: PDF aus Delphi heraus öffnen
Dann fällt mir nur noch eins ein: Das mit PDFs verknüpfte Programm aus der Regsitry ermitteln und das ganze mit Createprocess machen.
|
Re: PDF aus Delphi heraus öffnen
Zitat:
![]()
Code:
Pdf fehlt. :shock:
Extension: ".pcx", Typename: "pcxfile", Displayname:"PCX-Bild"
Server: "C:\Programme\Gemeinsame Dateien\Microsoft Shared\PhotoEd\PHOTOED.EXE" "%1" Extension: ".pdp", Typename: "Photoshop.PDFFile", Displayname:"" Server: d:\programme\Photoshop 6.0\Photoshp.exe "%1" Extension: ".pdt", Typename: "pdtfile", Displayname:"InkWriter-Vorlage" Server: "D:\Programme\Microsoft Office\Office\WINWORD.EXE" /n "%1" Extension: ".pfm", Typename: "pfmfile", Displayname:"Type 1-Schriftartendatei" Server: %SystemRoot%\System32\fontview.exe %1 |
Re: PDF aus Delphi heraus öffnen
Jo, so könnte man es machen. Frage, wass passiert denn wenn du im "Ausführen"-Dialog (Win.-Taste+R) die
Datei angibst, starten dann alle korrekct5? // Edit: hat sich ja dann wohl erledigt ;) |
Re: PDF aus Delphi heraus öffnen
Jupp, dann wird sie korrekt geöffnet (auch wenn ich die Anführungszeichen miteinbezihe).
PS: Erledigt? kA, Geht auf jedenfall. ;) |
Re: PDF aus Delphi heraus öffnen
:gruebel: Das kann mit dem Acrobat Server zusammen hängen (Adobe Reader-Schnellstart im "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Cur rentVersion\Run"). Im Normalfall ist aber das .pdf-Format in der Registry für den Acrobatreader eingetragen "HKEY_CLASSES_ROOT\.pdf".
|
Re: PDF aus Delphi heraus öffnen
Hm und wenn man keinen Reader von Adobe nutzt? Ich brauche irgendwie eine allgemeine Lösung, doch wenn jeder seine File Extensions speichert, wo er Lust hat, ist das ja hoffnungslos.
|
Re: PDF aus Delphi heraus öffnen
Du möchtest eine Hilfedatei machen oder ? Ich mache das am einfachsten so, indem ich eine RTF-Datei als recource einbinde und dan in einem Richedit anzeigen lasse. Nachteil ist halt die formatierung von Grafiken.
Es gibt auch gute Hilfecompiler und Editoren zum erstellen von .hlp, .chm usw. So zum Bleistift.... |
Re: PDF aus Delphi heraus öffnen
Moin, danke, doch chm ist veraltet und hlp ist auch nicht mein Fall, darum möchte ich bei PDF bleiben. :stupid:
|
Re: PDF aus Delphi heraus öffnen
Zitat:
Guck in der Reg. nach ob der Reader installiert ist, wenn je starte ihn mit Shellexecute und als Parameter übergibst du ihm die PDF-Datei. :dance: |
Re: PDF aus Delphi heraus öffnen
Zitat:
Das Problem ist auch, dass ich eine PDF aus dem Internet 1:1 integrieren möchte, daher muss das mit PDFs klappen. Zitat:
Mich wundert halt, dass ich über den Explorer PDFs ganz normal starten kann, wo ja auch nur ein Parameter übergeben wird. |
Re: PDF aus Delphi heraus öffnen
Wahrscheinlich gibt es mehrere Möglichkeiten pdf-Files zuzuordnen. Bringt aber nichts auf dem Shellexecute zu bestehen. Dann bleibt das ActiveX. Bei VB gab es auch die Möglichkeit die ActiveX im Programmverzeichnis zu halten. Dann brauchte man d nichts zu installieren. Dann hättest Du alle Komponenten selbst zur Verfügung.
Grüße // Martin |
Re: PDF aus Delphi heraus öffnen
Oje danke, also ActiveX hatte ich auch nicht vor einzubinden vor allem nur wegen einer Verknüpfung zu einer Datei. :(
|
Re: PDF aus Delphi heraus öffnen
Wie sieht's denn in deiner Registry unter "HKEY_CLASSES_ROOT\pdf_auto_file\shell\Open" aus?
|
Re: PDF aus Delphi heraus öffnen
:hi: Flocke
Es hat sich soeben gelöst, nach ewigem Suchen bin ich auf folgende Prozedur gestoßen. Gefunden habe ich sie sogar ![]()
Delphi-Quellcode:
Und mit dieser geht's. :hello:
uses
ShellAPI; [...] procedure ExecuteProgramm(const PFileName: string); var SEInfo: TShellExecuteInfo; ExitCode: DWORD; ExecuteFile: string; begin ExecuteFile:=PFileName; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode <> STILL_ACTIVE) or Application.Terminated; end else begin Application.MessageBox('Fehler beim Starten des Programms', 'Programm Starten', mb_OK+mb_IconError); end; end; Danke für eure Hilfe. :) |
Re: PDF aus Delphi heraus öffnen
KLASSE ! Gut gemacht Matze!
Die Idee das als Dokumentation und eventuell Hilfeersatz zu nehmen ist ehedem prima. Na vielleicht kann man dem Windows-Handle auch noch die Tastendrücke zum gewünschten Suchbegriff oder zur Zielseite mitgeben. Und dann noch bei uns in der DP gefunden ! Find ich gut :P und viele Grüße // Martin |
Re: PDF aus Delphi heraus öffnen
Zitat:
Prima! Danke |
Re: PDF aus Delphi heraus öffnen
Zitat:
Ich habe mein Prog in irgendeinem Verzeichnis liegen c:\...\Prog die pdfs, die ich anzeigen möchte, liegen in einem Verzeichnis darunter, also c:\...\Prog\doku Bei der oben vorgestellten Lösung wird doch eine absolute Adresse verlangt. Wie kann ich erreichen, dass die pdf-Dateien in egal-welchem-Verzeichnis gefunden werden, also meinetwegen sowohl auf e:\meineProg\Prog\Doku als auch auf "d:\prog\Doku"? Ich habe in Erinnerung, dass es irgendwelche Parameter gibt. ApplicationPath oder so. Aber: wie heißen die genau, und wie setze ich sie ein? |
Re: PDF aus Delphi heraus öffnen
Das übergeordnete Verzeichnis kannst du so ermitteln:
Delphi-Quellcode:
Ob das die sauberste Lösung ist, kann ich dir nicht sagen.
Pfad := ExtractFilePath(ExcludeTrailingPathDelimiter(Pfad));
Den Pfad zu deiner Anwendung erhälst du so:
Delphi-Quellcode:
Aber zukünftig bitte die Suche benutzen oder einen neuen Thread erstellen.
ExtractFilePath(ParamStr(0))
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz