Button zur Laufzeit 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: Button zur Laufzeit erstellen

Re: Button zur Laufzeit erstellen

von Tictac » Mo, 15.08.2011 11:23

Hallo Komma4,

Da ist ja mein Problem. Ich versuch das schon das Wochenende mit xRay und Andrew Pitoniak.
Anbei mal mein Beispielcode:

Code: Alles auswählen

Sub Button
	Dim btnControl as Object
	Dim btnShape as Object
	Dim oEvents(0) As New com.sun.star.script.ScriptEventDescriptor
	
	'buttonContolsAnlegen
	btnControl = CreateUnoService("com.sun.star.form.component.CommandButton")
	btnControl.Label = "Test"
	btnControl.Name = "Test"
	
	'EventListenerErstellen
	oEvents(0).ListenerType = "XActionListener"
  	oEvents(0).EventMethod  = "actionPerformed"
  	oEvents(0).AddListenerParam = ""
  	oEvents(0).ScriptType = "StarBasic"
  	oEvents(0).ScriptCode = "document:Standard.ButtonNeu.btnTestMethode"
  	
  	'EventListenerHinzufügen
	btnControl.addEventListener(oEvents(0))
	
	'Button auf Shape legen und ausgeben	
	btnShape = ThisComponent.CreateInstance("com.sun.star.drawing.ControlShape")
	btnShape.Size = createSize(2200,800)'Größe Kontrollfeld 2,2x0,8 cm
	btnShape.Position = createPoint(1500, 3000) 'Position  Kontrollfeld bei x=1,5 cm, y=3cm
	btnShape.control = btnControl
	ThisComponent.Sheets(0).DrawPage.Add(btnShape)	
End Sub
Allerdings bekomme ich beim EventlistenerHinzufügen einen Fehler (Illegal Argument: cannot coerce argument type during corereflection call!)
Ich habe keine Ahnung was ich da falsch mache und damit ist alles andere auch nicht hilfreich.

Re: Button zur Laufzeit erstellen

von komma4 » Mo, 15.08.2011 10:13

Tictac hat geschrieben:Ich schätze das läuft mittels eines Eventlisteners, aber ich habe weder eine Ahnung, wie der Aussehen muss, noch bin ich bisher fündig geworden.
Die Onlinehilfe F1 beschreibt ziemlich gut die Erzeugung von Listener.

Kombinierst Du dieses Wissen mit Code, bspw. aus Andrews Makro-Dokument

Code: Alles auswählen

sListenerName = "com.sun.star.lang.XEventListener"
oListener = CreateUnoListener("prefix_", sListenerName)
MsgBox oListener.Dbg_supportedInterfaces
MsgBox oListener.Dbg_methods
oder einem Objekt-Inspektor, wie XRAY, dann kommst Du schnell zum Ziel.

Re: Button zur Laufzeit erstellen

von Tictac » Mo, 15.08.2011 09:45

Der Teil funktioniert nun ganz gut.
Allerdings habe ich jetzt ein anderes Problem. Wie verlinke ich eine Methode auf den Button.
Ich schätze das läuft mittels eines Eventlisteners, aber ich habe weder eine Ahnung, wie der Aussehen muss, noch bin ich bisher fündig geworden.

Es geht also darum dem so erstellten Button zu sagen, er solle die sub "Test" ausführen.

Vielen Dank schonmal vorab

Re: Button zur Laufzeit erstellen

von F3K Total » Fr, 12.08.2011 09:55

Hallo,
du mußt dem Button noch seine Positions- und Größeninformationen geben: http://www.pitonyak.org/AndrewMacro.odt

Beispiel für eine graphische Schaltfläche

Code: Alles auswählen

Dim lAnchor As Long
lAnchor = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH

osheet=thisComponent.sheets(0)'Tabelle1
odrawpage=osheet.drawpage

s$ = "com.sun.star.form.component.ImageButton"
oControl = oDoc.CreateInstance(s$)
oControl.BackgroundColor = 14540253
oControl.Border = 1
oControl.BorderColor  = 12632256 
oControl.ImageURL = URL_Bild
oControl.ScaleImage = true  
oControl.ScaleMode = 1  
oControl.Name = "ImageButton1"

oShape = oDoc.CreateInstance("com.sun.star.drawing.ControlShape")
oShape.Size = createSize(2200,800)'Größe Kontrollfeld 2,2x0,8 cm
oShape.Position = createPoint(1500, 3000) 'Position  Kontrollfeld bei x=1,5 cm, y=3cm
oShape.AnchorType = lAnchor
oShape.control = oControl
oDrawpage.Add(oShape)
wobei createSize() und createPoint() wiederum functions von Andrew Piontyak sind:

Code: Alles auswählen

Function CreatePoint(xPos, YPos) as New com.sun.star.awt.Point
Dim oPoint as New com.sun.star.awt.Point
oPoint.X = xPos
oPoint.Y = yPos
CreatePoint() = oPoint
End Function

Function CreateSize(iWidth, iHeight) As New com.sun.star.awt.Size

Dim oSize As New com.sun.star.awt.Size
oSize.Width = iWidth
oSize.Height = iHeight
CreateSize() = oSize
End Function
Gruß R

Button zur Laufzeit erstellen

von Tictac » Fr, 12.08.2011 09:23

Hallo Zusammen,

Ich möchte gerne in einem Spreadsheet einen Button zur Laufzeit erstellen.
Soweit bin ich dabei bisher gekommen.

Code: Alles auswählen

oButton = CreateUnoService("com.sun.star.form.component.CommandButton")
	oButton.Label = "Test123"
	ThisComponent.Sheets(0).DrawPage.Forms.getByIndex(0).InsertByName("Neu", oButton)
Nur kann ich meinen Button zwar jetzt mit "getByName" finden, aber er wird im Sheet nicht angezeigt. Ich schätze ich übersehe da irgendwas bezüglich Model/View. Kann mir jemand helfen?

Nach oben