Formular-Steuerelemente in Impress nutzen
Moderator: Moderatoren
Formular-Steuerelemente in Impress nutzen
Ich möchte während einer Präsentation Text- und Beschriftungsfelder nutzen (mit Werten aus einem Makro füllen). In PowerPoint würde die Lösung etwa so aussehen:
TextBox1.Text = "Hallo!"
Wie bekomme ich das mit Impress hin? Habe schon die OOHilfe durchsucht sowie einige OO-Foren. Bin ratlos. Freue mich über Hinweise.
TextBox1.Text = "Hallo!"
Wie bekomme ich das mit Impress hin? Habe schon die OOHilfe durchsucht sowie einige OO-Foren. Bin ratlos. Freue mich über Hinweise.
Hey Lupo,
Du schreibst ein Makro, sprichst das Formular an, besorgst dir das Objekt der Textbox, und übergibst den Wert des Inhaltes. Der wird dann angezeigt.
Durchsuch das Forum nach "Formular" und "Textbox" oder "Textfeld" , dann wirst du schon Codeschnipsel finden.
Und wenn es nicht merh weiter geht, poste deinen Code, die Fehlermeldungen, die genaue Beschreibung deiner Randbedingugen, dann werden wir dir schon helfen
Viele Grüße
Thomas
Na, im Grunde genommen genauso. Was soll ich dazu mehr sagen?Wie bekomme ich das mit Impress hin?
Du schreibst ein Makro, sprichst das Formular an, besorgst dir das Objekt der Textbox, und übergibst den Wert des Inhaltes. Der wird dann angezeigt.
Durchsuch das Forum nach "Formular" und "Textbox" oder "Textfeld" , dann wirst du schon Codeschnipsel finden.
Und wenn es nicht merh weiter geht, poste deinen Code, die Fehlermeldungen, die genaue Beschreibung deiner Randbedingugen, dann werden wir dir schon helfen

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Ein Beispiel habe ich gefunden. Ich verwende nur keinen Dialog. Das Steuerelement (Label, Texbox usw.) liegt direkt auf der Folie. Ein Objekt "Form" gibt es in meinem Fall nicht.
Folgendes Beispiel verwendet einen Dialog. Wie geht es ohne?
Freue mich über jeden Hinweis 
Folgendes Beispiel verwendet einen Dialog. Wie geht es ohne?
Code: Alles auswählen
Sub write_label
Dim oDocument As Object
Dim oForm As Object
Dim oLabel As Object
oDocument = ThisComponent
oForm = oDocument.DrawPage.Forms.getByName("write_erase_form")
oLabel = oForm.GetByName( "write_erase_label" )
oLabel.Label = "OpenOffice.org office suite"
End Sub

Hey Lupo,
Alos, der Code beschreibt exakt, wie du in ein Beschriftungsfeld einen Inhalt schreiben kannst. Nutzt du hingegen ein Textfeld (zur Eingabe von Text), so schreibst du die Vorgabe mit
rein.
Viele Grüße
thomas
Das stimmt nicht. Das Beispiel verwendet - wie du - ein Formular, keinen Dialog. Und bei dir geht es genauso. Du musst halt nur die entsprechenden Namen anpassen - auf deine Werte.Folgendes Beispiel verwendet einen Dialog. Wie geht es ohne?
Und natürlich verwendest du ein "Form" - Objekt. "form" bedeutet Formular, und alle Kontrollelement sind Unterobjekte eines Formulars, das dann auf der Drawpage liegt.Ein Objekt "Form" gibt es in meinem Fall nicht.
Alos, der Code beschreibt exakt, wie du in ein Beschriftungsfeld einen Inhalt schreiben kannst. Nutzt du hingegen ein Textfeld (zur Eingabe von Text), so schreibst du die Vorgabe mit
Code: Alles auswählen
oLabel.Text = "Bla bla bla"
Viele Grüße
thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Nachtrag:
Es gibt doch noch einen Unterschied: Der Code stammt offensichtlich aus einem Text- oder Calc-Dokument. Dort gibt es immer nur eine Drawpage.
In Impress- und Draw-Dokumenten hingegen gibt es eben viele Drawpages, jede Seite bzw. jedes Dia ist ja eine eigen Drawpage.
Also musst du erst mal die "richtige" Seite als Obkelt erhalten.
für die erste Zeichnung/Dia.
Gruss
Thomas
Es gibt doch noch einen Unterschied: Der Code stammt offensichtlich aus einem Text- oder Calc-Dokument. Dort gibt es immer nur eine Drawpage.
In Impress- und Draw-Dokumenten hingegen gibt es eben viele Drawpages, jede Seite bzw. jedes Dia ist ja eine eigen Drawpage.
Also musst du erst mal die "richtige" Seite als Obkelt erhalten.
Code: Alles auswählen
oDocument = ThisComponent
oForm = oDocument.DrawPages(0).Forms.getByName("write_erase_form")
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Dank für Deinen Tipp !
Jetzt sieht mein Code so aus:
Meine aktuelle Folie (Folie1) enthält die Steuerelemente. Das Makro bricht bei
oForm= oDocument.DrawPages(0).Forms.getByName("Folie1")
mit Fehlermeldung ab: Eigenschaft oder Methode nicht gefunden.

