mal wieder so ein esoterisches Problem:
Code: Alles auswählen
+---------------+---------------+
| Header 1 | Header 2 |
+---------------+---------------+
| Daten 1 | Daten 2 |
+---------------+---------------+
| XbpSLE() | XbpSLE() |
+---------------+---------------+
Der Code zum Erstellen der Elemente sieht wie folgt aus:
Code: Alles auswählen
oCol := AddBroCol(oBro, oFile, aPresParam, nWide, nI, oFile:aHeaders[nI])
oCol:footing:resize := {|aOld, aNew, self| ResizeInFooter(aOld, aNew, oXbp)}
aSize := oCol:currentSize()
oXbp := XbpSLE():new(oCol:footing, oCol:footing, {1, 1}, {aSize[1] - 2, 20})
oXbp:tabStop := .T.
oXbp:dataLinkName := oFile:aFields[nI]
oXbp:keyBoard := {|nKey, uNIL1, self| BrowseFilter(nKey, oFile, oBro, aEntries)}
==> oXbp:clipParent := .T. <==
oXbp:create()
aOld = {19, 21}
aNew = {200, 21}
Wobei {200, 21} die Grösse ist, mit welcher der Footer angezeigt werden soll. Das führt bei einigen Elementen dazu, dass aufgrund der Berechnung der neuen Anzeigegrösse das XbpSLE() zu schmal dargestellt wird.
Frage 1: Gibt es einen Grund für dieses etwas seltsame Verhalten, bzw. wie kann ich diesen Status erkennen und abfangen?
Ein Versuch, den :resize-Slot des XbpSLE zu beschicken, schlug fehl, denn die eingetragene Funktion wird nicht ausgeführt.
Die Funktion sieht so aus:
Code: Alles auswählen
STATIC FUNCTION ResizeInFooter(aOld, aNew, oXbp)
Local aSize
Local nXDiff, nYDiff
Local oChild
nXDiff := aOld[1] - aNew[1]
nYDiff := aOld[2] - aNew[2]
oChild := oXbp:childList()[1]
aSize := oChild:currentSize()
aSize[1] += nXDiff
aSize[2] += nYDiff
oChild:setSize(aSize)
oChild:show()
RETURN (.T.)
Ich vermute, dass das Ganze daran liegt, dass die Grössenänderung des Footing-Bereichs stattfindet, nachdem ich das XbpSLE in der Grösse geändert habe, und es deshalb überlagert.
Frage 2: Wie kann ich diese Überlagerung verhindern?
So, das konnte ich inzwischen lösen, indem ich für das XbpSLE:clipParent auf TRUE gesetzt habe (ich habe es oben nachgepflegt). Bleibt aber immer noch die erste Frage (hier habe ich nun einen Workaround, würde aber trotzdem gerne wissen, wie man das Problem generisch umgehen kann).