Seite 1 von 1

Dynamische Textfelder - komische verschiebung

Verfasst: 11.11.2014, 10:32
von Niocron
Hey Community,
ich versuche momentan bei einem Textfeld nur den Wert zu formatieren (kursiv,grau,vAlign) um ein Textfeld bauen zu können, dass ursprünglich einen kleinen Infotext beinhaltet, der nach Eintritt ins Feld überschrieben wird und die Formatierung wieder auf schwarz,nicht kursiv zurückgeht.

So nun zu meinen 2 Fragen:
1. kann ich nur den wert formatieren? tfe.font.fill.color.value überschreibt (manchmal?!) auf die formatierung von der caption

2. ich hab mal einen versuch geschrieben...jedoch wird beim enter event die beschriftung ganz leicht nach oben versetzt...weiß wer warum ?!?

zu 2. hab ich jetzt nach einzelnen durchgehen der formatierungselemente gemerkt, dass dieses leichte verschieben durch die änderung der schriftgröße
xfa.resolveNode(node).font.size = "7pt";
hervorgerufen wird, obwohl die schriftgröße der beschriftung natürlich gleich bleibt

im anhang ein testdokument

danke im vorraus

niocron ;)

Dynamische Textfelder - komische verschiebung

Verfasst: 11.11.2014, 20:51
von radzmar
Für dein Vorhaben gibt es bereits eine schöne Lösung.
Schaum mal hier: http://adobelivecycledesignercookbookby ... ay-of.html

Dynamische Textfelder - komische verschiebung

Verfasst: 12.11.2014, 09:28
von Niocron
hey danke für die antwort.
bin mir nur nich ganz sicher ob ich damit jetzt besser fahre, da meine lösung zentral angesteuert wird....und um einiges schneller implementierbar ist. und ich brauch das bei jedem 3. textfeld etwa^^

außerdem ist bei dieser lösung das problem mit der beschriftung auch nicht gelöst, die textfelder haben nur einfach keine beschriftung^^ so kann mans natürlich auch machen

deßhalb meine frage:
welchen vorteil bringt es des ghosttext mit dieser nullpictureclausel umzusetzen anstatt einfach den text reinzuschreiben?

Dynamische Textfelder - komische verschiebung

Verfasst: 12.11.2014, 20:24
von radzmar
Das Anzeigemuster für null-Werte belegt keinen Platz im Data DOM, was bedeutet, dass man den Hinweistext nicht unnötigerweise mit den Formulardaten exportiert.
Bei vielen Feldern und unterschiedlich langen Hinweisen, hätte das sonst schon ein paar KB mehr zur Folge.
Un wenn die Daten anderswo weiterverarbeitet werden, muss sich niemand mit überflüssigen Werten rumplagen.

Du kannst natürlich auch bei deiner Lösung bleiben.
Diese kannst Du aber auch auf eine einzige Funktion eindampfen.
Auf die resolveNode()-Methode solltest Du verzichten, denn die ist relativ langsam und kann in umfangreichen Formularen eine gefühlte Ewigkeit brauchen.
Wenn Die eine Funktion aufrufst, kannst du das Objekt aus dem heraus Du die Funktion ausführt mit this an die Funktion übergeben.
Dadurch kannst Du innerhalb der Funktion z.B. die Nodes des Objekts direkt ansprechen und brauchst resolveNode() gar nicht erst!

Dynamische Textfelder - komische verschiebung

Verfasst: 13.11.2014, 10:33
von Niocron
okay ich muss zugeben deine variante ist weitaus hübscher *schäm*

wobei ich nicht verstehe was du mit

Code: Alles auswählen

function setTextStyle (vNode) {
	var dummyText = "Dieses Feld expandiert nach Verlassen automatisch.",
		vFont = vNode.font,
		vCap = vNode.caption;
		
	if (vNode.isNull) {
		vNode.rawValue = dummyText;
		vFont.fill.color.value = "153,153,153";
		vFont.posture="italic";
		vFont.size = "5pt";
	} else {
		if (vNode.rawValue === dummyText) {
			vNode.rawValue = null;
		} else {
			//vNode.rawValue = vNode.rawValue;
		}
		vFont.fill.color.value = "0,0,0";
		vFont.posture = "normal";
		vFont.size = "7pt";
	}
	vCap.font.fill.color.value = "0,0,0";
	//vCap.font.fill.color.value = "top";
}
den 2 von mir auskommentierten zeilen erreichen willst?
den rest übernehm ich aber liebend gerne...danke dafür ;)

Dynamische Textfelder - komische verschiebung

Verfasst: 15.11.2014, 13:40
von radzmar
Hmmm, da hab ich wohl die falsche, unfertige PDF hochgeladen.

Code: Alles auswählen

function setTextStyle (vNode) {
	var dummyText = "Dieses Feld expandiert nach Verlassen automatisch.",
		vFont = vNode.font,
		vCap = vNode.caption;		
	if (vNode.isNull) {
		vNode.rawValue = dummyText;
		vFont.fill.color.value = "153,153,153";
		vFont.posture="italic";
		vFont.size = "5pt";
	} else {
		if (vNode.rawValue === dummyText) {
			vNode.rawValue = null;
		}
		vFont.fill.color.value = "0,0,0";
		vFont.posture = "normal";
		vFont.size = "7pt";
	}
	vCap.font.fill.color.value = "0,0,0";
}