Seite 1 von 1

setPosSize() = Keine Funktion

Verfasst: Fr 23. Feb 2018, 12:23
von MaddinR
Moin @ all

Beim Modernisieren meiner viele Jahre alten Base-Datenbank bin ich jetzt auf ein mir unerklärbares Problem gestoßen... und zwar möchte ich ein Text-Feld innerhalb eine Base-Formulares generisch berechnet verschieben. Das Text-Feld ist natürlich an die Abfrage des Formulares gebunden und zeigt den Feldinhalt des aktuellen Satzes an.

Das Formular hat die ID "Form_GridCtrl", das betroffene Textfeld "EditCtlrl". Mit den folgenden Statements hole ich mir den Zugriff aufs Edit-Contol:

Code: Alles auswählen

oForm = ThisComponent.drawpage.forms.getByName("Form_GridCtrl")
objref = oForm.getByName("EditCtlrl")
apiref = ThisComponent.getCurrentController().getControl(objref)

' oGr = apiref.getPosSize()
' apiref.setPosSize (oGr.X, oGr.y-200, oGr.Width-100, oGr.Height, 15)
 apiref.setPosSize (10, 10, 100, 5,15)
Die Comment-Zeilen sollen später die eigentliche Funktion abbilden, hier wollte ich einfach den Effekt mit fixen Werten testen. Tja, leider passiert gar nix... das Textfeld wird nicht umpositioniert.

Was mich dabei so irriert, ist der Umstand, dass die folgende Funktion, die ich mir zur Bestätigung (das richtige Objekt zu bearbeiten) aus xray entnommen habe, einwandfrei funktioniert.

Code: Alles auswählen

apiref.setVisible(false)
Aber das aus der gleichen xray-Liste der vorhandenen "Methoden" entnommene SetPosSize() klappt nicht. Interessant ist, wenn ich mir direkt nach dem Setzen der neuen Werte den Inhalt ansehe, so hat sich nichts verändert.

Code: Alles auswählen

oGr = apiref.getPosSize()
Hat jemand einen Tip für mich, wie ich das Problem lösen kann?

Re: setPosSize() = Keine Funktion

Verfasst: Fr 23. Feb 2018, 13:19
von Pit Zyclade
Hat das nicht etwas mit Programmieren zu tun?

Re: setPosSize() = Keine Funktion

Verfasst: Fr 23. Feb 2018, 14:08
von MaddinR
Pit Zyclade hat geschrieben:
Fr 23. Feb 2018, 13:19
Hat das nicht etwas mit Programmieren zu tun?
Meine erste Reaktion war "nein, natürlich nicht... wie kommst Du denn da drauf?" :mrgreen: Aber dann ist mir aufgegangen, dass das wohl 'ne blöde Reaktion wäre.... weil mein Standpunkt war "Es geht um die Auswertung einer Base-Datenbank"... und ja, man kann das auch in "Programmierung" sehen. Wenns also falsch positioniert ist, dann sorry. Und wenn ein Moderator das verschieben mag, gerne... no prob. Wichtiger als der Ort ist mir jedoch ein kleiner hilfreicher Tip zur Lösung des Problems. ;)

Re: setPosSize() = Keine Funktion

Verfasst: Fr 23. Feb 2018, 16:21
von F3K Total
Moin,
versuche es mal auf der Drawpage:

Code: Alles auswählen

Sub Textfeld1
    Set_PosSize("Textfeld 1",2000,2000,760,10000)
end Sub

Sub Set_PosSize(sName,X,Y,H,W)
    oPage = ThisComponent.drawpage
    for i = 0 to oPage.count - 1
        oshape = oPage(i)
        if oshape.Control.Name = sName then 
            MyShape = oShape
            exit for
        endif
    next
    aPosition = oshape.Position
    aSize = oshape.Size
    aSize.Height = H 
    aSize.Width =  W
    aPosition.X = X
    aPosition.Y = Y
    oshape.Position = aPosition
    oshape.Size = aSize
End Sub
Gruß R

Re: setPosSize() = Keine Funktion

Verfasst: Fr 23. Feb 2018, 18:29
von MaddinR
@F3K Total
Ich habs jetzt hingekriegt... die von Dir im Beispiel verwendete(n) Shape-Methode(n) waren die Lösung oder hat mich drauf gebracht. Es funktioniert, allerdings weiss ich nicht, ob man das besser lösen kann... mir kommt das auf jeden Fall sehr kompliziert vor.

Das Ziel war, ein Edit-Ctrl (Bottom/Page) unterhalb eines Grid-Controls dynamisch so weit nach unten zu legen, wie es Display-Size hergibt, um dann im zweiten Schritt das Grid-Contol so groß wie möglich ebenfalls nach unten zu erweitern... bis eben kurz über dieses Edit-Control. Also, funktionieren tuts... aber irgendwie find ich's unästhetisch.... :roll:

Code: Alles auswählen

objref  	= oForm.getByName("StaticTxtEdCtl")
apiref  	= ThisComponent.getCurrentController().getControl(objref)
CtlSize  	= apiref.getPosSize()
Shape   	= GetControlShape(ThisComponent, "StaticTxtEdCtl")
CtlPoint  	= Shape.GetPosition()
xfaktor 	= CtlPoint.X / CtlSize.X
yfaktor 	= CtlPoint.Y / CtlSize.Y
CtlPoint.Y	= (WinSize.Height - 30) * yfaktor
Shape.SetPosition(CtlPoint)
Und hier wird dann auch das Edit-Control bewegt:

Code: Alles auswählen

objref  	= oForm.getByName("EditCtl")
apiref  	= ThisComponent.getCurrentController().getControl(objref)
CtlSize  	= apiref.getPosSize()
Shape   	= GetControlShape(ThisComponent, "EditCtl")
CtlPoint  	= Shape.GetPosition()
CtlPoint.Y 	= (WinSize.Height - 30) * yfaktor
Shape.SetPosition(CtlPoint)
aSize   	= Shape.GetSize()
aSize.Width   	= (WinSize.Width - CtlSize.X - 15) * xfaktor
Shape.SetSize(aSize)
Ich habe mir zurerst zum Edit-Control den Static-Text geholt, dessen Position 2-fach ermittelt, einmal nach Pixel und einmal nach diesen Shape-Koordinaten. Und daraus dann nen Faktor errechnet, mit dem ich dann weiterhin Pixelbasiert rechnen konnte. Das klappt in X und Y-Richtung. Die beiden Vars yfaktor und xfaktor passten dann für alle weiteren Aktionen mit anderen Controls für MoveToPos und Re-Size. Aber wie gesagt, ziemlich kompliziert... und ich glaube, dass kann man bestimmt besser machen.... nur fürs Wie habe ich keine Vorstellung.... :roll: