Feld Position in X und Y per Makro abfragen und ändern

Hallo!

Ich versuche die Position von X und Y eines Textfeldes zu ermitteln und zu ändern um es z.b. nach Unten zu verschieben.

Es geht um Libre Office Base und um ein Formular.

Mit folgenden Code habe ich es Versucht da es im Handbuch so beschrieben ist mit PosSize.X.

Sub feldVerschieben
		
		Dim oForm as Object
		Dim oFeld as Object
		
		oForm	= thisComponent.Drawpage.Forms.getByName("MainForm")
		oFeld	= oForm.getByName("testfeld")
		
		posX = oFeld.PosSize.X
		msgbox posX
		oFeld.PosSize.X = posX + 100

End Sub

Lo wirft mir aber die Fehlermeldung dass er PosSize nicht kennt… Helptext etc. funktioniert tadelos zur die X,Y Breite und Höhe nicht…

grafik

Hat jemand Rat?

Das Problem wird sein, dass Du damit beim “Model” landest. Die Eigenschaft gibt es aber nur beim “View”.

Sub feldVerschieben
	Dim oForm as Object		
	oForm	= thisComponent.Drawpage.Forms.getByName("MainForm")
    oController = thisComponent.getCurrentController()
    oView = oController.getControl(oForm.getByname("textfeld"))		
	posX = oView.PosSize.X
	msgbox posX
	oView.PosSize.X = posX + 100
End Sub

Wenn Du das Ganze über das Event (z.B. klicken auf das Feld) steuerst, dann bekommst Du mit oEvent.Source den View und mit oEvent.Source.Model das Feld mit ganz anderen Möglichkeiten. Am besten für so etwas xray oder mri nutzen.

Vielen Dank für deine Antwort !

Auslesen funktioniert. nur kann ich den Wert nicht überschreiben.

Mit XRay habe ich jetzt ein wenig herumgespielt und denke PosSize ist nur ein Read Only Wert…

Ich finde keine Eigeschaft oder Methode die das Textfeld dann aktiv verschiebt, wenn ich eine Schaltfläche drücke.

Lg

Gehe von dem Screenshot aus. Wähle dann links oben die Methoden. Dann kannst Du sehen, dass es auch setPosSize gibt.
Danach gehe ich nach API LibreOffice.org und suche nach setPosSize, um die Art der Notierung noch einmal genau zu klären. Ist aber genauso aufgebaut wie bei PosSize:
setPosSize(10,20,200,25,15) sind X,Y,Width,Height und Flags. Das Flag ‘15’ bedeutet: Alles wird geändert.

Vielen Dank für dein Hilfe. Leider hat setPosSize auch keinen erfolg gabracht. (hat keinerlei auswirkung…)
Doch durch deine Hilfe mit xRay und ein bisschen google bin ich auf eine Lösung gekommen.

Sub feldVerschieben

	moveField("textfeld", 0, 650)

End Sub

Sub feldVerschiebenMinus

	moveField("textfeld", 0, -650)

End Sub


Function moveField(fName as string, x as long, y as long)
		
		oForm		= thisComponent.Drawpage.Forms.getByName("MainForm")
		objref  		= oForm.getByName(fName)
		apiref  		= ThisComponent.getCurrentController().getControl(objref)
		Shape   	= getControlShape(thisComponent, fName)
		CtlSize  	= apiref.getPosSize()
		CtlPoint  	= Shape.GetPosition()
		CtlPoint.X	= CtlPoint.X	+ X
		CtlPoint.Y	= CtlPoint.Y	+ Y
		
		Shape.SetPosition(CtlPoint)

End Function

Vielen dank trotzdem! :slight_smile: