❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

mit basic makro den Text eines Textfeldes in Impress ändern

Alles zur Programmierung im LibreOffice.
Antworten
libre4711
Beiträge: 5
Registriert: Di 19. Aug 2014, 23:05

mit basic makro den Text eines Textfeldes in Impress ändern

Beitrag von libre4711 » Mi 20. Aug 2014, 00:19

Hallo,

wie kann man in Impress den Text eines Textfeldes ändern?

Code: Alles auswählen

Sub Textaendern
Dim  oDocument       As Object
Dim  oForm              As Object
Dim  oLabel              As Object

	oDocument      =  ThisComponent
	oForm          = oDocument.DrawPages(0).Forms.getByName("folie2")
					 
	oLabel         =  oForm.GetByName( "lbltest" )
	oLabel.Label   =  "Test"
End Sub
Das ganze scheitert schon in der Zeile:

Code: Alles auswählen

oForm          = oDocument.DrawPages(0).Forms.getByName("folie2")
Mit der Fehlermeldung:

Code: Alles auswählen

LibreOffice 3.5
Basic-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message:.
Da ich schon seit Stdunden an dem Problem sitze sehe ich wohl den Wald vor lauter Bäumen nicht mehr.

Deshalb bitte ich um sachdienliche Hilfe.

Gruß
libre4711

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2580
Registriert: Fr 10. Dez 2010, 10:01

Re: mit basic makro den Text eines Textfeldes in Impress änd

Beitrag von karolus » Mi 20. Aug 2014, 07:35

Hallo

Die Fehlermeldung sagts doch deutlich:

Ein "Ding" das über diesen Namen angesprochen werden kann, gibts nicht.

Du benutzt doch sicher schon Mri oder Xray :!:

Karolus
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

libre4711
Beiträge: 5
Registriert: Di 19. Aug 2014, 23:05

Re: mit basic makro den Text eines Textfeldes in Impress änd

Beitrag von libre4711 » Mi 20. Aug 2014, 09:53

karolus hat geschrieben: Die Fehlermeldung sagts doch deutlich:

Ein "Ding" das über diesen Namen angesprochen werden kann, gibts nicht.
Karolus
Die Fehlermeldung glaube ich schon verstanden zu haben. Was ich nicht verstehe ist warum die Fehlermeldung kommt,
da die "folie2" definitiv existiert.

Um so mehr verwundert mich, das folgender Befehl mit einer Fehlermeldung quitiert wird:

Code: Alles auswählen

msgbox ThisComponent.DrawPages(0).Forms(0).Name

Code: Alles auswählen

LibreOffice 3.5
Unzulässiger Wert oder Datentyp.
Index außerhalb des definierten Bereiches.
In der Präsentation gibt es zwei Folien. Somit muß doch .Forms(0).Name und .Forms(1).Name existieren, oder
verstehe ich hier etwas grundlegend falsch?
karolus hat geschrieben: Du benutzt doch sicher schon Mri oder Xray :!:
Karolus
Da ich in Sachen Libre Office blutiger Anfänger bin würde ich ungerne Software installieren, bei der ich nicht weiß
wie man diese bedient. Die Frage ist auch ob diese zielführend ist um das Problem zu lösen.

Es scheint mir das hier ein simpler Anfängerfehler vorliegt. Nur leider finde ich diesen nicht.
Es scheint als ob das Objekt ThisComponent nicht angesprochen werden kann, bzw. leer ist.
Gibt es hier irgendwelche Restriktionen die freigeschaltet werden müssen?

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2580
Registriert: Fr 10. Dez 2010, 10:01

Re: mit basic makro den Text eines Textfeldes in Impress änd

Beitrag von karolus » Mi 20. Aug 2014, 10:59

Hallo

Du wirst mit der Programmierung in LO nicht weit kommen ohne die Benutzung eines Objektinspektors.
Dazu gibt eine Online-hilfe auf der Extensionsseite.
Mri kann im wesentlichen aus LO heraus über →Extras→Add-ons→MRI resp. →MRI<Selection bedient werden.

