Formular-Steuerelemente in Impress nutzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Lupo
Beiträge: 8
Registriert: Di, 02.11.2004 14:48

Formular-Steuerelemente in Impress nutzen

Beitrag von Lupo »

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.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Lupo,
Wie bekomme ich das mit Impress hin?
Na, im Grunde genommen genauso. Was soll ich dazu mehr sagen?
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
Lupo
Beiträge: 8
Registriert: Di, 02.11.2004 14:48

Beitrag von 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.
Genau das möchte ich machen. Wie?
Lupo :shock:
Lupo
Beiträge: 8
Registriert: Di, 02.11.2004 14:48

Beitrag von Lupo »

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?

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
Freue mich über jeden Hinweis :D
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Lupo,

Folgendes Beispiel verwendet einen Dialog. Wie geht es ohne?
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.
Ein Objekt "Form" gibt es in meinem Fall nicht.
Und natürlich verwendest du ein "Form" - Objekt. "form" bedeutet Formular, und alle Kontrollelement sind Unterobjekte eines Formulars, das dann auf der Drawpage liegt.
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" 
rein.

Viele Grüße
thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

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.

Code: Alles auswählen

oDocument      =  ThisComponent
oForm          = oDocument.DrawPages(0).Forms.getByName("write_erase_form") 
für die erste Zeichnung/Dia.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Lupo
Beiträge: 8
Registriert: Di, 02.11.2004 14:48

Beitrag von Lupo »

Dank für Deinen Tipp !
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

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.

:(
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Lupo
Beiträge: 8
Registriert: Di, 02.11.2004 14:48

Beitrag von Lupo »

Hey Thomas ! - Klasse :P
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

Maggus
****
Beiträge: 108
Registriert: Mo, 01.08.2005 13:32
Kontaktdaten:

kleine Korrektur

Beitrag von Maggus »

Toxitom hat geschrieben:... Text- oder Calc-Dokument. Dort gibt es immer nur eine Drawpage. ...
Nur weil ich grad drauf gestoßen bin: Ein Calc Dokument hat für jedes Tabellenblatt eine Drawpage!

Gruß,
Maggus (:o)
Antworten