Reader vollständig anzeigen [Erledigt]

Alles rund um die Acrobat-Ansteuerung und Nutzung von PDF-Dokumenten per AX

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Reader vollständig anzeigen [Erledigt]

Beitrag von Jan »

Ich weiß nicht, was ich da falsch mache. Ich möchte gerne eine PDF im Adobe Reader anzeigen. Aber:

Wenn ich die mit CreateObject() aufrufe, dann wird ohne jede Fehlermedlung der Code durchlaufen, aber nichts passiert. oReader:LoadFile() gibt aber .F. zurück.

Wenn ich das mit XbpActiveXControl() mache, dann wird alles ordentlich durchlaufen. Die PDF wird mit LoadFile() auch geöffnet (exakt die gleiche Zeile wie bei CreateObject übrigens! Hier klappt es merkwürdiger Weise). Aber ohne den Reader-Rahmen, Menü, etc. Nur die Werkzeugleiste und die Scrollbars sind da. Ich finde auch keine Methode, wie zumindest die Menüleiste eingeblendet werden kann.

Weiß jemand da Abhilfe?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Jan hat geschrieben:Wenn ich die mit CreateObject() aufrufe, dann wird ohne jede Fehlermedlung der Code durchlaufen, aber nichts passiert. oReader:LoadFile() gibt aber .F. zurück.
... und wie willst du bei CreateObject() auf Events "reagieren" ?
Jan hat geschrieben:Wenn ich das mit XbpActiveXControl() mache, dann wird alles ordentlich durchlaufen. Die PDF wird mit LoadFile() auch geöffnet (exakt die gleiche Zeile wie bei CreateObject übrigens! Hier klappt es merkwürdiger Weise). Aber ohne den Reader-Rahmen, Menü, etc. Nur die Werkzeugleiste und die Scrollbars sind da. Ich finde auch keine Methode, wie zumindest die Menüleiste eingeblendet werden kann.
was sagt denn das Demo C:\ALASKA\XPPW32\Source\samples\activex\acrobat\main.prg ?
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Jan »

Jimmy,

ich möchte gerne eine PDF im Reader öffnen. Und das soll so aussehen, als hätte ich die PDF aus dem Reader heraus geöffnet. Aber wenn ich das über ActivX mache, dann fehlt der wichtigste Teil, nämlich der Adobe-Rahmen mit dem Menü. Mache ich das über Runshell(), dann klappt das wie gewünscht. Aber leider hat nicht jeder den Reader im gleichen Pfad installiert, und damit ist der Knall vorprogrammiert.

Die Alaska-Demo hilft da in keinster Weise weiter.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Jan hat geschrieben:ich möchte gerne eine PDF im Reader öffnen. Und das soll so aussehen, als hätte ich die PDF aus dem Reader heraus geöffnet. Aber wenn ich das über ActivX mache, dann fehlt der wichtigste Teil, nämlich der Adobe-Rahmen mit dem Menü.
dafür gibt es dann den DSOframer.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Jan »

... aber nicht unter Windos 7 64 Bit. Da streikt der leider, im Internet ein viel diskutiertes Problem. Und zum eigenen Leidwesen auch schon selber erfahren.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Jan hat geschrieben:... aber nicht unter Windos 7 64 Bit.
ok ... das hast du aber nicht vorher gesagt ;)
dein Wunsch ist aber genau das was wohl die Hersteller NICHT wollen denn dann sieht es ja so aus als wenn das Produkt "von dir" wäre ...

... irgendjemand ( vermutlich Pablo ) sagt mir mal das man "jedes" Programm "von aussen" ansteuern könnte wenn es die "Windows Eventschleife" benutzen würde ...
für Xbase++ muss man dazu eine SubClass anlegen

Code: Alles auswählen

   ::hXbp    := ::GetHWND()
   ot4xb_subclasswindow(::hXbp,Self,0,"xbp_wndproc")