Falls dein Präsentation keine privaten Daten enthält häng die Datei mal an, damit man dir helfen kann.

Ich vermute Impress hat in etwa folgende Objekt-hierarchie
  • ThisComponent
    • →.DrawPages().getByIndex( ? )
      • →→.getByIndex( ? )
        • →→→.getForms() # ab hier wäre es pures Raten
Karolus
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

libre4711
Beiträge: 5
Registriert: Di 19. Aug 2014, 23:05

Re: mit basic makro den Text eines Textfeldes in Impress änd

Beitrag von libre4711 » Mi 20. Aug 2014, 22:21

Danke für die Hilfe.
Mir werde ich testen. Zwischenzeitlich wurden die Objekte Stück für Stück mittels
dbg_methods, dbg_properties und dbg_supportedinterfaces analysiert und heraus kam der folgende Code.

Der Code hat nur einen gravierenden Schönheitsfehler. Im "Entfurfs-Modus" funktioniert dies Einwandfrei,
aber wenn die Präsentation gestartet wird wird der Code zwar ausgeführt, aber auf der Folie sieht man keine Veränderung.
Erst wenn die Präsentation beendet wird sieht man die Veränderung im "Entfurfs-Modus".

Wie kann man Impress dazu bewegen ein Objekt neu zu zeichnen. In den Objekten habe ich nicht wirklich eine Methode
(reload oder refresh oder ...) dazu gefunden.

Hat dazu noch jemand eine Idee?

Code: Alles auswählen

Sub test
Dim  oDocument       As Object
Dim  oDrawPage       As Object
Dim  oLabel          As Object

	oDocument = ThisComponent
	oDrawPage = oDocument.DrawPages(1)
		
	oDrawPage.GetByIndex(2).SetString("endlich")
		
End Sub

libre4711
Beiträge: 5
Registriert: Di 19. Aug 2014, 23:05

Re: mit basic makro den Text eines Textfeldes in Impress änd

Beitrag von libre4711 » Do 21. Aug 2014, 11:19

Kann es sein, das Impress-Makros gar nicht zur Laufzeit der Präsentation Änderungen an dieser ausführen können, welche somit unmittelbar angezeigt werden sollen?

Der folgende Code aus http://www.pitonyak.org/OOME_3_0.pdf auf Seite 553 und folgende führt während der Präsentation zu keiner Bildschirmausgabe. Erst wenn die Präsentation beendet wird erscheinen die vom Programm erzeugten Linien.

Die Präsentation liegt an.
Verwendet wurde LibreOffice Version: 4.2.4.2 Build-ID: 63150712c6d317d27ce2db16eb94c2f3d7b699f8
auf einem Windows 7
Die Probleme treten jedoch auch unter XUbuntu 12.04 mit LibreOffice 3.irgendwas auf.

Listing 485. Draw 20 lines in a Draw or Impress document.

Code: Alles auswählen

Function draw20Lines()
Dim oPage 'Page on which to draw
Dim oShape 'Shape to insert
Dim oPoint 'Initial start point of the line
Dim oSize 'Width and height of the line
Dim i% 'Index variable
Dim n% 'Number of iterations to perform
Dim nShift%'Shift the graphic down
Dim oDoc
oDoc = LoadEmptyDocument("sdraw")
draw20Lines = oDoc
oPage = createDrawPage(oDoc, "Test Draw", True)
nShift = oPage.Height / 4
n = 20
For i = 0 To n
oShape = oDoc.createInstance("com.sun.star.drawing.LineShape")
oShape.LineColor = RGB( 255, 0, i+20 )
oShape.LineWidth = 20
oPoint = oShape.Position
oPoint.X = oPage.Width / 4

oPoint.Y = i * oPage.Height / n / 4 + nShift
oShape.Position = oPoint
oSize = oShape.Size
oSize.Height = (oPage.Height - 2 * i * oPage.Height / n) / 4
oSize.Width = oPage.Width / 2
oShape.Size = oSize
oPage.add(oShape)
Next
End Function
Dateianhänge
impress test.odp
Test Präsentation
(12.63 KiB) 166-mal heruntergeladen


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten