PDA

Volledige versie bekijken : TextArea grootte laten aanpassen aan htmlText


Wubinator
%Europe/Berlin %487 %2010, 11:42
Hoi heren,

Tijd geleden dat ik hier was, alles goed?

Ik heb een vraag over htmlText in een textArea. Ik krijg een html text uit een Content Management Systeem van een klant. Deze tekst moet als een banner worden getoond, en dus volledig en zonder scrollbars worden getoond. Daarom wil ik de hoogte van mijn TextArea (gebruik ik om eventuele <a href .. /> links de goede style te geven) aanpassen aan de hand van de grootte die de htmlText heeft.

Ik dacht hiervoor het volgende te gebruiken: measureHTMLText(source).height; Dit geeft wel de hoogte weer van de tekst (bijvoorbeeld 16) maar niet van de text in multiline.

Nou is mijn vraag, hoort measureHTMLText(..).height de hoogte door te geven van teksten in multiline (en is dus het moment waarop ik het opvraag te vroeg, omdat de tekst nog niet over meerdere tekst regels is geplaatst)
Of geeft measureHTMLText(..).height nooit de hoogte van teksten op meerdere regels weer (en hoe kan ik dit dan het beste oppakken?)

Hieronder staat het component waarin ik dit nodig heb:

public class RichTextVisualizer extends TextArea implements IVisualizer
{
public function RichTextVisualizer()
{
super();

this.styleSheet = getTextStyle();
this.verticalScrollPolicy = "off";
}

public function setSource(source:String):void
{
this.htmlText = source;
this.addEventListener(TextEvent.LINK, handleLinkClick);

this.height = measureHTMLText(source).height;
}

public function getDimensions():Array
{
var returnValue:Array = new Array(2);

returnValue[0] = measureHTMLText(this.htmlText).width;
returnValue[1] = measureHTMLText(this.htmlText).height;

return returnValue;;
}

/**
* Let's add a little style to the HTML text and mouse roll-over actions (the url's).
* */
private function getTextStyle():StyleSheet
{
var textStyle:StyleSheet = new StyleSheet();

textStyle.setStyle("a", { color:"#245290", textDecoration:"none" });
textStyle.setStyle("a:link", { textDecoration:"none", color:"#245290" });
textStyle.setStyle("a:hover", { textDecoration:"underline" });

return textStyle;
}

/**
* Handle the click action on links within the html text using TextEvent.
* */
private function handleLinkClick(event:TextEvent):void
{
var prefix:String = event.text;
var split:Array = prefix.split(":");
var type:String = split[0];
var id:String = split[1];

if (split.length > 2)
id = split[1] + ":" + split[2]; // recreate the http link

var request:URLRequest = new URLRequest(id);
navigateToURL(request, "_blank");

return;
}
}

Thanks alvast!
Rick

eugene_se
%Europe/Berlin %809 %2010, 19:25
Hoi heren,


Nou is mijn vraag, hoort measureHTMLText(..).height de hoogte door te geven van teksten in multiline (en is dus het moment waarop ik het opvraag te vroeg, omdat de tekst nog niet over meerdere tekst regels is geplaatst)
Of geeft measureHTMLText(..).height nooit de hoogte van teksten op meerdere regels weer (en hoe kan ik dit dan het beste oppakken?)


Volgens de documentatie over measureHTMLText():

Measures the specified HTML text, which may contain HTML tags such as <font> and <b>, assuming that it is displayed in a single-line UITextField using a UITextFormat determined by the styles of this UIComponent.

Wubinator
%Europe/Berlin %364 %2010, 08:44
Goed dat was ff stom van me :P .... thanks for the info

TheDutch
%Europe/Berlin %512 %2010, 12:17
Je kunt de hoogte van je TextArea op de volgende manier precies gelijkzetten aan de hoogte van de html tekst:


import mx.core.mx_internal;

use namespace mx_internal;

var textField:TextField = textArea.getTextField() as TextField;
textField.autoSize = TextFieldAutoSize.LEFT;

textArea.htmlText = "TextArea <font size='28'>grootte</font><br>laten <b>aanpassen</b><br> aan <font size='28'><i>htmlText</i></font>";
textArea.validateProperties();
textArea.height = textField.height;
Hoop dat het helpt :).