Форум 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.autoSize в Flash 8 отсекает последнюю строку. (http://www.flasher.ru/forum/showthread.php?t=86232)

ffffff 10.10.2006 19:08

Textfield.autoSize в Flash 8 отсекает последнюю строку.
 
Аттчу клип в котором есть текстовое поле. Выставляю у текстового поля autoSize = true, далее пишу в него текст, но у текста пропадает последняя строка. Не подскажите в чём может быть дело и как эту проблему решить.

iNils 10.10.2006 19:10

Пример?

ffffff 10.10.2006 19:17

Код:

this.target.items.attachMovie(ex_name, name_item, this.target.items.getNextHighestDepth(), {_y: y_pos});
this.target.items[name_item].onRelease = DelegateExt.create(this, select_item, i);
                       
this.target.items[name_item].text_mc.itext.autoSize = true;
this.target.items[name_item].text_mc.itext.text = this.items[i].name;

Текстовое поле уже есть в муви клипе.

etc 10.10.2006 19:24

Код ничего не говорит.
Приведи пример текста, пример TextFormat и параметров TextField, при которых возникает данный косяк.

ffffff 10.10.2006 19:40

Да я впринципе и думал что он ничего не скажет.
Начал копаться в опцях текстового поля. Это происходит из-за отрицательного значения Line Spacing
А задумка такова, что он обязательно должен быть отрицательным.

вот часть из дебага.
Код:

    thickness = 0,
    variable = "txt",
    restrict = ,
    antiAliasType = "normal",
    selectable = false, background = false, sharpness = 0, length = 10,
    maxhscroll = 0,
    text = "Что-то ещё",
    styleSheet = , borderColor = 0, textWidth = 59, scroll = 1,
    bottomScroll = 1, wordWrap = true, maxChars = , hscroll = 0,
    filters = ] [], html = false,
    gridFitType = "pixel",
    tabIndex = ,
    htmlText = "Что-то ещё",
    type = "dynamic",
    textHeight = 13,
    autoSize = "left",
    border = false, password = false, maxscroll = 1, embedFonts = true,
    textColor = 10921638, backgroundColor = 16777215, condenseWhite = false, multiline = true,
    mouseWheelEnabled = true


silin 10.10.2006 21:01

>>Да я впринципе и думал что он ничего не скажет.

если ты полагаешь, что эта 'часть из дебага' о чем-то говорит, то увы..
как вариант: добавляй к тесту "\n" и пусть его пропадает..

ffffff 10.10.2006 23:28

\n я по некоторым причинам добавлять не хочу. Вообще странный глюк.

iNils 10.10.2006 23:32

Я бы не назвал это глюком.

Dendroid 11.10.2006 04:54

Это не совсем баг, просто autosize работает очень тупо:
высота поля = (высота строки + межстрочный отступ)*(количество строк)
Поэтому даже при положительном line space высота будет подсчитываться не совсем корректно, она будет больше на межстрочное расстояние (включите бордер у поля, чтобы убедиться). Это заметно, если надо точно позиционировать поля, но никто не жалуется, т.к. все строки на месте. А вот если расстояние между строками отрицательное - получаем высоту поля меньшую ровно на это самое межстрочное расстояние, а ведь рендерер текста выводит только полностью вместившиеся строки. По идее-то правильная формула была бы: высота поля = (высота строки)*(количество строк)+(межстрочный отступ)*(количество строк-1).
Ну так сами и доведём до этой формулы:
Код:

_txt.autoSize = "left";
_txt.text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc fermentum. Praesent nonummy libero a ligula. Praesent tempor euismod ante. Nulla magna neque, fermentum et, laoreet sed, fringilla id, libero. Nunc gravida malesuada nibh. Nunc ut odio. In hac habitasse platea dictumst.";
var realHeight = _txt._height-_txt.getTextFormat().leading;
_txt.autoSize = "none";
_txt._height = realHeight;

Этот код отлично у меня работает уже в нескольких компонентах :)


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

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