PDA

Просмотр полной версии : TextArea, htmlText, css и два Embed шрифта


Nemo_c
29.04.2008, 19:52
Встала такая задача.
В компонент TextArea нужно загрузить и отобразить текст из хтмл который будет конфигурироваться css файлом, а текст отображается двумя - тремя Embed шрифтами.
В нете нарыл инфу (http://baron.su/archives/126-Novye_HTML_tjegi_vo_Flash__Flex_pri_pomowi_stilej_CSS.html) поэтому поводу.

так же существует платный компонент (http://drumbeatinsight.com/)который решает эту задачу но у него не приемлемая стоимость.

вот код который по логике(моей) должен работать но не работает :-(
подскажите где я накосячил и как можно лучше решить задачу?

<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" initialize="init()" xmlns:ns1="visual.gui.*" xmlns:containers="flexlib.containers.*" xmlns:battlefield="visual.gui.battlefield.*">
<mx:Script>
<![CDATA[

private var h1Style: String = "h1 {font-family: regularFont; font-size: 120; font-weight: bold; text-align: center; letter-spacing: 20px; }\n";
private var blockquoteStyle: String = "blockquote {font-style: italic; margin-left: 20px; }\n";

[Embed("MTCORSVA.TTF",
fontName="regularFont",
mimeType="application/x-font")]
private var font1:Class;

private function cc(e: Event): void {
textArea.htmlText = "<h1>Заголовок</h1>\n<blockquote>Цитата ДлиннаяЦитата ОченьДлиннаяЦитата ОченьПреоченьДлиннаяЦитата ОченьПреоченьСверхдлиннаяЦитата ОченьОченьПреоченьСверхдлиннаяЦитата ОченьОченьПреоченьСверхдлиннаяЦитата - это всего лишь Цитата ДлиннаяЦитата ОченьДлиннаяЦитата ОченьПреоченьДлиннаяЦитата ОченьПреоченьСверхдлиннаяЦитата ОченьОченьПреоченьСверхдлиннаяЦитата ОченьОченьПреоченьСверхдлиннаяЦитата</blockquote>";
}
private function b1click(e: Event): void {
// Создаем новый StyleSheet
var styleSheet: StyleSheet = new StyleSheet();

// Парсим наши стили (можно использовать и загружаемые через URLLoader
// CSS файлы.
styleSheet.parseCSS(h1Style + blockquoteStyle);

// Назначаем stylesheet нашей TextArea
textArea.styleSheet = styleSheet;
}
private function b2click(e: Event): void {
// Создаем новый StyleSheet
var styleSheet: StyleSheet = new StyleSheet();

// Задаем стиль для заголовка H1
var h1StyleObject: Object = {fontFamily: "regularFont", fontSize: 120, fontWeight: "bold", textAlign: "center", letterSpacing: "20px" };

// Задаем стиль для blockquote (синтаксис другой, но смысл тот же)
var blockquoteStyleObject: Object = new Object();
blockquoteStyleObject.fontStyle = FontStyle.ITALIC;
blockquoteStyleObject.marginLeft = '20px';



// Записываем стили в stylesheet
styleSheet.setStyle("h1", h1StyleObject);
styleSheet.setStyle("blockquote", blockquoteStyleObject);

// Назначаем stylesheet нашей TextArea
textArea.styleSheet = styleSheet;
}

]]>
</mx:Script>
<mx:Panel title="Кнопочки" width="100%" layout="horizontal">
<mx:Button id="b1" click="b1click(event)" label="Button 1" width="50%"/>
<mx:Button id="b2" click="b2click(event)" label="Button 2" width="50%"/>
</mx:Panel>
<mx:TextArea id="textArea" creationComplete="cc(event)" width="100%" height="100%"/>
</mx:Application>

BaRoN!
13.05.2008, 20:13
Очень сильно подозреваю, что не хватает:
Font.registerFont(font1);
Если не помогло, то посмотреть
Font.enumerateFonts(false);
И подставить в стили такое имя шрифта, какое указано там в объекте Font.

К сожалению, ничего не получается с таблицами при таком подходе :-(. Хотя где-то видел подешевле компонент, в районе 50-100$. Если цена подходящая - стукнитесь в аську/приват, найду ссылку.