...
INLINE METHOD xbp_wndproc( hWnd,nMsg,wp,lp,ctx)
   DO CASE
      CASE nMsg == WM_*     // hier werden WM_* Events erwartet
aber frage mich nicht wie man das mit dem Adobe Reader zusammen bekommt ...
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Jan »

Ich frage mich, warum das nicht klappt. Wenn ich Excel oder Word per ActiveX starte, dann erscheinén die doch auch vollständig. Warum nicht der Adobe Reader?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Jan hat geschrieben:Ich frage mich, warum das nicht klappt. Wenn ich Excel oder Word per ActiveX starte, dann erscheinén die doch auch vollständig. Warum nicht der Adobe Reader?
weil er keine Commandbar hat ?

der "Vorteil" von der "Ribbonbar" ist doch das man die ausblenden/verschieben kann wie man will
während ein Menu immer von einem Dialog abhängig ist wie ihn DOSframer "simulieren" kann.
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Koverhage »

Jan,

Du kannst nicht nur davon ausgehen, das jeder Anwender den Reader an gleicher Stelle hat, sondern den
überhaupt einsetzt.
Hubert macht das in HBPRINTPDF (wie ich übrigens auch), prüfen welches Standardprogramm für
pdf Dateien eingetragen ist, dieser wird dann über runshell aufgerufen.
Falls der Anwender keinen installiert hat, kannst Du das ja sogar als Service anbieten.
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Jan »

Jimmy,

es fehlt nicht nur die Menüleiste, es fehlt der komplette Rahmen. Und bei MS-Ofice-Programmen wird das jeweilige Programm vollständig angezeigt. Und es gibt anscheinend auch keine Methode, mit der ich beides aufrufen kann. Toolbar etc. kann man ja ein- oder ausschalten. Aber die Menüleiste nicht :angry1:

Klaus,

in diesem Fall gehe ich davon aus, das der Adobe Reader installiert ist. Das kann ich voraussetzen. Ich kann aber nicht voraussetzen, das der Pfad immer der gleiche ist, und damit funktioniert Runshell nicht mehr, obwohl darüber der Reader genau so gestartet wird, wie ich das brauche.

Grundsätzlich stellt sich mir einfach die Frage, warum der Reader so reagiert. 1) Warum geht das über CreateObject() garnicht, ohne jede Fehlermeldung, und 2) warum nur abgespeckt über XbpActiceXControl()?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Reader vollständig anzeigen

Beitrag von Manfred »

Jan,

kannst Du nicht über die Registry abfragen, wo der Reader installiert ist und dann damit arbeiten?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Jan hat geschrieben:es fehlt nicht nur die Menüleiste, es fehlt der komplette Rahmen. Und bei MS-Ofice-Programmen wird das jeweilige Programm vollständig angezeigt. Und es gibt anscheinend auch keine Methode, mit der ich beides aufrufen kann. Toolbar etc. kann man ja ein- oder ausschalten. Aber die Menüleiste nicht :angry1:
Achtung URL geht auf eine 400 Seiten PDF, also rechte Maustaste und abspeichern.
http://partners.adobe.com/public/develo ... erence.pdf
darin ist dann die
Adobe Acrobat 7.0.5
Acrobat Interapplication Communication Reference
enthalten.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von brandelh »

Jan hat geschrieben:Klaus,
in diesem Fall gehe ich davon aus, das der Adobe Reader installiert ist. Das kann ich voraussetzen.
Ich kann aber nicht voraussetzen, das der Pfad immer der gleiche ist, und damit funktioniert Runshell nicht mehr, obwohl darüber der Reader genau so gestartet wird, wie ich das brauche.
genau das meinte Klaus mit dem Verweis auf mein HBPrintPDF, dort habe ich im Beispiel eine Funktion hinterlegt, die ermittelt welcher PDF Writer zu verwenden ist und die Ergebnisse anzeigt.
Schauen wir mal nach ... ;-)

