BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

setPosSize() = Keine Funktion

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
MaddinR
Beiträge: 42
Registriert: Fr 17. Jun 2011, 12:19

setPosSize() = Keine Funktion

Beitrag von MaddinR » Fr 23. Feb 2018, 12:23

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?
Gruß, Maddin

Pit Zyclade
Beiträge: 2674
Registriert: Mo 12. Nov 2012, 16:59

Re: setPosSize() = Keine Funktion

Beitrag von Pit Zyclade » Fr 23. Feb 2018, 13:19

Hat das nicht etwas mit Programmieren zu tun?
LO 7.5.8.2 (X86_64) / AOO 4.1.14 / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

MaddinR
Beiträge: 42
Registriert: Fr 17. Jun 2011, 12:19

Re: setPosSize() = Keine Funktion

Beitrag von MaddinR » Fr 23. Feb 2018, 14:08

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. ;)
Gruß, Maddin

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: setPosSize() = Keine Funktion

Beitrag von F3K Total » Fr 23. Feb 2018, 16:21

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
Windows 10: AOO, LO Linux Mint: AOO, LO

MaddinR
Beiträge: 42
Registriert: Fr 17. Jun 2011, 12:19

Re: setPosSize() = Keine Funktion

Beitrag von MaddinR » Fr 23. Feb 2018, 18:29

@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:
Gruß, Maddin

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten