You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@openoffice.apache.org by technik <te...@jrsch.de> on 2015/10/15 17:09:16 UTC

Schaltfläche per Makro erzeugen

Hallo,

ich habe ein Calc Dokument und eine darin eine Tabelle
Apfel
Birne
Banana
...

Jetzt möchte ich gerne mit einem Makro in die Tabelle(!) Schaltflächen 
hinzufügen (und formatieren)
Dabei soll in einer parallelen Tabelle die Schaltflächen mit den Namen 
angezeigt werden und bei Klicken einen Wert in eine bestimmte Zelle 
eintragen.
und zwar sollen so viele Schaltflächen wie Einträge in der Liste sein. 
Hier also drei. Kommen Melonen noch hinzu müssen es vier sein. Aber das 
dürfte kein Problem sein.  Auf eine bestehende Schaltfläche kann ich 
zugreifen, nur weiß ich nicht wie ich eine neue anlegen kann.

Die Schaltfläche soll mit einem Makro verbunden sein. Ist es möglich dem 
Makro einen Parameter mitzugeben, z.B. den Namen der Schaltfläche?  Wenn 
ja, wie?

Zugreifen kann ich hiermit. (Irgendwo geklaut)
...
bgc=&Hc9c9c8
feld="Schaltfläche 1"
odoc=thisComponent
   oSheet= oDoc.Sheets().getByName("KT auszug")
   odraw1=oSheet.drawpage
   form1=odraw1.forms.getbyIndex(0)
   oContr=form1.getbyname(sfeld)
   ocontr.backgroundcolor=bgc
...


Horst

---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


Re: Schaltfläche per Makro erzeugen

Posted by Jörg Schmidt <jo...@j-m-schmidt.de>.
Hallo, 

> From: technik [mailto:technik_div@jrsch.de] 

> aber die Frage war, wie das mit einem Makro 
> realisiert wird

und genau dazu gibt der von mir gepostete Link Auskunft, siehe also:
https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=66707

> Also

> meinMakro ("NurEinBeispiel")

> kann ich nicht aufrufen, nur meinMakro().

ich habe leider nicht die geringste Ahnung warum, denn zum Aufruf mit Parameter ist eigentlich nicht mehr zu sagen als ich schon schrieb.
Vielleicht muss ich das nochmal genauer so formulieren:

um ein Makro mit Parameter aufzurufen braucht es ein entsprechendes Makro:

Sub meinMakro (meinParameter As String)
	'...
End Sub 

und zum eigentlichen Aufruf dieses Makros ein (Hilfs-)Makro das den Aufruf bewerkstelligt, also:

Sub mein_aufrufmakro()
	meinMakro ("einParameter")
End Sub 

dieses letzte Makro (Sub mein_aufrufmakro()) ist dann der Schaltfläche zuzuordnen.


> Allerdings kann mich mich mit dem Parameter tag behelfen

das ist kein Behelf sondern ein anderer Weg _für einen anderen Zweck_ und das das Deine Absicht war war aus Deiner ursprünglichen Email für mich nicht zu entnehmen.


Gruß
Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


Re: Schaltfläche per Makro erzeugen

Posted by technik <te...@jrsch.de>.
Hallo Jörg,

danke für die Antwort, aber die Frage war, wie das mit einem Makro 
realisiert wird, Also per Makro Schaltflächen einfügen und mit einem 
Makro verbinden.
Dazu habe ich inzwischen schon zwei Anleitungen gefunden und auch 
inzwischen eine soweit ans Laufen bekommen, dass ich den Knopf erzeugen 
und auch ein Makro zuordnen kann.
Momentan hakt es noch an dem Punkt, dass ich dem Makro keinen Parameter 
mitgeben kann. Also

meinMakro ("NurEinBeispiel")

kann ich nicht aufrufen, nur meinMakro().
Allerdings kann mich mich mit dem Parameter tag behelfen, den ich 
zuordnen und über einen Umweg auch auslesen kann. Das reicht für meine 
Anwendung, ist aber nicht genau das, was ich wollte.

Horst
Für alle die es interessiert, hier der Code dazu:

REM  *****  BASIC  *****
REM BEispiel um einen Button einzubauen in ein Calc-sheet
REM Der Code ist kopiert und umgeschrieben. So ganz verstehe ich das nicht.
*_REM Eigentlich sollte das Makro direkt mit einem Parameter aufgerufen 
werden, doch das geht nicht_**_
_**_REM AddListenerParam scheint nicht zu funktionieren_*
Sub Main

       sname="knopf5"
       stag="Haooloho"
CreateButton (sname, stag)
End Sub

sub hallo(Event)
xray Event
stext=S_read_tag(Event)
msgbox stext
end sub

     Sub CreateButton (sname, stag as string)
       oDoc = ThisComponent
       oSheet = oDoc.Sheets.getByIndex(0)
       oDrawPage = oSheet.DrawPage  'Was oDrawPage = oDoc.getDrawPage()
       sScriptURL = 
"vnd.sun.star.script:Standard.Module1.hallo?language=Basic&location=document"
       oButtonModel = AddNewButton(sname, sname, oDoc, oDrawPage,stag)
       oForm = oDrawPage.getForms().getByIndex(0)
       ' find index inside the form container
       nIndex = GetIndex(oButtonModel, oForm)
       AssignAction(nIndex, sScriptURL, oForm)