Jetzt sieht mein Code so aus:
Code: Alles auswählen
sub LabelMitTextfuellen
Dim oDocument As Object
Dim oForm AS Object
Dim oLabel As Object
oDocument = ThisComponent
oForm = oDocument.DrawPages(0).Forms.getByName("Folie1")
oLabel = oForm.GetByName( "Beschriftungsfeld" )
oLabel.Label = "Hallo"
end sub
oForm= oDocument.DrawPages(0).Forms.getByName("Folie1")
mit Fehlermeldung ab: Eigenschaft oder Methode nicht gefunden.

Hey Lupo,
hmm, also bei mir funktioniert der Code einwandfrei
Bist du sicher, dass dein Formular "Folie1" heisst? Der automatisch vergebene Standardname ist eigentlich "Standard", aber du kannst das natürlich ändern. Das ist nicht der Name deiner Folie - die bekommst du mit DrawPage(0) - das ist die erste Folie!
Und hast du auch tatsächlich ein Beschriftungsfeld mit Namen "Beschriftungsfeld"? Der automatische Vorganename lautet nämlich "LabelField", aber auch den kann man natürlich ändern.
Überprüf mal beide Werte.
Markier dein Beschriftngsfeld (grüne Anfasspunkte), Kontextmenü
-> Kontrollfeld ... um den Namen des Controlls zu überprüfen (und setzen)
-> Formular ... um den Namen des Formulars zu überprüfen / setzen.
Gruss
Thomas
hmm, also bei mir funktioniert der Code einwandfrei

Bist du sicher, dass dein Formular "Folie1" heisst? Der automatisch vergebene Standardname ist eigentlich "Standard", aber du kannst das natürlich ändern. Das ist nicht der Name deiner Folie - die bekommst du mit DrawPage(0) - das ist die erste Folie!
Und hast du auch tatsächlich ein Beschriftungsfeld mit Namen "Beschriftungsfeld"? Der automatische Vorganename lautet nämlich "LabelField", aber auch den kann man natürlich ändern.
Überprüf mal beide Werte.
Markier dein Beschriftngsfeld (grüne Anfasspunkte), Kontextmenü
-> Kontrollfeld ... um den Namen des Controlls zu überprüfen (und setzen)
-> Formular ... um den Namen des Formulars zu überprüfen / setzen.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hey Thomas ! - Klasse
Ich hatte im Code nicht "Standard", sonder "Folie1" stehen. Das wars. Wär ich nie draufgekommen. Vielen Dank.
So gehts:

Ich hatte im Code nicht "Standard", sonder "Folie1" stehen. Das wars. Wär ich nie draufgekommen. Vielen Dank.
So gehts:
Code: Alles auswählen
sub LabelMitTextfuellen
Dim oDocument As Object
Dim oForm AS Object
Dim oLabel As Object
dim oDrawPage as object
oDocument = ThisComponent
oForm = oDocument.DrawPages(0).Forms.getByName("Standard")
oLabel = oForm.GetByName( "LabelField" )
oLabel.Label = "Hallo !"
end sub
kleine Korrektur
Nur weil ich grad drauf gestoßen bin: Ein Calc Dokument hat für jedes Tabellenblatt eine Drawpage!Toxitom hat geschrieben:... Text- oder Calc-Dokument. Dort gibt es immer nur eine Drawpage. ...
Gruß,
Maggus (:o)