Neues altes Thema RunShell zur PDF-Datei-Darstellung

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Neues altes Thema RunShell zur PDF-Datei-Darstellung

Beitragvon KHKDampflok » Di, 23. Aug 2016 21:12

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
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
KHKDampflok
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 64
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau

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

Beitragvon AUGE_OHR » Di, 23. Aug 2016 22:01

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
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10063
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

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

Beitragvon Rudolf » Mi, 24. Aug 2016 8:24

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
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
 
Beiträge: 1150
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich

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

Beitragvon brandelh » Mi, 24. Aug 2016 8:44

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

Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13201
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim


Zurück zu GUI

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron