Ich habe ein Listenprojekt, bei dem eine Datenzeile komplett aus einem LL_DRAWING_USEROBJ-Feld besteht. Nun würde ich gerne die Höhe dieser Zeile bzw. des Feldes vom Inhalt abhängig machen, werde aber nicht fündig. rcPaint im LL_CMND_DRAW_USEROBJ-Handler zu ändern bringt erwartungsgemäß nicht den gewünschten Effekt.
Eine vage Idee wäre, eine dynamische Formel für die Höhe im Designer anzugeben. Kann ich z.B. bei LlDefineFieldExt die Höhe als Contents übergeben und das irgendwie in der Formel auswerten?
Da die Feldhöhe eine Formel wie jede andere ist: klar.
Denk aber an die Einheiten, d.h. am besten übergibst Du’s in SCM (1/1000 mm) und packst im Designer als Höhe “UnitFromSCM(<deineHöhe>)”. Dann kümmern Dich die Einheiten nie mehr
Soweit gut. Aber ich berechne meine Höhe im Delphi-Code. Wie kriege ich die in den Designer? Vermutlich ginge eine LL-Funktion, aber das ist doch mit Kanonen auf Spatzen geschossen.
Ach ja: vorsichtshalber - und hier kommen dann leider doch die Einheiten ins Spiel:
a) Dir merken, ob es der erste LlPrintFields()-Aufruf nach LlPrint() ist (d.h. die erste Datenzeile einer Seite)
b) wenn ja, die Formel “RemainingTableSpace” evaluieren (LlExpr…() API) und dafür sorgen, daß die Dimensionen des benutzerdefinierten Objekts nicht größer werden als das Ergebnis der Formel…
sonst bekommst Du eine Endlosschleife, weil das Objekt dann nie genug Platz haben wird!
Im Designer ist HeightOfUserDefinedGraphisInSCM = 0, da ich den Wert nur zur Programmlaufzeit berechnen kann. Dann wird als Default 80 genommen. Anderenfalls rechne ich die Höhe wie von dir vorgeschlagen um, beschränke sie dann aber auf das Intervall [50…140]. Damit brauche ich in meinem konkreten Bericht das RemainingTableSpace gar nicht.