PDA

Просмотр полной версии : зачеркнутый текст


Evger
21.10.2007, 13:03
есть флешка в которую передается html.
нужно чтобы слово было зачеркнутым. тег strike не помогает

как можно такое сделать?

iNils
21.10.2007, 13:16
Самое простое, это найти зачеркнутый шрифт. Дальше идут сложные решения с программингом и они не касаются самого текста. Вы к ним готовы?

Evger
21.10.2007, 13:23
готов :-)
они сводятся к определению координат слова и рисованию линии?

iNils
21.10.2007, 15:24
Простой вариант из сложных :) Простой, потому что не учитывает вариант с разной высотой букв и выводит линию на одной высоте (в примере -6). Если этого достаточно, то гуд, если же будут разные высоты, попробуем придумать более сложный вариант.
Для корректной работы примера нужно создать текстовое поле с вшитым шрифтом Times New Roman.
import flash.display.BitmapData;
function strike (mc:MovieClip, str:String):Void {
var txt:TextField = mc.txt;
var stru:String = str.split ("<u>").join ("");
stru = stru.split ("</u>").join ("");
stru = stru.split ("strike>").join ("u>");
txt.htmlText = stru;
txt.antiAliasType = "advanced";
var bmp:BitmapData = new BitmapData (txt._width, txt._height, true, 0x0);
bmp.draw (txt);
mc.attachBitmap (bmp, 1);
bmp.scroll (0, -6);
txt.antiAliasType = "normal";
txt.htmlText = str;
}
function createText (name:String, x:Number, y:Number):MovieClip {
var mc:MovieClip = this.createEmptyMovieClip (name, this.getNextHighestDepth ());
mc._x = x;
mc._y = y;
var txt:TextField = mc.createTextField ("txt", 0, 0, 0, 350, 200);
var fmt:TextFormat = txt.getTextFormat ();
fmt.size = 20;
txt.setNewTextFormat (fmt);
txt.embedFonts = true;
txt.html = true;
txt.wordWrap = true;
txt.multiline = true;
return mc;
}
var str:String = "Пример <strike>зачеркнутого</strike> текста. <u>Пример</u> <strike>зачеркнутого</strike> текста. Пример <strike>зачеркнутого</strike> текста.";
var mc1:MovieClip = createText ("mc1", 50, 50);
mc1.txt.htmlText = "Не работает:<br>" + str;
////
var mc2:MovieClip = createText ("mc2", 50, 300);
strike (mc2, "Работает:<br>" + str);

Evger
21.10.2007, 16:48
спасибо, по поводу высоты - все устраивает, т.к текс в одну строчку.
шрифт другой, но думаю я разберусь.

еще раз спасибо.

Kikasso
21.10.2007, 17:30
Положи поле со шрифтом, и заграбь TextFormat с него.
Фокус в txt.antiAliasType - при таком сглаживании в битмапу только черточки прорисовываются.
Хороший, кстати, фокус.

Evger
21.10.2007, 17:43
а почему только Times New Roman?
В коде это явно не указано. А шрифт который используется Microsoft Sans Serif или Arial (они похожи).

Можно как то для них сделать?

etc
21.10.2007, 18:10
Можно, просто надо формат соответствующий указать. Таймс — по дефолту.

incoob
19.06.2008, 13:37
Попробовал перевести на as3 - вот что в итоге вышло:

public class Example extends Sprite {
public function strike(mc:MovieClip, str:String) {
var txt = mc.getChildByName("txt");
var stru:String = str.split ("<u>").join ("");
stru = stru.split ("</u>").join ("");
stru = stru.split ("strike>").join ("u>");
txt.htmlText = stru;
txt.antiAliasType = "advanced";
var bmp:BitmapData = new BitmapData (txt.width, txt.height, true, 0x0);
bmp.draw(txt);
bmp.scroll(0, -6);
mc.addChild(new Bitmap(bmp));
txt.antiAliasType = "normal";
txt.htmlText = str;
}
public function createText(x:Number, y:Number){
var mc:MovieClip = new MovieClip()
mc.x = x;
mc.y = y;
var txt:TextField = new TextField()
txt.width = 350
txt.height = 200
txt.name = "txt"
txt.wordWrap = true;
txt.multiline = true;
//txt.embedFonts = true;

var fmt:TextFormat = txt.getTextFormat()
fmt.size = 20
txt.defaultTextFormat = fmt
mc.addChild(txt)
return mc;
}
public function ButtonExample() {
var str:String = "Пример <strike>зачеркнутого</strike> текста. <u>Пример</u> <strike>зачеркнутого</strike> текста. Пример <strike>зачеркнутого</strike> текста.";
var mc1:MovieClip = createText (50, 50);
var target = mc1.getChildByName("txt")
target.htmlText = "Не работает:<br>" + str;
addChild(mc1)

var mc2:MovieClip = createText (50, 300);
strike(mc2, "Работает:<br>" + str);
addChild(mc2)
}
}

Проблема в том, что зачеркнутый текст рисуется неправильно(текст рисуется дважды). В принципе понимаю что где-то надо указать embedFonts = true, но либо текст не рисуется, либо смазывается(как сейчас), либо же рисуется просто подчеркивание.