Kontrollfelder im Formular per Makro erstellen

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: Kontrollfelder im Formular per Makro erstellen

Re: Kontrollfelder im Formular per Makro erstellen

von F3K Total » So, 07.10.2012 18:24

Hi,
ich habe jetzt deinen Code nicht genau unter die Lupe genommen.
Meiner war ein Shnipsel, allerdings ist der Unterschied, das hier das Formular im Design-Mode geöffnet wird, und der Button nach dem Speichern dauerhaft erhalten bleibt.
Ich schätze, mit deinem Code wird der Button temporär erzeugt, auch wenn Du speichern drückst.

Gruß R

Re: Kontrollfelder im Formular per Makro erstellen

von Luke78 » Mi, 03.10.2012 00:46

Hallo zusammen!

Nach langem Rumprobieren hab ich es jetzt hinbekommen.
"F3K Total" danke für den Code, der ist nur leider recht fehlerhaft und nicht unviversell einsetzbar.
( funktioniert nur wenn das Formular nicht geöffnet ist weil ThisComponent jeweils anders. oDoc wird zunächst mit dem Typ com.sun.star.comp.dba.ODocumentDefinition und dann durch loadComponentFromURL mit dem Typ SwXTextDocument belegt, nur mit dem letzten Typ funktioniert der Rest)

Nunja irgendwie hat es mich ans Ziel gebracht und das sieht so aus (den EventListener hab ich erstmal weggelassen, da fand ich die Lösung hier schlanker, muss ich aber noch testen http://user.services.openoffice.org/en/ ... 45&t=27424):

Code: Alles auswählen

Option Explicit

Sub createButton
	Dim oParms(0) 	As New com.sun.star.beans.PropertyValue
	Dim aPoint 		As New com.sun.star.awt.Point
	Dim aSize 		As New com.sun.star.awt.Size
	Dim sLabel		As String

	Dim oBaseDoc	As Object
	Dim oDoc		As Object
	Dim oForm		As Object
	Dim oPage		As Object
	Dim oButton		As Object
	
	oBaseDoc	= ThisComponent
	
	'Loop until found DatabaseDocument	
	Do Until( oBaseDoc.ImplementationName = "com.sun.star.comp.dba.ODatabaseDocument")
		oBaseDoc = oBaseDoc.Parent
	Loop

	'get FormDocumentHandler
	oDoc 	= oBaseDoc.getFormDocuments.getByName("Formular1")
	'get Form
	oForm	= oDoc.Component
	
	'load Form if not available
	If isnull (oForm) Then
		oForm = oBaseDoc.FormDocuments.loadComponentFromURL(oDoc.name, "", 0, oParms())
	EndIf
	
	'set Button Properties
	sLabel="Testknopf"
	aPoint.x = 2000
	aPoint.y = 1000
	aSize.Width = 4000
	aSize.Height = 1200
	
	'create Shape and Control Handler
	oButton 		= oForm.createInstance("com.sun.star.drawing.ControlShape")
	oButton.control	= oForm.createInstance( "com.sun.star.form.component.CommandButton" )
	
	'apply Button Properties     
	obutton.Size					= aSize
	obutton.Position				= aPoint
	obutton.Control.Label			= sLabel
	obutton.Control.name			= "cmd_Testknopf"
	obutton.AnchorType				= 0

	'add Button to View
	oForm.DrawPage.add(oButton)
End Sub

Re: Kontrollfelder im Formular per Makro erstellen

von Stephan » Sa, 29.09.2012 22:00

Gibt es irgendwo eine wirklich umfassende Doku zu den Basic Objekten,Klasen
Eine vollständige Dokumentation zur Sprache StarBasic findet sich in der OOo-Hilfe (mit Beispielen), eine vollständige Übersicht zur OOo-Api hingegen in der sog. IDL-Referenz http://www.openoffice.org/api/docs/comm ... le-ix.html (ohne Beispiele)


Gruß
Stephan

Re: Kontrollfelder im Formular per Makro erstellen

von juetho » Sa, 29.09.2012 13:46

Ergänzende Informationen zur Dokumentation: Eine "wirklich umfassende Doku" ist mir noch nicht untergekommen, sondern nur Links, über die Teilinformationen zu erhalten sind - ausgehend vor allem bei OpenOffice.org und The Document Foundation.

Hast du die Datenbank ausreichend normalisiert? Das hilft zwar nicht bei der Arbeit mit den Formularfeldern, ist aber Voraussetzung für ein sauberes Arbeiten mit den Daten. Jürgen

Re: Kontrollfelder im Formular per Makro erstellen

von F3K Total » Do, 27.09.2012 23:31

Hallo,
klar, geht, hier ein Beispiel für einen Button mit eingebautem Makro:
Kopiere den Code in Bibliothek "Standard", Modul "Module1".
Erzeuge ein leeres "Formular1"
Nur speichern musst Du noch.

Code: Alles auswählen

sub openform_in_designmode_and_add_button
   
    Dim oParms(1) As New com.sun.star.beans.PropertyValue
    Dim aPoint As New com.sun.star.awt.Point
    Dim aSize As New com.sun.star.awt.Size
    
    oDoc = ThisComponent.getformdocuments.getbyname("Formular1")
    if not isnull (oDoc.getComponent) then
    odoc.opendesign
    else
    oDocname=oDoc.name
      oParms(0).name="OpenMode"
      oParms(0).value="openDesign"
      oParms(1).name="ActiveConnection"
      oParms(1).value=Verbindung
      oFormDocs = ThisComponent.FormDocuments
      odoc = oFormDocs.loadComponentFromURL(oDocname, "", 0, oParms())
    endif
    
    oPage = odoc.drawpage
    
    s_label="Testknopf"
    aPoint.x = 2000
    aPoint.y = 1000
    aSize.Width = 4000
    aSize.Height = 1200
    
    obutton = odoc.createInstance("com.sun.star.drawing.ControlShape")
    oControlModel = odoc.createInstance( "com.sun.star.form.component.CommandButton" )
    obutton.control = oControlModel
         
    obutton.Size = aSize
    obutton.Position = aPoint
    obutton.Control.Label = s_label
    obutton.Control.FocusOnClick=false
    obutton.Control.name="cmd_Testknopf"
    obutton.Control.Align=1
    obutton.Control.VerticalAlign=1
    obutton.AnchorType=0 'Paragraph
    oPage.add(obutton)
    oForm = obutton.control.parent
         
    nIndex = oForm.Count-1 'Der Button wurde soeben eingefügt, deshalb ist es sehr wahrscheinlich, dass er das letzte Element der Controls-Liste der Form ist.
         
    Dim oEvent as new com.sun.star.script.ScriptEventDescriptor
    oEvent.ListenerType = "com.sun.star.awt.XActionListener"
    oEvent.EventMethod = "actionPerformed"
    oEvent.ScriptType = "Script"
    oEvent.ScriptCode = "vnd.sun.star.script:Standard.Module1.Knopfgedrueckt?language=Basic&location=document"
    oForm.registerScriptEvent(nIndex, oEvent)
    odoc.currentcontroller.setformdesignmode(false)

end sub

Sub Knopfgedrueckt
   msgbox "Knopf wurde gedrückt"
end sub

Nach oben