Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Neues altes Thema RunShell zur PDF-Datei-Darstellung

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 65
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Neues altes Thema RunShell zur PDF-Datei-Darstellung

Beitrag von KHKDampflok » Di, 23. Aug 2016 22: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 !!!

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10580
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

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

Beitrag von AUGE_OHR » Di, 23. Aug 2016 23: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
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1305
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

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

Beitrag von Rudolf » Mi, 24. Aug 2016 9: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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13768
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Mi, 24. Aug 2016 9: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

Antworten