Seite 1 von 1

Makro: Felder unsichtbar machen

Verfasst: Do, 29.05.2014 15:59
von pony_slaystation
Hallo Leute,
ich habe keine Erfahrung mit OO Basic oder dem Schreiben von Makros und möchte den EInstieg mit einem einfachen Beispiel machen. Per Druck auf eine Schaltfläche sollen einige Textfelder samt Beschreibungen ein- oder ausgeblendet werden; je nach dem, ob sie gerade sichtbar sind oder nicht. ALso: Druck auf Makro-Button (rift Makro auf): Makro prüft, ob die Schaltfläche gerade sichbar ist oder nicht. Ist sie sichtbar, setzt es die Schaltfläche auf unsichtbar. Andernfalls setzt sie sie auf sichtbar. Ich kriege es hin, eine Schaltfläche damit unsichtbar zu machen, aber nicht wieder zurück; sprich: nur ohne die if-Anweisung.
Im vorliegenden Fall erhalte ich die Meldung: "Datentypen unverträglich" in der if---then Zeile.

Code: Alles auswählen

REM  *****  BASIC  *****

Sub ein_ausblenden
oDoc = ThisComponent
oView = oDoc.getCurrentController()
oForm = oDoc.drawpage.forms.getByName("Segment")
oFeld1 = oForm.getByName("segmenterl_txt")
oFeld2 = oForm.getByName("segmenterl_feld")
oControl = oDoc.getCurrentController()
oFeld1aus = oControl.getcontrol(oFeld1)
if oFeld1aus.Visible = true THEN
	oFeld1aus.Visible = false
	oControl = oDoc.getCurrentController()
	oFeld2aus = oControl.getcontrol(oFeld2)
	oFeld2aus.Visible = false
	ELSE
	oFeld1aus.Visible = true
	oControl = oDoc.getCurrentController()
	oFeld2aus = oControl.getcontrol(oFeld2)
	oFeld2aus.Visible = true
end if	
end sub

Re: Makro: Felder unsichtbar machen

Verfasst: Do, 29.05.2014 16:20
von DPunch
Servus

Die richtige Anweisung lautet

Code: Alles auswählen

if oFeld1aus.isVisible = true THEN
.Visible ist nur der Setter (setVisible).

Wenn Du sowieso immer nur zwischen sichtbar und unsichtbar hin- und herschalten willst, ohne weitere Bedingungen, kannst Du das Ganze übrigens auch einfach so abkürzen:

Code: Alles auswählen

oDoc = ThisComponent
oView = oDoc.getCurrentController()
oForm = oDoc.drawpage.forms(0)
oFeld1 = oForm.getByName("segmenterl_txt")
oFeld2 = oForm.getByName("segmenterl_feld")
oControl = oDoc.getCurrentController()
oFeld1aus = oControl.getcontrol(oFeld1)
oFeld2aus = oControl.getcontrol(oFeld2)
oFeld1aus.Visible = NOT oFeld1aus.isVisible
oFeld2aus.Visible = NOT oFeld2aus.isVisible

Re: Makro: Felder unsichtbar machen

Verfasst: Fr, 30.05.2014 14:54
von pony_slaystation
Danke dir.
deine Lösung sieht schlanker aus, aber wenn ich sie einbaue, erhalte ich (egal was ich mache) eine NoSuchElement Exception. Die Namen der Felder stimmen aber, das hab ich überprüft.

Re: Makro: Felder unsichtbar machen

Verfasst: Fr, 30.05.2014 16:02
von DPunch
Servus

Tausch mal die Zeile

Code: Alles auswählen

oForm = oDoc.drawpage.forms(0)
gegen

Code: Alles auswählen

oForm = oDoc.drawpage.forms.getByName("Segment")