LL_CMND_TABLEFIELD

Hallo;
ich will über Callback und LL_CMND_TABLEFIELD den Inhalt einer Tabellenzelle
selbst einfärben. Wie das geht, habe ich in der Knowledgebase gefunden.
Nun habe ich aber das Problem, dass ich zur Laufzeit nicht weiss, welchen
Index das zu färbende Feld hat. Der Anwender kann ja das Druck-Layout ändern
und Spalten hinzufügen bzw. wegnehmen.
Die Callback-Funktion bietet mir aber nur den Index der Zelle
(Spaltennummer).
Wie komme ich nun auf den Inhalt/die Feldvariable, die in diesem Index
eingetragen wird?

Danke

Garnicht.

Solche Callbacks eigenen sich meiner Meinung nach ohnehin nur für
eigene Designs, denn ein Kunde wundert sich IMMER, wenn er einen
weißen Hintergrund einstellen kann, die Zelle aber trotzdem rot
gefärbt ist.

Besser: übergib die Farbe an den Designer, dann kann der Kunde die
Zuordnung übernehmen, damit er nicht überrascht ist.

Paulchen

“G Marak” <mgampi@ib…> wrote in message
news:490631102008145454@combit.net…

Hallo;
ich will über Callback und LL_CMND_TABLEFIELD den Inhalt einer
Tabellenzelle
selbst einfärben. Wie das geht, habe ich in der Knowledgebase
gefunden.
Nun habe ich aber das Problem, dass ich zur Laufzeit nicht weiss,
welchen
Index das zu färbende Feld hat. Der Anwender kann ja das
Druck-Layout ändern
und Spalten hinzufügen bzw. wegnehmen.
Die Callback-Funktion bietet mir aber nur den Index der Zelle
(Spaltennummer).
Wie komme ich nun auf den Inhalt/die Feldvariable, die in diesem
Index
eingetragen wird?

Danke

Hallo;

leider geht das in meinem Fall nicht. Ich muss in der Tabellenzelle durch
einen Farbbalken Information hinterlegen. Ich hab aber keine Möglichkeit
gefunden, nur einen Teil der Tabellenzelle mit einem Hintergrund zu
versehen. Im Prinzip soll ein Pareto-Diagramm in Form einer Tabelle
entstehen.
Gibt es evtl. eine andere Möglichkeit?

Danke

“Paul Schmidt” paulchen4@hotmail.com schrieb im Newsbeitrag
news:12021110200815401@combit.net…

Garnicht.

Solche Callbacks eigenen sich meiner Meinung nach ohnehin nur für
eigene Designs, denn ein Kunde wundert sich IMMER, wenn er einen
weißen Hintergrund einstellen kann, die Zelle aber trotzdem rot
gefärbt ist.

Besser: übergib die Farbe an den Designer, dann kann der Kunde die
Zuordnung übernehmen, damit er nicht überrascht ist.

Paulchen

“G Marak” <mgampi@ib…> wrote in message
news:490631102008145454@combit.net…

Hallo;
ich will über Callback und LL_CMND_TABLEFIELD den Inhalt einer
Tabellenzelle
selbst einfärben. Wie das geht, habe ich in der Knowledgebase
gefunden.
Nun habe ich aber das Problem, dass ich zur Laufzeit nicht weiss,
welchen
Index das zu färbende Feld hat. Der Anwender kann ja das
Druck-Layout ändern
und Spalten hinzufügen bzw. wegnehmen.
Die Callback-Funktion bietet mir aber nur den Index der Zelle
(Spaltennummer).
Wie komme ich nun auf den Inhalt/die Feldvariable, die in diesem
Index
eingetragen wird?

Danke

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.).

Garnicht.

Solche Callbacks eigenen sich meiner Meinung nach ohnehin nur für
eigene Designs, denn ein Kunde wundert sich IMMER, wenn er einen
weißen Hintergrund einstellen kann, die Zelle aber trotzdem rot
gefärbt ist.

Besser: übergib die Farbe an den Designer, dann kann der Kunde die
Zuordnung übernehmen, damit er nicht überrascht ist.

Paulchen

“G Marak” <mgampi@ib…> wrote in message
news:490631102008145454@combit.net…

Hallo;
ich will über Callback und LL_CMND_TABLEFIELD den Inhalt einer
Tabellenzelle
selbst einfärben. Wie das geht, habe ich in der Knowledgebase
gefunden.
Nun habe ich aber das Problem, dass ich zur Laufzeit nicht weiss,
welchen
Index das zu färbende Feld hat. Der Anwender kann ja das
Druck-Layout ändern
und Spalten hinzufügen bzw. wegnehmen.
Die Callback-Funktion bietet mir aber nur den Index der Zelle
(Spaltennummer).
Wie komme ich nun auf den Inhalt/die Feldvariable, die in diesem
Index
eingetragen wird?

Danke

Da gibt’s doch viel feinere Methoden dazu… :wink:

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.).

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

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.).

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

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

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.).

Ok,
danke ich probier das mal aus…

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

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

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.).