Eventuell muss man die Pfad und Programmvariablen noch mit " umschließen um Blanks bedienen zu können, dann wäre es:

Code: Alles auswählen

runshell(chr(34)+cPfad+cPDF+chr(34),chr(34)+cAcrobat+chr(34),.t.)
Ich bin mir da aber nicht sicher.

Code: Alles auswählen

#include "ot4xb.ch"      // FindExecutableA() könnte man auch direkt mit dllfunction() aufrufen, denke ich ;-) 
...
set charset to ansi       // müsste bei dir auch anders gehen.
...
cAcrobat := "C:\Programme\Adobe\Reader 9.0\Reader\AcroRd32.exe"  // früher habe ich alle vorgegeben, aber ...
cPDF     := "HelloFromDLL.pdf"
cPfad    := cAppPath()  // ot4xb
...
if file(cPfad+cPDF)  // nur wenn eine PDF erzeugt wurde, aber mit den vollständigen Pfad !
   if ! file(cAcrobat) // wenn der Acrobat da nicht liegt, das standard Programm nutzen.
        cAcrobat := GetStandardProgramm(cPDF, cPfad)
   endif
   runshell(cPfad+cPDF,cAcrobat,.t.)
endif
...
*--------------------------------------------------------------------------
function GetStandardProgramm(cFile, cPath)
   local cExe := ChrR(0,260) // MAX_PATH is 260
   if @shell32:FindExecutableA(cFile, cPath, @cExe) < 32
      cExe := ""
   else
      cExe := TrimZ(cExe)
   end
return cExe
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16488
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Martin Altmann »

Moin,
wenn Du davon ausgehen kannst, dass ein Reader installiert ist, kannst Du die pdf einfach starten (runshell). Die wird dann im Standardprogramm, das fuer PDF auf dem PC konfiguriert ist, angezeigt.

Viele Gruesse,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Reader vollständig anzeigen

Beitrag von Lewi »

In Anlehnung dessen, was Martin in Bezug zur Standardanwendung darlegt, wäre eine Aufruf der Windows Api-Funktion "aShellExeCute" der richtige Weg, um z.B. PDF-Dokumente mit der für diese Extention innerhalb von Windows konfigurierten Standardanwendung zu öffnen bzw. zu drucken. Diverse Code-Beispiele sind unter der Suchfunktion dieses Forums zu finden.

Der Vorteil dieser Funktion liegt aus Entwicklersicht darin, dass nicht festgestellt werden muß, welcher PDF-Reader als "Standard" definiert ist bzw. wo er sich befindet. Über die Return-Codes dieser Funktion können auch diverse Fehler ausgewertet werden.

Gruß, Olaf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Jan hat geschrieben:Die Alaska-Demo hilft da in keinster Weise weiter.
ich habe mit dem Demo noch mal rum-gespielt und gemerkt das es sich ja "nur" um das "Anzeige" ( Browse ) Modul handelt mit der
CLSID {CA8A9780-280D-11CF-A24D-444553540000} oder "AcroPDF.PDF"
AxAcroPDFLib.AxAcroPDF
An object containing a set of methods that provide access to PDF browser controls. This is a creatable interface. This object makes it possible to load a file, move to various pages within the file, and specify various display and print options.
tja "mehr" kann man mit "dem" Object nicht.

wenn ich nun in der Registry die CLSID suche finde ich noch eine ganze Menge "mehr" die "ähnlich" aussehen
Acrobat_OLE_Methods.JPG
Acrobat_OLE_Methods.JPG (150.93 KiB) 17695 mal betrachtet
die Angaben in der Registry habe ich nun in dem angegebenen 400 Seiten PDF gesucht sowie den Begriff "Menu" und diverse Methoden gefunden.

jedoch ist scheinbar keiner der Methoden zum "aufbauen" eines Menus gedacht sondern zum "abfragen" und "ausführen" von Menu Items.

