Seite 1 von 1

Neues altes Thema RunShell zur PDF-Datei-Darstellung

Verfasst: Di, 23. Aug 2016 22:12
von KHKDampflok
Hallo Leute, mir ist bekannt, dass o.g. Thema bereits mehfach ausgewalzt wurde. Ich habe aber trotz intersivster Suche keine RunShell-Zeile gefunden, die mir weiter geholfen hat. Deshalb wende ich mich hilfesuchend kurz an Euch. Kurz umrissen, was ich will :

In einem seperaten Fenster (Größe muss ich noch anpassen) möchte ich eine PDF-Datei mit einem Hilfetext anzeigen, die das Manko umgeht, unter Windows 10 keine *.hlp-Dateien mehr darstellen zu können. Ich füge den Quelltext bei, in der Hoffung, das einer von Euch die RunShell-Zeile entsprechend abändert.

Code: Alles auswählen

PROCEDURE Hilfetextpdf()     

   LOCAL nEvent, mp1, mp2
   LOCAL aSize := {410,165}, aPSize, aPos
   LOCAL oParent := RootWindow():drawingArea, oOwner := ATail( aFenster ), oDlg, oXbp, oMLE
   LOCAL cAlias := ALIAS(), cText, [b]cFile := CurDrive()+":\"+CurDir()+"\Hilfe\"+"LOKLISTE_Convert.pdf"[/b]

   aPSize := oParent:currentSize()
   aPos := { (aPSize[1]/2)-(aSize[1]/2), (aPSize[2]/2)-(aSize[2]/2) }

   oDlg := XbpDialog():new( AppDesktop(), oOwner, aPos, )
   oDlg:close      := {|mp1,mp2,obj| obj:destroy(), nEvent := xbeP_Close }
   oDlg:clientSize := aSize 
   oDlg:title := " Hilfetext als PDF-Datei für die Datenbank LOKLISTE ab Windows 10"
   oDlg:icon  := 4
   oDlg:create()

   SetWindowPropertyOff( oDlg, WS_MAXIMIZEBOX+WS_MINIMIZEBOX )

   drawingArea := oDlg:drawingArea // Anzeigebereich vom Dialog holen
   drawingArea:setFontCompoundName( "8.Helv" )

   RunShell( "/C START / [b]cFile[/b]" ) // [i]Welche Parameter müssen verwendet werden ???
[/i]
   oDlg:show()
   SetAppFocus( oDlg )

   DO WHILE nEvent <> xbeP_Close 
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:keyboard := {|nKey, mp2, obj| IIf( nKey == 27, PostAppEvent( xbeP_Close,,, oDlg ), NIL ) }
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

RETURN
Für die Hilfe dankend verbleibe ich

MfG Karl-Heinz Kahl

Re: Neues altes Thema RunShell zur PDF-Datei-Darstellung

Verfasst: Di, 23. Aug 2016 23:01
von AUGE_OHR
KHKDampflok hat geschrieben: RunShell( "/C START / cFile" ) // Welche Parameter müssen verwendet werden ???
deine Syntax ist falsch ... es fehlt der EXE / BAT Name.

da du nur ein Filenamen angibt willst du die Eigenschaft von Windows Explorer welcher Extension ( .PDF) mit dem Programm verknüpft.
die API dafür ist "ShellExecuteA" mit dem Parameter "open". mehr dazu in der Wissensbasis
http://www.xbaseforum.de/viewtopic.php?f=16&t=3725

Re: Neues altes Thema RunShell zur PDF-Datei-Darstellung

Verfasst: Mi, 24. Aug 2016 9:24
von Rudolf
Hallo,
wieso nicht mit ActiveX in einem XBase++ Fenster darstellen ? geht ganz einfach und Du hast die volle Kontrolle über das PDF durch Deinen Code.
Grüße
Rudolf

Re: Neues altes Thema RunShell zur PDF-Datei-Darstellung

Verfasst: Mi, 24. Aug 2016 9:44
von brandelh
Wenn du die ot4xb einsetzt, kannst direkt diesen code verwenden, ansonsten musst du den Pfad von Acrobat Reader selbst ermitteln:

Code: Alles auswählen

   cPfad := Kompletter Pfad der PDF Datei, z.B. "d:\PDF-Daten\"
   cPDF := Name der PDF Datei
   cAcrobat := Kompletter Pfad von Acrobat Reader, wobei wegen Blanks oft " " verwendet werden müssen
 
   if file(cPfad+cPDF)
      if ! file(cAcrobat)
         cAcrobat := GetStandardProgramm(cPDF, cPfad)
      endif
      runshell(cPfad+cPDF,cAcrobat,.t.)
   endif
return
*--------------------------------------------------------------------------
function GetStandardProgramm(cFile, cPath)   // cPath force to EXE
   local cExe := ChrR(0,260) // MAX_PATH is 260
   if empty(cPath)
      cPath := cAppDir()
   endif
   if @shell32:FindExecutableA(cFile, cPath, @cExe) < 32
      cExe := ""
   else
      cExe := TrimZ(cExe)
   end
return cExe
am Besten mit einer Batchdatei ausprobieren, Pfade mit Blanks müssen dann in " " eingeschlossen werden,
hier mal ein Auszug aus meiner Erläuterung von Seiten oder DestName Aufruf:

Code: Alles auswählen

Aufruf aus der CMD-Befehlszeile - Angenommen es gäbe ein Sprungziel [b]K01[/b]:

"PFAD\AcroRd32.exe" /A "nameddest=K01" "PFAD\PDF-Datei Basis.PDF"

oder direkt die 2. Seite anzeigen

"PFAD\AcroRd32.exe" /A "page=2" "PFAD\PDF-Datei Basis.PDF"

Aufruf über Web-Site (z.B. Intranet) - Blanks im Namen habe ich hier vermieden, eventuell aber mit %20 ersetzen:

http://www.XYZ-Web-Server.de/ServerPfad/PDF-Datei_Basis.PDF#K01
http://www.XYZ-Web-Server.de/ServerPfad/PDF-Datei_Basis.PDF#page=2

Aufruf aus Xbase++ mit RunShell (entspricht API-Funktion ShellExecute())

	cPDF   := '"PFAD\PDF-Datei_Basis.PDF"'  && "=wichtig wenn Blanks in Pfad *** '  "  text " ' kann man schlecht lesen
	cSeite := '2'      //  hier Seite 2
	cZiel  := 'K01'  //  hier 01Ab anzeigen
	cAcro  := 'PFAD\AcroRd32.exe'                    && hier keine zusätzlichen " !

       	RunShell( '/A "nameddest='+cZiel+'" '+cPDF, cAcro )         -> direkt 01 anzeigen

	oder

	RunShell( '/A "page='+cSeite+'" '+cPDF, cAcro )		 -> direkt 2. Seite öffnen