So wie Du es meinst “der Zelleninhalt ist…”, geht’s nicht. Du kannst
ja auch sonst in eine Zelle nur einen Inhaltstyp reinpacken, die Zelle
ist halt mit der Zeichnung Deines User-Objekts gefüllt. Was, wenn es
nicht so von Dir definiert ist, nichts vom Inhalt weiß.
Wenn Du so was willst, wie Du beschreibst, wirst Du dem Benutzer die
Möglichkeit geben wollen, die Ursprungsvariable oder -formel auswählen
zu können. Dafür mußt Du den _DLG-Typen benutzen. Dann kannst Du den
Var-Namen/die Formel im _pszParameter auswerten bzw. zurückgeben (im
EDIT-Event) bzw. auswerten (in DRAW-Event).
Du kannst LL auch um Funktionen erweitern. Unterstützt wird das m.W.
nur über die Komponenten (.NET, OCX, VCL), nicht aber in der
Basis-DLL. Für diese kannst Du als Behelf die External$()-Funktion
verwenden. Das ist zwar eine Krücke, kann aber mit etwas Mithilfe des
Benutzers ganz gut verwendet werden
Beispiel: Wenn der Benutzer ‘External$(“DIFF:”)’ eingibt, In
Deinem Beipiel also so was wie ‘External$(“DIFF:Today()-DATUM”)’,
kannst Du den LL_CMND_EVALUATE benutzen, um nachzuschauen, was gemacht
werden muß. Wenn dann vorne im Parameter “DIFF:” steht, parst Du den
Rest per LlExprParse(), berechnest den Wert über LlExprEvaluate()
[Freigabe über LlExprFree() nicht vergessen!] und machst dann mit dem
Ergebnis, was Du willst (bzw. der Benutzer unter “DIFF:” erwartet).
Das Problem ist, daß der Benutzer keine direkte Syntax-Unterstützung
in der Formel hat (wohl aber Fehlermeldungen, wenn Du das machst!).
Nach LlExprEvaluate() hast Du dann den Differenzwert der Dati, und
kannst den in Deinen Wunsch-String umwandeln und im LL_CMND_EVALUATE
zurückgeben.
So kannst Du LL (auf nicht ganz elegante Weise) trotzdem erweitern,
wenn Du keine der Komponenten verwendest.
Paulchen
“G Marak” <mgampi@ib…> wrote in message
news:327731142008102320@combit.net…
Hallo;
an die Benutzer gezeichneten Objekte hab ich nicht gedacht!!! Ich
war der Meinung, die gelten nur für Variablen und nicht für Felder!
Scheinbar zu restriktiv gedacht.
Den ersten Teil versteh ich, da ich das schon unzählige Male gemacht
habe.
Das mit der Auswahl der Quellwerte versteh ich aber nicht ganz:
Nehmen wir einmal an, der Zellinhalt ist ein Text - konkret ein
Fehlertext - und der Farbbalken zeigt die Häufigkeit des Textes an,
soll da der Anwender den Ursprung des Wertes als Variable auswählen
können; also die Länge des Balkens wird durch eine andere
Feldvariable bestimmt?
Auch das mit der “Funktion” ist mir nicht ganz klar. Ich habe mich
schon immer gefragt, ob man LL12 durch eigene Benutzerfunktionen
erweitern kann, die der Anwender im Designer auswählen kann? Ist das
so etwas? Wie gibt man dann Parameter der Funktionen an (Anzahl und
Art)?
Ich habe jetzt sogar einen Anwendungsfall:
Ich möchte ein Zeitintervall, das dem Bericht in Sekunden übergeben
wird, im Format ddd hh:mm:ss darstellen, wobei fehlende Größen (z.B.
wenn ein Intervall kleiner als eine Stunde ist) nicht darzustellen
sind.
Geht sowas?
Danke im Voraus
Da gibt’s doch viel feinere Methoden dazu…
Definiere eine USEROBJECT-Variable
(LlDefineFieldExt(hJob,“PercentageAsBar”,“50”,LL_DRAWING_USEROBJ));
Wenn der Benutzer jetzt das Feld als Zelleninhalt einfügt, bekommst
Du
zum Malen den Callback LL_CMND_DRAW_USEROBJ, in dem Du malen
kannst,
was Du willst. Für jede Zeile übergibst Du den Wert im
LlDefineFieldEx().
Den Inhalt (darzustellenden Wert) bekommst Du entweder aus Deiner
Variablen selbst (im Callback geliefert über
scLlDrawUserObj._pszContents) oder aus Deinen Dir bekannten Daten
direkt im Programm.
Wenn Du noch dem Benutzer überlassen willst, daß er den Quellwert
auswählen kann,
a) definiere die USER-Variable als Funktion
LlDefineFieldExt(hJob,“Percentage”,“”,LL_DRAWING_USEROBJ_DLG)
b) reagiere auch auf LL_CMND_EDIT_USEROBJ (speichere Daten, z.B.
die
Variable, die Du zum Malen brauchst, in
scLlEditUserObj._pszParameter,
die bekommst Du im Draw-Callback wieder geliefert)
aber so wie oben finde ich es logischer.
Paulchen
“G Marak” <mgampi@ib…> wrote in message
news:8585111200810331@combit.net…
Hallo,
das geht in diesem Fall wirklich nicht, da als Ergebnis eine Art
Pareto-Diagramm in Tabellenform entsehen soll. Ich muss also
entsprechend eines Wertes den Hintergrund einer Spalte nur zum
Teil
mit einer Farbe füllen. Ich habe keine Möglichkeit gefunden, das
im
Designer zu parametrieren (LL12). Wenn der Wert 100 ist, dann
soll
der gesamte Hintergund gefüllt werden, ist er 50, dann nur der
halbe
beginnend vom linken Rand und über die gesamte Höhe der Zelle
(bei
30 nur 30% der Zellbreite, usw.).