Verknüpfte Bilder mit externen Programm anzeigen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
ol-d
Beiträge: 5
Registriert: Sa 29. Sep 2018, 10:41

Verknüpfte Bilder mit externen Programm anzeigen

Beitrag von ol-d » Mi 10. Okt 2018, 22:58

Hallo an Alle

Ich möchte die im Link der Datenbank gespeicherte Links mit einen Externen Programm Öffnen mit den System Betrachter Funktioniert es. Aber mit einen anderen nicht. Da der Bild Link mit File anfängt ..

Code: Alles auswählen

SUB ZOOM1
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stUrl AS STRING
	DIM stFeld AS STRING
	DIM arUrl_Start()
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDrawpage.Forms.getByName("MainForm")
	oFeld = oForm.getByName("Grafisches Steuerelement 1")
	stUrl = oFeld.BoundField.getString
	REM Start des Files mit der entsprechenden URL-Verbindung
	arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = "C:\Archaeologie\bildvermessen.exe " + convertToUrl(arUrl_Start(0) + stUrl)
	oShell.execute(stFeld,,0)
END SUB
Der Fehler müste im convertToUrl(arUrl_Start(0) + stUrl) ????

Hat jemand Ahnung über die Makro Programmierung...
Das Externe Programm liegt im C:\Archaeologie\bildvermessen.exe wie die Datenbank ...

Ich verwende LO Version: 6.0.6.2 (x64)
Danke euch ....



musikai
Beiträge: 172
Registriert: Do 14. Mai 2015, 17:53

Re: Verknüpfte Bilder mit externen Programm anzeigen

Beitrag von musikai » Do 11. Okt 2018, 10:28

Bei oShell.execute(stFeld,,0) nicht alles in stFeld schreiben sondern eher so:
oShell.execute(Programm,Datei,0)

Also:

Code: Alles auswählen

App_path= "C:\Archaeologie\bildvermessen.exe"
Datei_path= ConvertFromUrl(arUrl_Start(0) + stUrl)

oShell.execute(App_path,Datei_path,0)
Natürlich muss

Code: Alles auswählen

arUrl_Start(0) + stUrl
einen ordentlichen Pfad ergeben.
Zuletzt geändert von musikai am Do 11. Okt 2018, 11:56, insgesamt 1-mal geändert.
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

ol-d
Beiträge: 5
Registriert: Sa 29. Sep 2018, 10:41

Re: Verknüpfte Bilder mit externen Programm anzeigen

Beitrag von ol-d » Do 11. Okt 2018, 11:38

Danke für den Tipp , war der richtige Ansatz ....
in der Ausführung gab es noch eine Fehlermeldung oShell .... habe es umgeändert in nur Shell und es geht ....

Code: Alles auswählen

SUB ZOOM1
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stUrl AS STRING
	DIM stFeld AS STRING
	DIM arUrl_Start()
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDrawpage.Forms.getByName("MainForm")
	oFeld = oForm.getByName("Grafisches Steuerelement 1")
	stUrl = oFeld.BoundField.getString
	REM Start des Files mit der entsprechenden URL-Verbindung
	arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title)
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = arUrl_Start(0) + "bildvermessen.exe " + " " + convertfromurl(arUrl_Start(0) + stUrl)
	Shell(stFeld,,0)
END SUB
wo jetzt der unterschied zwischen oShell und Shell ist habe ich leider nichts gefunden....
Danke musikai hat geholfen ....

musikai
Beiträge: 172
Registriert: Do 14. Mai 2015, 17:53

Re: Verknüpfte Bilder mit externen Programm anzeigen

Beitrag von musikai » Do 11. Okt 2018, 12:02

Ah,
hab grad oben meine Antwort geändert.
Keine Ahnung, warum bei Dir Shell funktionert. Das ist eher Glückssache. Benutze lieber oShell, denn das hast Du ja weiter oben kreiert

Code: Alles auswählen

oShell = createUnoService("com.sun.star.system.SystemShellExecute")
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

gogo
Beiträge: 806
Registriert: Sa 5. Feb 2011, 19:07

Re: Verknüpfte Bilder mit externen Programm anzeigen

Beitrag von gogo » Fr 12. Okt 2018, 09:36

Die Shell-Funktion hat einen obligaten und 3 optionale Argumente:

Code: Alles auswählen

Shell (Pathname As String[, Windowstyle As Integer][, Param As String][, bSync])
bei: Shell(stFeld,,0) ist der 3. Parameter ein Integer=0, der 3. Parameter muss aber als "[, Param As String]" übergeben werden. daher vermutlich der Fehler.

Code: Alles auswählen

Shell(stFeld)
oder 
Shell(stFeld, , , 0)
sollte funktionieren! Es gibt natürlich Shell/Programm-Kombinationen, die diese "0" ignorieren (oder besser gesagt: Du bekommst keinen Fehler, weil dieser nur in der Shell angezeigt wird, oder das externe Programm einen Parameter "0" ignoriert oder oder oder)

Verkürzt sollte dieser Code ausreichen:

Code: Alles auswählen

SUB ZOOM1
	oDoc=thisComponent
	stCurrPath = split(oDoc.Parent.Url, oDoc.Parent.Title)(0)
	stFile = oDoc.Drawpage.Forms.getByName("MainForm").getByName("Grafisches Steuerelement 1").BoundField.getString()
	stFile = convertfromurl(stCurrPath + stFile)
	stShellCmd = stCurrPath + "bildvermessen.exe " + stFile
	Shell(stShellCmd)
END SUB
Um zu testen ob die Datei existiert kann man z.B. FileExists() verwenden:

Code: Alles auswählen

SUB ZOOM1
	oDoc=thisComponent
	stCurrPath = split(oDoc.Parent.Url, oDoc.Parent.Title)(0)
	stFile = oDoc.Drawpage.Forms.getByName("MainForm").getByName("Grafisches Steuerelement 1").BoundField.getString()
	stFile = convertfromurl(stCurrPath + stFile)
	if FileExists(stFile) then
		stShellCmd = stCurrPath + "bildvermessen.exe " + stFile
		Shell(stShellCmd)
    else
		Msgbox(stCurrPath + stFile & " gibt's nicht!")
	end if
END SUB
Das größte Problem bei der Shell()-Funktion ist eigentlich die korrekte Übergabe der Parameter für das externe Programm. Verantwortlich dafür ist weniger das Programm das man aufruft, sondern die Art und Weise wie die jeweilige Systemshell mit Calls (vor allem mit Leerzeichen umgeht, Stichwort: "automatische Shellextension"). Bein manchen Programmen müssen die Parameter an Position 3 ([, Param As String]) übergeben werden, bei anderen wiederum funktioniert "Pathname As String" mit den Parametern dazu (so wie Du das in Deiner Lösung machst). Hier immer Achtung auf Leerzeichen in Pfad/Dateiname!!! Ggf. muss man Parameter in Singlequotes, Doublequotes oder auch mit Escapesequenzen übergeben. Hier hilft einfach nur probieren probieren probieren.
In ganz hartnäckigen Fällen hilft es das Programm in ein Script zu verpacken und dieses dann aufzufrufen, bei noch hartnäckigerer Weigerung muss man mit Shell() die gewünschte Systemshell aufrufen und innerhalb dieser dann erst das eigentliche Programm ...

Das UnoService "com.sun.star.system.SystemShellExecute" braucht man nicht extra aufzurufen, es muss sowieso laufen. Vor allem bringt es nichts eines zu kreieren und es dann nicht zu verwenden (Das müsste dann mit oShell.execute() gemacht werden!)
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff



Antworten

Wer ist online?

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