Dynamische Höhe von LL_DRAWING_USEROBJ-Feldern?

Hallo!

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?

Gruß,
Uli.

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 :wink:

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.

OK. Danke für den Hinweis. :slight_smile:

LlDefineFieldExt(hJob,“HeightOfUserDefinedGraphisInSCM”,“10000”,LL_NUMERIC,NULL); // 1 cm, rsp die korrekte Bildhöhe in SCM

Und dann im Designer bei der Höhe des Felds einfach

“UnitFromSCM(HeightOfUserDefinedGraphisInSCM)”

als Formel.

[quote=Paul Schmidt]LlDefineFieldExt(hJob,“HeightOfUserDefinedGraphisInSCM”,“10000”,LL_NUMERIC,NULL); // 1 cm, rsp die korrekte Bildhöhe in SCM

Und dann im Designer bei der Höhe des Felds einfach

“UnitFromSCM(HeightOfUserDefinedGraphisInSCM)”

als Formel.[/quote]
Öhm, ja… als Feld… da hätte ich auch selber draufkommen können…
Danke, Paulchen!

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!

Ich mache es jetzt wie folgt:

If(HeightOfUserDefinedGraphisInSCM=0, 80, Max(50, Min(140, UnitFromSCM(HeightOfUserDefinedGraphisInSCM))))

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.