Gelöst: Schaltfläche mit Grafik unabghängig vom OS ?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Gelöst: Schaltfläche mit Grafik unabghängig vom OS ?

Re: Schaltfläche mit Grafik unabghängig vom OS ?

von WSO » Do, 14.08.2014 14:33

Hab ich schon,
nur die Anwendung ist nicht mehr abwärts-Kompatibel, unterliegt noch häufigen Änderungen und muss parellel auf Win und Linux mit LO 4.2 laufen und die Terminsituation lässt ein Warten auf den bug fix nicht zu.
Wie auch immer, Thema ist ja mit dem workaround gelöst.

Re: Schaltfläche mit Grafik unabghängig vom OS ?

von F3K Total » Do, 14.08.2014 11:08

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
embed.png (47.5 KiB) 6354 mal betrachtet
Gruß R

Re: Schaltfläche mit Grafik unabghängig vom OS ?

von WSO » Do, 14.08.2014 10:03

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 ?

von balu » Mi, 13.08.2014 14:03

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
Dateianhänge
Button mit Icon-0.4.ods
(12.13 KiB) 147-mal heruntergeladen

Re: Schaltfläche mit Grafik unabghängig vom OS ?

von WSO » Mi, 13.08.2014 13:10

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:

Code: Alles auswählen

oForm.store


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 ?

von F3K Total » Mi, 13.08.2014 09:56

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 ...
Dateianhänge
Bilder_eingebettet .odb
(105.67 KiB) 145-mal heruntergeladen

Re: Schaltfläche mit Grafik unabghängig vom OS ?

von Rasakul » Mi, 13.08.2014 09:24

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 ?

von F3K Total » Mi, 13.08.2014 09:21

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 ?

von Rasakul » Mi, 13.08.2014 08:49

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 ?

von F3K Total » Di, 12.08.2014 23:56

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.
Dateianhänge
Bilder_eingebettet.odb
(41.38 KiB) 142-mal heruntergeladen

Re: Schaltfläche mit Grafik unabghängig vom OS ?

von WSO » Di, 12.08.2014 14:52

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 Betriebssystem ?

von WSO » Mo, 04.08.2014 15:55

Super,
ist zwar erst mal ne Menge Aufwand, aber ja nur einmalig. :D
Gruss,
WSO

Re: Schaltfläche mit Grafik unabghängig vom Betriebssystem ?

von Rasakul » Mo, 04.08.2014 15:40

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

Code: Alles auswählen

oButton.ImageURL = "GrafikURL"
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 ?

von WSO » Mo, 04.08.2014 12:12

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 ?

von Rasakul » Mo, 04.08.2014 08:30

Hallo!

mir würde nur einfallen, die Zuweisungen über ein Makro zu erledigen und hier dann den Pfad mit der (undokumentierten) Methode

Code: Alles auswählen

GetPathSeparator()
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

Nach oben