RFC - Feldhintergrund nach Einfärbung wieder transparent schalten
Verfasst: 16.03.2015, 18:47
Liebe Acronauten,
nein, das ist nicht schon wieder eine Frage a la "Ich bin Anfänger und muss bis Montag die Antragsformulare für Obamacare fertig entwickelt haben"...
Sondern einfach mal ein Dankeschön an dieses tolle Forum in Form eines kleinen Wissensbeitrags, von dem ich annehme, dass er bisher nicht zur Sprache gekommen ist.
Mit der Bitte um Kommentare!
Wir haben schon so lange und viele nützliche Hinweise aus dem Acronauten-Forum gezogen, dass es höchste Zeit ist, endlich auch mal etwas zurückfließen zu lassen. Besonders loben und preisen will ich nele_sonntag, Merklin, armine, radzmar und alle hier nicht genannten, die schon so vielen kompetente und wertvolle Hinweise gegeben haben.
Falls Interesse besteht, kann ich in loser Folge weitere "Eingebungen" hier publizieren.
Beste Grüße,
Rolf G. Schall aka supersonic
---------------
Problem:
Sicher beherrschen die meisten von Euch das dynamische Einfärben des Hintergrundes eines Feldes oder Teilformulares.
färbt ein Feld z.B. in sattem Gilb.
Problem: Wie wird man diese Einfärbung wieder los, und zwar so, dass das Feld wieder durchscheinend wird?
färbt das Feld zwar kreideweiß, gibt jedoch nicht mehr den Durchblick auf den Hintergrund frei.
Es nützt nichts, color.value = "" zu setzen - das färbt den Hintergrund einfach schwarz.
Die Ursache:
Einmal zugewiesen, nistet sich das Hintergrund-Element <fill> im XFA-Modell als Unterknotens von <border> dauerhaft ein.
Vorher:
Nach der ersten Zuweisung:
Der Versuch, dem fill-Objekt oder einem Unterknoten einfach das Null-Objekt zuzuweisen, ruft General Error auf den Plan.
Lösung:
Nein - um den alten Zustand wieder herzustellen, müssen wir den Unterknoten <fill> ganz loswerden. Hierfür gibt es erfreulicherweise die
So kann der Befehl z.B. aussehen:
Damit die Änderung sofort wirksam wird, schieben wir noch schnell ein relayout() hinterher:
Als Argument von remove() ist direkt die Referenz auf den fill-Knoten zu übergeben. Bei komplexeren oder mehrfachen Zugriffen bediene man sich der resolveNode-Methode. Hier nur zur Illustration:
Für den Anhang habe ich noch schnell das Beispiel-PDF gezimmert.
Geht das noch besser? Ich freue mich auf Anmerkungen.
nein, das ist nicht schon wieder eine Frage a la "Ich bin Anfänger und muss bis Montag die Antragsformulare für Obamacare fertig entwickelt haben"...
Sondern einfach mal ein Dankeschön an dieses tolle Forum in Form eines kleinen Wissensbeitrags, von dem ich annehme, dass er bisher nicht zur Sprache gekommen ist.
Mit der Bitte um Kommentare!
Wir haben schon so lange und viele nützliche Hinweise aus dem Acronauten-Forum gezogen, dass es höchste Zeit ist, endlich auch mal etwas zurückfließen zu lassen. Besonders loben und preisen will ich nele_sonntag, Merklin, armine, radzmar und alle hier nicht genannten, die schon so vielen kompetente und wertvolle Hinweise gegeben haben.
Falls Interesse besteht, kann ich in loser Folge weitere "Eingebungen" hier publizieren.
Beste Grüße,
Rolf G. Schall aka supersonic
---------------
Problem:
Sicher beherrschen die meisten von Euch das dynamische Einfärben des Hintergrundes eines Feldes oder Teilformulares.
Code: Alles auswählen
...border.fill.color.value = "255, 255, 0"
Problem: Wie wird man diese Einfärbung wieder los, und zwar so, dass das Feld wieder durchscheinend wird?
Code: Alles auswählen
...border.fill.color.value = "255, 255, 255"
Es nützt nichts, color.value = "" zu setzen - das färbt den Hintergrund einfach schwarz.
Die Ursache:
Einmal zugewiesen, nistet sich das Hintergrund-Element <fill> im XFA-Modell als Unterknotens von <border> dauerhaft ein.
Vorher:
Code: Alles auswählen
<subform name="GTFO_BEISPIEL" x="60.325mm" y="60.325mm" w="88.9mm" h="66.675mm">
<border>
<edge/>
</border>
...
</subform>
Code: Alles auswählen
<subform name="GTFO_BEISPIEL" x="60.325mm" y="60.325mm" w="88.9mm" h="66.675mm">
<border>
<edge/>
<fill>
<color value="255,255,0"/>
</fill>
</border>
...
</subform>
Lösung:
Nein - um den alten Zustand wieder herzustellen, müssen wir den Unterknoten <fill> ganz loswerden. Hierfür gibt es erfreulicherweise die
-Methode, die auf die Menge nodes der Unterknoten angewandt werden muss.remove()
So kann der Befehl z.B. aussehen:
Code: Alles auswählen
this.border.nodes.remove(this.border.fill);
Code: Alles auswählen
xfa.layout.relayout()
Als Argument von remove() ist direkt die Referenz auf den fill-Knoten zu übergeben. Bei komplexeren oder mehrfachen Zugriffen bediene man sich der resolveNode-Methode. Hier nur zur Illustration:
Code: Alles auswählen
GTFO_BEISPIEL.border.nodes.remove(GTFO_BEISPIEL.border.resolveNode("fill"));
Geht das noch besser? Ich freue mich auf Anmerkungen.