Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   TextField & asfunction (http://www.flasher.ru/forum/showthread.php?t=92913)

_serge_ 09.03.2007 19:49

TextField & asfunction
 
Суть проблемы: создается динамическое текстовое поле (html) туда заносится текст с сылками. При нажатии на ссылку изменяется содержимое текстового поля, НО при этом весь новый текст(вместе со своим форматированием) становится этой же ссылкой? В случае, если создать поле во Flash такого не наблюдается.


Примерный код:
Код:

var txt:TextField = this.createTextField("txt", 2, 10, 10, 200, 200);

with (txt) {
    background = true; backgroundColor= "0xCCCCCC";
    multiline = true; selectable = true;
    autoSize = false; wordWrap = true;
    textColor = 0x000000; html = true;
    txt.htmlText = "pretext <a href='asfunction:my'>link</a>";
}


function my() {
        txt.htmlText = "<p>new text</p>";
}


etc 09.03.2007 20:05

Забавная штука. На перевод строки не реагирует.
Причем ссылку просто так не убить.
Только если выключить html. Ну или:

Код:

var txt:TextField = this.createTextField("txt", 2, 10, 10, 200, 200);
with (txt) {
        background = true;
        backgroundColor = 0xCCCCCC;
        multiline = true;
        selectable = true;
        autoSize = false;
        wordWrap = true;
        textColor = 0x000000;
        html = true;
        htmlText = "pretext <a href='asfunction:my'>link</a>\n\n";
}
function my() {
        var f = new TextFormat();
        f.url = '';
        txt.setNewTextFormat(f);
        txt.htmlText = '<p>new text</p>';
}

Вот результат ковыряний.

_serge_ 09.03.2007 20:17

Если добавить css для ссылок, можно увидеть, что вставляемый текст форматируется соответствующим образом(даже если отключить html). Причем trace htmlText, TF.length показывают все правильно(((

iNils 09.03.2007 20:17

Забавный случай, причем url всегда неопределен у текст формата.

etc 09.03.2007 20:18

Я думаю, это связано с тем, что htmlText и TextFormat завязаны друг с другом. Можно считать это багом.

_serge_ 09.03.2007 20:34

Попробовал вроде бы все возможные манипуляции с TextFormat, styleSheet, результат отрицательный.

etc 09.03.2007 20:35

Я написал выше код, который убивает ссылку.

_serge_ 09.03.2007 20:44

Цитата:

Сообщение от __etc
Я написал выше код, который убивает ссылку.

Вопрос, а как убить общее форматирование ссылки при использовании styleSheet?

etc 09.03.2007 20:59

Мммммм.

Код:

var txt:TextField = this.createTextField("txt", 2, 10, 10, 200, 200);
s = new TextField.StyleSheet();
s.parseCSS('a:link {color:#FF0000}');
with (txt) {
        background = true;
        backgroundColor = 0xCCCCCC;
        multiline = true;
        selectable = true;
        autoSize = false;
        wordWrap = true;
        textColor = 0x000000;
        html = true;
        styleSheet = s;
        htmlText = "pretext <a href='asfunction:my'>link</a>\n\n";
       
}
function my() {
        var f = new TextFormat();
        f.url = '';
        f.color = 0;
        txt.styleSheet = null;
        txt.setNewTextFormat(f);
        txt.htmlText = '<p>new text</p>';
}

Жесть полная. С убийством стилей. Но работает.

_serge_ 09.03.2007 21:19

Да, все это конечно здорово. Только проблема в том, что новый текст также может содержать html-форматирование, соответственно оно будет убито...

iNils 09.03.2007 21:22

Удалить поле и создать новое.

etc 09.03.2007 21:25

Уверен?
Код:

var txt:TextField = this.createTextField("txt", 2, 10, 10, 200, 200);
s = new TextField.StyleSheet();
s.parseCSS('a:link {color:#FF0000}');
with (txt) {
        background = true;
        backgroundColor = 0xCCCCCC;
        multiline = true;
        selectable = true;
        autoSize = false;
        wordWrap = true;
        textColor = 0x000000;
        html = true;
        styleSheet = s;
        htmlText = "pretext <a href='asfunction:my'>link</a>\n\n";
}
function my() {
        var f = new TextFormat();
        f.url = '';
        f.color = 0;
        txt.styleSheet = null;
        txt.setNewTextFormat(f);
        txt.styleSheet = s;
        txt.htmlText = 'new text <a href="#">test</a>';
}

А вообще забавно, если последние две строки в функции поменять местами, то новый htmlText не будет присваиваться. Косяк на косяке багом погоняет :D
А вообще да, проще поле снести к черту.

flash33 10.03.2007 00:46

псевдопротокол asfunction "заточен" под взаимодействие с браузером, вписывание его в тег <a> есть не что иное, как вызов функции getURL. Если вы посмотрите свои глючные примеры в Publish Preview -> HTML, то всё встает на места :)

iNils 10.03.2007 01:06

Причем тут getURL и что я должен увидеть в Publish Preview -> HTML?

etc 10.03.2007 02:25

flash33, ты тему вообще читал, а?

Kinsler 10.03.2007 03:09

Код:

var txt:TextField = this.createTextField("txt", 2, 10, 10, 200, 200);

with (txt) {
    background = true; backgroundColor= "0xCCCCCC";
    multiline = true; selectable = true;
    autoSize = false; wordWrap = true;
    textColor = 0x000000; html = true;
    txt.htmlText = "pretext <a href='asfunction:my'>link</a>";
}


function my() {
        sd="my_text";
        txt.htmlText = "<b>new text</b>" + sd;
}

мда даже не знал....
после повторного нажатия текст жирным становитца....

etc 10.03.2007 03:11

Я уже накатал маляву об этом в блоге:
http://dev.etcs.ru/blog/shit/textfie...sheet_wonders/
Честно говоря, никогда не сталкивался с подобным (не было необходимости замены текста ни разу).

Kinsler 10.03.2007 03:16

мда, чудновато, тоже не сталкивался
на адобе ничего особо не сказно
http://www.adobe.com/support/flash/a...ionary073.html

kruasan 10.03.2007 14:15

Убрал "var txt:TextField = ":
Код:

this.createTextField("txt", 2, 10, 10, 200, 200);

with (txt) {
  background = true; backgroundColor= 0xCCCCCC;
    multiline = true; selectable = true;
    autoSize = false; wordWrap = true;
    textColor = 0x000000; html = true;
    htmlText = "pretext <a href='asfunction:my'>link</a>";
}


function my() {
        txt.htmlText = "<p>new text</p>";
}

Опубликовал под 7-й плеер.
Баг отсутствует.

etc 10.03.2007 14:23

Ну значит это проблемы восьмерки.

iNils 10.03.2007 16:22

Тогда уж и 9-ки

etc 10.03.2007 16:33

Возможно, но в девятке не смотрел.

Molecula 21.05.2007 15:53

В 9-ке такой же глюк...сейчас копаюсь с этим.

etc 21.05.2007 16:07

Паблиш, надеюсь, в FP9/AS3?

Molecula 21.05.2007 16:24

Блин! Вечный мой баг - торопливость.
"Не говори 'гоп' пока не перепрыгнешь!"
Работает, ошибка была своя.

iNils 21.05.2007 17:40

Проблема возникала из-за того, что фокус клавиатуры попадал прямо на ссылку. Добавление одной строчки когда все решало.
Код:

var txt:TextField = this.createTextField ("txt", 2, 10, 10, 100, 100);
txt.html = true;
s = new TextField.StyleSheet ();
s.parseCSS ('a {color:#FF0000}');
txt.styleSheet = s;
txt.htmlText = "pretext <a href='asfunction:my'>link</a>\n\n";
function my () {
        Selection.setSelection (0, 0);
        txt.htmlText = 'new text <a href="asfunction:my1">test</a>';
}
function my1 () {
        txt.htmlText = 'new text 333<a href="">test</a>';
}


Kikasso 21.05.2007 19:06

Странно, что ссылка постирается аж до низа текстового поля (если нет другого текста внизу).
iNils, круто.

iNils 21.05.2007 20:21

Со стилями много проблем. Вот еще одна.
вот еще баг
1. сделайте клип в библиотеки с линком lib (квадарт размером 60 на 60)
2. вставьте код, запустите и наведите мышку на оранжевый текст, строка ниже сдвигается на ширину клипа из библиотеки.
3. потом последовательно раскомментарьте строки, сначала одну потом другую, это как с этим бороться. то есть либо отказать от <br> перед картинкой либо после каждой ссылки делать невидимую пустую строку

Код:

import TextField.StyleSheet;
var css:String = "A {color: #FF4E00;} A:HOVER {color: #0000FF;}";
var style:StyleSheet = new StyleSheet ();
style.parseCSS (css);
var xml:XML = new XML ("<![CDATA[<a href='123'>macromedia</a><br/>macromedia<br/>macromedia<br/><img src='lib'></img>]]>")
//var xml:XML = new XML ("<![CDATA[<a href='123'>macromedia</a><br/>macromedia<br/>macromedia<img src='lib'></img>]]>")
//var xml:XML = new XML ("<![CDATA[<a href='123'>macromedia</a><br/><textformat leading='-17'><br/></textformat>macromedia<br/>macromedia<br/><img src='lib'></img>]]>")
xml.ignoreWhite = true
var txt:TextField = this.createTextField ("txt", 0, 10, 10, 200, 200);
txt.html = true;
txt.multiline = true;
txt.wordWrap = true;
txt.styleSheet = style;
txt.border = true
txt.htmlText = xml.firstChild.nodeValue


Kikasso 21.05.2007 20:45

Да, прикольно. Я помню еще джипеги любят обрезаться по границе текстового поля, и приходится css пересаживать. Глюков больше, чем пользы.

iNils 21.05.2007 20:49

Обрезаться или под маску залезать?

Kikasso 21.05.2007 21:10

Именно обрезаться. То есть текстовое поле невысокое, высота текста больше. Все картинки не влезающие в поле обрезаются по границе поля, а те что не видны - вообще не показываются. Или это было когда я размер поля менял, счас не помню точно - нет под рукой этой проблемы. После повторного указания css все становилось норм.

iNils 21.05.2007 21:19

Картинки в текстфилде не обрезаются, а попападют под маску - которая есть обычный мувиклип. То есть ее можно двигать, вращать или менять размеры. Но это хак. )

Kikasso 21.05.2007 21:30

Попытался повторить глюк, не получилось, поймал другой. Картинка не режется, но почему-то поле считает, что его _height это textHeight. Ничего не понимаю.
Код:

var myX:XML = new XML;
        var txt:TextField = createTextField( "txt", 1, 0,0,300,100);
        txt.multiline = true;
        txt.html = true;
        txt.selectable = true;
        txt.border = true;
myX.onLoad = function ( ok ){
        if(ok && this.status == 0)        txt.htmlText = this.firstChild;       
        else txt.text =  "не ok " + this.status;       
}

b1.onPress = function(){
        var path = 'test.xml';
    myX.load( path );       
}
b2.onPress = b2.onRelease = function(){
        txt._height -= 1;
        txt.scroll++;
}
b3.onPress = b3.onRelease = function(){
        txt._height += 1;
        txt.scroll--;
}

xml:
Код:

<xml>text<img src='test.png' /><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>text</xml>
Стоит убрать картинку, все ок.

Если просто писать txt._height = 100 все нормально, а getter явно не то выдает.


Часовой пояс GMT +4, время: 21:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.