Hallo, ich habe mal wieder ein Problem. Vielleicht könnt ihr mir nochmal helfen...
Ich möchte gerne per Makro ein Formularfeld (grafische Schaltfläche) platzieren. Zugriff habe ich mir über den Befehl
Code: Alles auswählen
thisComponent.Sheets().getbyName("Tabelle").DrawPage.Forms.getbyName("Formular").getbyName("Feldname")
verschafft. Ich kann hier auch durchaus Parameter wir "BackgroundColour" oder "Sichtbarkeit" steuern. Aber anscheinend keine Position obwohl dies in den Eigenschaften des Kontrollfelds (Rechtsklickmenu) angegeben werden kann. Ich habe mit X-Ray nach den entsprechenden Parametern gesucht aber nichts gefunden.
Im Netz habe ich eine Lösung gefunden bei der folgender Code verwendet wird
Code: Alles auswählen
myPos.X = [x]
myPos.Y = [y]
myDrawpage = thisComponent.Sheets().getbyName("Name").Drawpage
for i = 0 to myDrawpage.count - 1
myShape = myDrawpage(i)
if myShape.supportsservice("com.sun.star.drawing.ControlShape") then
if myShape.control.name = ("Feldname") then
myShape.Position = myPos
end if
end if
next
Mit diesem Code scheint es zu funktionieren. Aber ich verstehe es nicht. Warum muss man den Umweg über die Schleife gehen? Ist es an dieser Stelle nicht möglich direkt auf das Formularfeld zuzugreifen und die Position einzugeben?
Mit X-Ray kommt man hier auch nicht weiter. An der Stelle
Code: Alles auswählen
myDrawpage = thisComponent.Sheets().getbyName("Name").Drawpage(i)
ist Schluss. Es ist anscheinend nicht möglich zu dem Punkt "Drawpage" mit einem Parameter (i) zu springen. "Drawpage" ist nur ohne Parameter verfügbar. (Hier habe ich mich jetzt sicher absolut unprofessionell ausgedrückt. Ich weiß aber nicht wie ich es anders beschreiben soll. Ich hoffe ihr wisst was gement ist.)
Zudem bin ich irgendwie von der Strukturierung verwirrt. Eigentlich existiert mein Formularfeld doch als Teil eines Formulars auf einer "Drawpage". Zumindest würde ich den Code
Code: Alles auswählen
thisComponent.Sheets().getbyName("Name").DrawPage.Forms.getbyName("Formular").getbyName("Feldname")
so interpretieren. Nun scheint es mir aber so zu sein, dass ebenfalls eine "Drawpage" unterhalb des Formulars existiert, die denselben Namen trägt wie mein Formularfeld.
Code: Alles auswählen
thisComponent.Sheets().getbyName("Name").Drawpage(i).control.name
Über diesen "Pfad" suche ich mir ja in der oben beschriebenen Schleife die richtige "Drawpage" für mein Formularfeld heraus.
Ich bin auf jeden Fall ziemlich verwirrt. Wäre schön, wenn jemand Licht in mein Dunkel bringen könnte...
_________________
Moderationshinweis
Thema verschoben von OOo Calc nach Makros und allgemeine Programmierung, wo alle Themen zur individuellen Programmierung hingehören. – lorbass, Moderator
Hallo, ich habe mal wieder ein Problem. Vielleicht könnt ihr mir nochmal helfen...
Ich möchte gerne per Makro ein Formularfeld (grafische Schaltfläche) platzieren. Zugriff habe ich mir über den Befehl
[code]thisComponent.Sheets().getbyName("Tabelle").DrawPage.Forms.getbyName("Formular").getbyName("Feldname")[/code]
verschafft. Ich kann hier auch durchaus Parameter wir "BackgroundColour" oder "Sichtbarkeit" steuern. Aber anscheinend keine Position obwohl dies in den Eigenschaften des Kontrollfelds (Rechtsklickmenu) angegeben werden kann. Ich habe mit X-Ray nach den entsprechenden Parametern gesucht aber nichts gefunden.
Im Netz habe ich eine Lösung gefunden bei der folgender Code verwendet wird
[code]myPos.X = [x]
myPos.Y = [y]
myDrawpage = thisComponent.Sheets().getbyName("Name").Drawpage
for i = 0 to myDrawpage.count - 1
myShape = myDrawpage(i)
if myShape.supportsservice("com.sun.star.drawing.ControlShape") then
if myShape.control.name = ("Feldname") then
myShape.Position = myPos
end if
end if
next[/code]
Mit diesem Code scheint es zu funktionieren. Aber ich verstehe es nicht. Warum muss man den Umweg über die Schleife gehen? Ist es an dieser Stelle nicht möglich direkt auf das Formularfeld zuzugreifen und die Position einzugeben?
Mit X-Ray kommt man hier auch nicht weiter. An der Stelle
[code]myDrawpage = thisComponent.Sheets().getbyName("Name").Drawpage(i)[/code]
ist Schluss. Es ist anscheinend nicht möglich zu dem Punkt "Drawpage" mit einem Parameter (i) zu springen. "Drawpage" ist nur ohne Parameter verfügbar. (Hier habe ich mich jetzt sicher absolut unprofessionell ausgedrückt. Ich weiß aber nicht wie ich es anders beschreiben soll. Ich hoffe ihr wisst was gement ist.)
Zudem bin ich irgendwie von der Strukturierung verwirrt. Eigentlich existiert mein Formularfeld doch als Teil eines Formulars auf einer "Drawpage". Zumindest würde ich den Code
[code]thisComponent.Sheets().getbyName("Name").DrawPage.Forms.getbyName("Formular").getbyName("Feldname")[/code]
so interpretieren. Nun scheint es mir aber so zu sein, dass ebenfalls eine "Drawpage" unterhalb des Formulars existiert, die denselben Namen trägt wie mein Formularfeld.
[code]thisComponent.Sheets().getbyName("Name").Drawpage(i).control.name[/code]
Über diesen "Pfad" suche ich mir ja in der oben beschriebenen Schleife die richtige "Drawpage" für mein Formularfeld heraus.
Ich bin auf jeden Fall ziemlich verwirrt. Wäre schön, wenn jemand Licht in mein Dunkel bringen könnte...
_________________
[size=85][color=#FF0066][b]Moderationshinweis[/b][/color]
Thema verschoben von [url=http://de.openoffice.info/viewforum.php?f=2]OOo Calc[/url] nach [url=http://de.openoffice.info/viewforum.php?f=18]Makros und allgemeine Programmierung[/url], wo alle Themen zur individuellen Programmierung hingehören. – lorbass, Moderator[/size]