'      kontrolfeldfarbe(sname,&Hc889c8,"Moin") 'eigenes makro
   thiscomponent.currentcontroller.setformdesignmode(false)
     End Sub

     ' assign sScriptURL event as css.awt.XActionListener::actionPerformed.
     ' event is assigned to the control described by the nIndex in the 
oForm container
     Sub AssignAction(nIndex As Integer, sScriptURL As String, oForm As 
Object)
       aEvent = 
CreateUnoStruct("com.sun.star.script.ScriptEventDescriptor")
       With aEvent
         .AddListenerParam = "Hallo Welt"
         .EventMethod = "actionPerformed"
         .ListenerType = "XActionListener"
         .ScriptCode = sScriptURL
         .ScriptType = "Script"
       End With
       oForm.registerScriptEvent(nIndex, aEvent)
      End Sub

function S_read_tag(Event)
     oButton = Event.source.model
     Stag = oButton.tag
     S_read_tag=stag
end function


     Function AddNewButton(sName As String, sLabel As String, oDoc As 
Object, oDrawPage As Object, stag as string) As Object
       oControlShape = 
oDoc.createInstance("com.sun.star.drawing.ControlShape")

       aPoint = CreateUnoStruct("com.sun.star.awt.Point")
       aSize = CreateUnoStruct("com.sun.star.awt.Size")
       aPoint.X = 1000
       aPoint.Y = 1000
       aSize.Width = 3000
       aSize.Height = 1000
       oControlShape.setPosition(aPoint)
       oControlShape.setSize(aSize)

       oButtonModel = 
CreateUnoService("com.sun.star.form.component.CommandButton")
       oButtonModel.Name = sName
       oButtonModel.Label = sLabel
       oButtonModel.tag = stag

       oControlShape.setControl(oButtonModel)
       oDrawPage.add(oControlShape)

       AddNewButton = oButtonModel
     End Function


     Function GetIndex(oControl As Object, oForm As Object) As Integer
       Dim nIndex As Integer
       nIndex = -1
       For i = 0 To oForm.getCount() - 1 step 1
         If EqualUnoObjects(oControl, oForm.getByIndex(i)) Then
           nIndex = i
           Exit For
         End If
       Next
       GetIndex = nIndex
     End Function

Am 16.10.2015 um 10:58 schrieb Jörg Schmidt:
>> From: technik [mailto:technik_div@jrsch.de]
>> ich habe ein Calc Dokument und eine darin eine Tabelle
>> Apfel
>> Birne
>> Banana
>> ...
>>
>> Jetzt möchte ich gerne mit einem Makro in die Tabelle(!)
>> Schaltflächen
>> hinzufügen (und formatieren)
>> Dabei soll in einer parallelen Tabelle die Schaltflächen mit
>> den Namen
>> angezeigt werden und bei Klicken einen Wert in eine bestimmte Zelle
>> eintragen.
>> und zwar sollen so viele Schaltflächen wie Einträge in der
>> Liste sein.
>> Hier also drei. Kommen Melonen noch hinzu müssen es vier
>> sein. Aber das
>> dürfte kein Problem sein.  Auf eine bestehende Schaltfläche kann ich
>> zugreifen, nur weiß ich nicht wie ich eine neue anlegen kann.
> Z.B. Siehe:
> https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=66707
>
>> Die Schaltfläche soll mit einem Makro verbunden sein. Ist es
>> möglich dem
>> Makro einen Parameter mitzugeben, z.B. den Namen der
>> Schaltfläche?
> Ja
>
>> Wenn
>> ja, wie?
> Indem man den gewünschten Parameter definiert:
>
> Sub meinMakro (meinParameter As String)
>
> Und das Makro entsprechend aufruft:
>
> meinMakro ("NurEinBeispiel")
>
>
>
>
> Gruß
> Jörg
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
> For additional commands, e-mail: users-de-help@openoffice.apache.org
>


Re: Schaltfläche per Makro erzeugen

Posted by Jörg Schmidt <jo...@j-m-schmidt.de>.
> From: technik [mailto:technik_div@jrsch.de] 

> ich habe ein Calc Dokument und eine darin eine Tabelle
> Apfel
> Birne
> Banana
> ...
> 
> Jetzt möchte ich gerne mit einem Makro in die Tabelle(!) 
> Schaltflächen 
> hinzufügen (und formatieren)
> Dabei soll in einer parallelen Tabelle die Schaltflächen mit 
> den Namen 
> angezeigt werden und bei Klicken einen Wert in eine bestimmte Zelle 
> eintragen.
> und zwar sollen so viele Schaltflächen wie Einträge in der 
> Liste sein. 
> Hier also drei. Kommen Melonen noch hinzu müssen es vier 
> sein. Aber das 
> dürfte kein Problem sein.  Auf eine bestehende Schaltfläche kann ich 
> zugreifen, nur weiß ich nicht wie ich eine neue anlegen kann.

Z.B. Siehe:
https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=66707

> Die Schaltfläche soll mit einem Makro verbunden sein. Ist es 
> möglich dem 
> Makro einen Parameter mitzugeben, z.B. den Namen der 
> Schaltfläche?  

Ja

> Wenn 
> ja, wie?

Indem man den gewünschten Parameter definiert:

Sub meinMakro (meinParameter As String)

Und das Makro entsprechend aufruft:

meinMakro ("NurEinBeispiel")




Gruß
Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org