wenn ich nun WinID nehme "sehe" ich das dass Menu zum Dialog gehört, so wie es ja sagte.
du musst also selbst das Menu in dein Dialog einbauen und dann das "HMENU" ( Vermutung )
vom Menubar ( XbpMenuBar():getHWND() ) an "AcroExch.App" übergeben wo es die Methode(n) gibt.

man muss also mit "mehr" als einem ActiveX arbeiten so wie es bei Codejock auch oft der Fall ist.
Jan hat geschrieben:Wenn ich Excel oder Word per ActiveX starte, dann erscheinén die doch auch vollständig.
ich sage ja das es eine "Commandbar" ist die nicht Dialog "abhängig" ist.
somit kann man die "Commandbar" an-/ab- stellen ähnlich einer Toolbar.

Menu -> Dialog abhängig, immer direkt unter der Titlebar
Toolbar -> auf der o:drawingArea. sinnvoll nur an den 4 Rändern
Commandbar ( Ribbon ) -> frei platzierbar auch auf dem AppDeskTop()
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Reader vollständig anzeigen

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:wenn Du davon ausgehen kannst, dass ein Reader installiert ist, kannst Du die pdf einfach starten (runshell). Die wird dann im Standardprogramm, das fuer PDF auf dem PC konfiguriert ist, angezeigt.
das gilt natürlich nicht nur für PDF sondern alle Datei Typen

Code: Alles auswählen

FUNCTION SHELLOPENFILE(cPath, cFILE )
LOCAL lSuccess
LOCAL Retvar := .F.
/*----------------------------------------------------------
  Created from ContactUs.PRG
  Posted to Alaska Generic NG 3/15/01
  By Anand K Gupta  Sun, 24 Dec 2000
----------------------------------------------------------- */
* #define SW_HIDE             0
* #define SW_NORMAL           1
* #define SW_SHOWMINIMIZED    2
* #define SW_SHOWMAXIMIZED    3
* #define SW_MAXIMIZE         3
* #define SW_SHOWNOACTIVATE   4
* #define SW_SHOW             5
* #define SW_MINIMIZE         6
* #define SW_SHOWMINNOACTIVE  7
* #define SW_SHOWNA           8
* #define SW_RESTORE          9
* #define SW_SHOWDEFAULT      10
* #define SE_ERR_NOASSOC 31

   lSuccess := DllCall( "SHELL32.DLL"  , DLL_STDCALL, ;
            "ShellExecuteA", AppDesktop():GetHWND(), "open", cPath+cFile,;
            NIL, CurDir(), SW_NORMAL )  // SW_MAXIMIZE

   DO CASE

   CASE lSuccess > 32                  // Aufruf erfolgreich
      Retvar := .T.

   Case lSuccess = SE_ERR_NOASSOC      // Keine verknüpfte Anwendung

      // Falls ShowOpenWithDialog = True, wird der Dialog
      // "Öffnen mit" für diese Datei angezeigt:
      // Shell "RunDLL32 shell32.dll,OpenAs_RunDLL " & Filename

      DllCall( "SHELL32.DLL"  , DLL_STDCALL, ;
            "OpenAs_RunDLL", AppDesktop():GetHWND(), NIL, cPath+cFile,;
            NIL, CurDir(), SW_NORMAL )  // SW_MAXIMIZE

      //  Die Auswahlmöglichkeit wird als Erfolg gewertet:
      Retvar := .T.
   OTHERWISE
      // ShellExecute war erfolglos.
      // Boolean-Standardwert False zurückgeben

      Retvar := .F.
   ENDCASE

RETURN Retvar
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16488
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Martin Altmann »

Jimmy,
klar gilt das grundsaetzlich :!: Ist auch am einfachsten so.

Viele Gruesse,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Reader vollständig anzeigen

Beitrag von Jan »

OK, hat 1a geklappt mit dem Code von Jimmy. Danke.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten