Seite 1 von 2
Gelöst: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: So, 03.08.2014 11:09
von WSO
Guten Morgen,
ich habe viele Schalflächen abstelle von Text mit einer Grafk versehen.
Bei der Portierung von Windows auf Linux habe ich leider erst jetzt gemerkt, dass die Grafiken den Schlatflächen nur per link zugewiesen werden. Da der Windows-Pfad für die Grafiken unter Linux nicht existiert, sind somit alle buttons "nackt".
Hat jemand eine Idee, wie ich das verhindern kann?
Gruss,
WSO
Re: Schaltfläche mit Grafik unabghängig vom Betriebssystem ?
Verfasst: Mo, 04.08.2014 08:30
von Rasakul
Hallo!
mir würde nur einfallen, die Zuweisungen über ein Makro zu erledigen und hier dann den Pfad mit der (undokumentierten) Methode
zusammenzustöpseln - die Methode liefert dir dann den systemspezifischen Pfadtrenner (also unter Windows "\" oder unter Linux "/")
vielleicht hilft dir hierzu folgendes noch:
viewtopic.php?f=18&t=64155
LG
Rasakul
Re: Schaltfläche mit Grafik unabghängig vom Betriebssystem ?
Verfasst: Mo, 04.08.2014 12:12
von WSO
Hi Rasakul,
ja gut...
Kannst du mir bitte noch einen Hinweis geben, wie ich die Pfadangabe in die Feldeigenschaften bekomme.
Braucht wohl ein Makro, dass beim öffnen des Formulars aufgefufen wird. Habe aber keine Idee, wie ich dann die Pfadangabe manipuliere.
Gruss,
Wolfram
Re: Schaltfläche mit Grafik unabghängig vom Betriebssystem ?
Verfasst: Mo, 04.08.2014 15:40
von Rasakul
Hi!
so kommst du an den Button selber ran:
Code: Alles auswählen
oDoc = ThisComponent
oForm = oDoc.Drawpage.Forms.getByName("formularname")
oButton = oForm .getByName("buttonname")
wenn nun in den Eigenschaften des Buttons die Grafik gesetzt werden soll, machst du das über
LG
Raskakul
PS: Schau dir mal das Tool
XRay an - damit kannst du ganz leicht herausfinden, welche Methoden/Eigenschaften ein Basic-Element zur Verfügung stellt (Verwendungsanleitung findest du dann in der Downloaddatei)
Re: Schaltfläche mit Grafik unabghängig vom Betriebssystem ?
Verfasst: Mo, 04.08.2014 15:55
von WSO
Super,
ist zwar erst mal ne Menge Aufwand, aber ja nur einmalig.
Gruss,
WSO
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Di, 12.08.2014 14:52
von WSO
Bin leider immer noch mit diersem Thema im Gange.
Die temporäre Änderung der Feldeigenschaften im Formular funktioniert per Formularergeignis.
Zur Verbesserung der Performance möchte ich aber diese Änderungen gerne dauerhaft in meinen Formularen speichern.
Ich habe es damit versucht:
Code: Alles auswählen
Sub upd_Formulare (oEvent AS OBJECT)
GlobalScope.BasicLibraries.LoadLibrary("Tools")
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
oDatasource = thisComponent.Parent.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
DIM oSql AS OBJECT
DIM oSql1 AS OBJECT
DIM oDoc as Object
DIM oDrawpage as Object
DIM oForm as Object
DIM oFeld as Object
DIM oFormDocs AS OBJECT
DIM stSql AS STRING
DIM stSql1 AS STRING
DIM oResultSet AS OBJECT
DIM oResultSet1 AS OBJECT
DIM stForm AS STRING
DIM stIcon AS STRING
DIM stDateiname AS STRING
Rem Update über alle Formulare
oSql = oConnection.createStatement()
oSql1 = oConnection.createStatement()
stSql = "SELECT `form` FROM `tform`"
oResultSet = oSql.executeQuery(stSql)
If oResultSet.Next Then
Do
stForm = oResultset.getString(1)
oFormDocs = ThisDatabaseDocument.FormDocuments.getByName(stForm).open
stSql1 = "SELECT `i_icon`, `i_datei`, `i_form` FROM `ticon` WHERE `i_form`='" & stForm &"'"
oResultSet1 = oSql1.executeQuery(stSql1)
If oResultSet1.Next Then
Do
stIcon = oResultSet1.getString(1)
stDateiname = oResultSet1.getString(2)
stDateiname = convertToUrl(stDateiname)
oForm = oFormDocs.Drawpage.Forms.getByName(stForm)
oFeld = oForm.getByName(stIcon)
oFeld.ImageURL = stDateiname
oForm.reload
Loop While oResultSet1.Next
Else
'Keine Datensätze
End If
Loop While oResultSet.Next
Else
'Keine Datensätze
End If
End Sub
Das funktioniert aber nur, wenn ich alle Formulare zuvor im Bearbeitungsmodus öffne und dann manuell speichere.
Lieber würde ich das auch von dem Makro erledigen lassen.
Habe mit Xray aber nichts gefunden was dazu passt.
Kennt jemand eine elegantere Methode?
Gruss,
WSO
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Di, 12.08.2014 23:56
von F3K Total
WSO hat geschrieben:Bei der Portierung von Windows auf Linux habe ich leider erst jetzt gemerkt, dass die Grafiken den Schlatflächen nur per link zugewiesen werden.
Wie kommst Du darauf?
Unter W7, AOO 4.1.0 und Linux Mint, AOO 4.1.0 ist das nicht so, siehe Beispiel anbei.
Gruß R
EDIT: OK, mit LO geht es nicht. Kann ja nur ein Bug sein. Komisch, die unter AOO eingebetteten Bilder zeigt LO 4.2.6 wunderbar an.
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Mi, 13.08.2014 08:49
von Rasakul
Hi WSO
sorry, hab grad nicht viel Zeit, mir kommt aber dein Ansatz mit SQL etwas umständlich vor...
Probier mal, ob du mit einer Schleife über alle Formulare das gleiche erreichst
Code: Alles auswählen
For i=0 To CountFormulare
oForm = ThisDatabaseDocument.FormDocuments.getByIndex(i)
next i
Außerdem könntest du noch probieren über den Layout-Manager in den Entwurfsmodus zu wechseln, deine Veränderungen auszuführen und dann das Formular zu speichern.
Das könnte dann in etwas so ausschauen:
Code: Alles auswählen
For i=0 To CountFormulare - 1
oForm = ThisDatabaseDocument.FormDocuments.getByIndex(i)
oForm.open 'notwendig, da sonst kein LayoutManager vorhanden
'LayoutManager
oController = oForm.getComponent().getCurrentController()
lmgr = oController.Frame.LayoutManager
'Mit LayoutManager in den Entwurfsmodus wechseln
'TODO
'Do Your Staff here
'Formular speichern
oForm.store
oForm.close
next i
Leider weiß ich grad nicht, wie man konkret in den Entwurfsmodus wechselt, da müsste ich noch suchen - vielleicht findest du es ja vor mir (würd mich dann auch interessieren

)
API XLayoutManager hilft dabei vielleicht
Bin mir auch nicht sicher, obs auch wirklich so funktioniert - glaubs aber schon
Freitag hab ich wieder mehr Zeit, da kann ich dann nochmal suchen, wenns noch nicht gelöst ist
LG
Rasakul
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Mi, 13.08.2014 09:21
von F3K Total
Nur zur Info:
Es handelt sich bei dem Verhalten, Bilder nicht einbetten zu können, um diesen gemeldeten
Bug von LO.
F3K Total hat geschrieben:EDIT: OK, mit LO geht es nicht. Kann ja nur ein Bug sein. Komisch, die unter AOO eingebetteten Bilder zeigt LO 4.2.6 wunderbar an.
Dazu folgende Info: Wenn die Bilder einmal in AOO eingebettet wurden, kann man mit LO wunderbar arbeiten, es sein denn, man ändert mit LO etwas im Formular und drückt speichern, dann sind die Grafiken wieder weg.
Gruß R
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Mi, 13.08.2014 09:24
von Rasakul
F3K Total hat geschrieben:Es handelt sich bei dem Verhalten, Bilder nicht einbetten zu können, um diesen gemeldeten
Bug von LO.
Somit wäre wohl meine Methode wohl auch hinfällig

Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Mi, 13.08.2014 09:56
von F3K Total
Hi,
wenn es dir nichts ausmacht, statt der Schaltfläche, ein grafisches Kontrollelement zu verwenden (Nachteil, ein macht keine Klickbewegung), dann kannst du die Bilder auch in eine Tabelle der Datenbank speichern, siehe Formular_mit_Bild_aus_Datenbank in angehängten Beispiel.
HTH R
EDIT: ... oder halt zu AOO wechseln ...
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Mi, 13.08.2014 13:10
von WSO
Hallo Zusammen und danke für die Antworten.
Zu:
mir kommt aber dein Ansatz mit SQL etwas umständlich vor...
Probier mal, ob du mit einer Schleife über alle Formulare das gleiche erreichst
Das ist mein Lösundweg für das Problem, dass die Icons nicht auf jedem Formular einheitlich vorhanden sind.
Ich muss als irgendwie herausbekommen, welche icons auf welches Formular gehören, sonst läuft .getByName auf einen Fehler ...
Der Ansatz den Layoutmanager für das Formular zu öffnen wäre der Königsweg, aber leider:
Code: Alles auswählen
'LayoutManager
oController = oForm.getComponent().getCurrentController()
funtioniert nicht: getComponent ist keine vorgesehene Methode.
Gleiches bei:
Ein Äquivalent habe ich im Xray nicht gefunden.
Selbst wenn der bug
https://bugs.freedesktop.org/show_bug.cgi?id=65163
behoben werden sollte, ist das Problem der Protierbarkeit damit ja nicht gelöst.
Ich werde als Notlösung wohl ertsmal meine Icon-Referenzen manuell erfassen, den Link auf die icons relativ zur dblocation anlegen
und bei jeder Portierung mein makro drüberlaufen.
Gruss,
WSO
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Mi, 13.08.2014 14:03
von balu
Hallo WSO,
was hälst Du denn davon wenn Du die Grafik mit in die Datei packst? Also nicht auf jedem Betriebssystem nach der Grafik suchen, sondern aus der Datei die Grafik direkt aufrufen.
Ich weiß das sich das wohl gut anhört, hat aber auch so seine Hürden. Ich habe selber mal Dateien erstellt in denen die Grafiken (kleine Icons für bestimmte Schaltflächen) direkt in der Datei drin sind. Das kann man ünabhängig vom "Office-Modul" machen, also egal ob für Writer, Calc oder so.
Es soll wohl dafür ein Tool irgendwo im englisch sprachigen Forum geben, jedoch ist dieses Forum nur extrem schwer zu erreichen. Aber man kann dies auch von Hand machen, was leider etwas tricky ist. Unser Moderator Stephan hat das in seinem Buch "Tabellenkalkulation mit OpenOffice.org 3 Calc" beschrieben. Aber auch hier im Forum hatte er mal was kurz dazu gesagt, siehe:
Dateianhang in odt Datei.
Nein, ich habe das Buch nicht. Aber ich hatte das nachbauen können, mittels einer leider nicht mehr zur Verfügung stehenden Online-Leseprobe bei
https://www.galileo-press.de/.
In dem eben verlinkten Thread hatte Stephan eine Beispieldatei angehängt, die nicht nur eine Grafik enthällt, sondern auche eine PDF-Datei. Da es dir hier aber nur um Grafik geht, habe ich mal eine simple Testdatei erstellt. Wenn dir das zusagt, dann melde dich noch mal und ich sage mehr und genaueres dazu.
Gruß
balu
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Do, 14.08.2014 10:03
von WSO
Hi balu, rasakul
danke für den input.
für mein Problem mit den Icons brauchte ich eine schnelle Lösung und habe mit viel Handarbeit meinen ürsprünglichen Lösunsansatz umgesetzt.
Code: Alles auswählen
Sub upd_Formulare (oEvent AS OBJECT)
GlobalScope.BasicLibraries.LoadLibrary("Tools")
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
oDatasource = thisComponent.Parent.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
DIM oSql AS OBJECT
DIM oSql1 AS OBJECT
DIM oDoc as Object
DIM oDrawpage as Object
DIM oForm as Object
DIM oFeld as Object
DIM oFormDocs AS OBJECT
DIM stSql AS STRING
DIM stSql1 AS STRING
DIM oResultSet AS OBJECT
DIM oResultSet1 AS OBJECT
DIM stForm AS STRING
DIM stIcon AS STRING
DIM stIconFeld AS STRING
DIM stDateiname AS STRING
DIM stDateiURL As STRING
Rem Update über alle Formulare
oSql = oConnection.createStatement()
stSql = "SELECT `par_icon` FROM `tparameter`"
oResultSet = oSql.executeQuery(stSql)
If oResultSet.Next Then
Do
stIcon = oResultset.getString(1)
Loop While oResultSet.Next
Else
Msgbox "Parameter nicht gefunden"
exit sub
End If
oSql1 = oConnection.createStatement()
stSql = "SELECT `frm_formular` FROM `tformular`"
oResultSet = oSql.executeQuery(stSql)
If oResultSet.Next Then
Do
stForm = oResultset.getString(1)
Msgbox "Aktuelles Formular: " & stForm
oFormDocs = ThisDatabaseDocument.FormDocuments.getByName(stForm).open
stSql1 = "SELECT `ico_icon`, `tab_txt`, `ico_formular` FROM abfIcon WHERE `ico_formular`='" & stForm &"'"
oResultSet1 = oSql1.executeQuery(stSql1)
If oResultSet1.Next Then
Do
stIconFeld = oResultSet1.getString(1)
stDateiname = oResultSet1.getString(2)
stDateiURL = glbDatenbanklocation & stIcon & stDateiname
stDateiURL = convertToUrl(stDateiURL)
oForm = oFormDocs.Drawpage.Forms.getByName(stForm)
oFeld = oForm.getByName(stIconFeld)
oFeld.ImageURL = stDateiURL
Loop While oResultSet1.Next
Else
'Keine Datensätze
End If
oForm.reload
Loop While oResultSet.Next
Else
'Keine Datensätze
End If
End Sub
Ist zwar nicht schön, aber geht erst mal.
Dateien (als Objekt) in dier Datenbank per Basic zu übernehmen, würde ich sehr gerne.
Sollte dann aber auch mit Postgres und MySql gehen.
Alle Infos die ich bislang dazu bekam waren: "geht nicht".
Bin mir nicht sicher, ob der Vorschlag von balu das revidiert, wäre aber toll.
Hatte mich damit abgefunden und alternativ nur Links und "Dateiauswahl" in der Anwendung verwendet.
Wenn es dafür doch eine bessere Variante gibt, würde ich die sehr gerne verfolgen.
Gruss,
WSO
Re: Schaltfläche mit Grafik unabghängig vom OS ?
Verfasst: Do, 14.08.2014 11:08
von F3K Total
Mal ehrlich,
hast du meine Hinweise gelesen, dass das
- Einbetten der Bilder normalerweise funktioniert?
- Das es sich nur um einen Bug von LO handelt, der sicherlich in einer der kommenden Versionen behoben sein wird?
- Das du die Bilder mit ApacheOpenOffice oder einer älteren LibreOffice Version, z.B. LO-Portable 3.5.5.3, normal einbetten kannst (siehe Bild), und, mit der aktuellen Version von LibreOffice, solange du das Formular nicht im Entwurfsmodus änderst und abspeicherst, benutzen kannst?
- Wenn du ApacheOpenOffice verwendest hast du gar kein Problem.
Ich verstehe die ganze Aktion nicht, das Setup einer portable Version dauert etwa 5 Minuten und wir hühnern hier schon seit 11 Tagen herum.

- embed.png (47.5 KiB) 6358 mal betrachtet
Gruß R