Форум 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 (http://www.flasher.ru/forum/showthread.php?t=97958)

Friday13 05.07.2007 10:12

Какой именно??
http://www.friday13.pisem.net/
у всех прямоугольников верхняя левая точка это TextField[_x, _y]
Зеленый прямоугольник - TextField.getTextFormat().getTextExtent(TextField.text)[width, height]
Красный прямоугольник TextField[_width, _height]
Синий прямоугольник TextField[textWidth, textHeight]

iNils 05.07.2007 10:30

Цитата:

Сообщение от Friday13
Какой именно??

вот этот http://www.flasher.ru/forum/showpost...6&postcount=26
битмапа используется не для того, чтобы передать саму картинку, а чтобы определить истинные размеры

Friday13 05.07.2007 10:37

ага... вроде получилось, как выложить пример для будущих поколений???

iNils 05.07.2007 10:40

Код киньте :) Аттачи временно не работают.

Friday13 05.07.2007 10:41

Блин.. на ChinaCyr код работает, для Dollar глючит:(((

в Stage нужно создать текстовое поле, обозвать z, внедрить нужные фонты, написать что нибудь в нем, конвертнуть в символ MovieClip и обозвать тоже z

Код:

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
trace(getTimer());
z.z.autoSize = "left";
var myBitmapData:BitmapData = new BitmapData(z._width * 1.3, z._height * 1.3, false, 0x00000000);
var mc_1:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth());
mc_1._x = 10;
mc_1._y = 10;
z.autoSize = "left";
var myMatrix:Matrix = new Matrix();
myMatrix.ty = z._width * 0.15;
myMatrix.ty = z._height * 0.15;
myMatrix.scale(z._xscale / 100, z._yscale / 100);
mc.onMouseDown = function() {
        var alpha:String = (myBitmapData.getPixel32(this._xmouse, this._ymouse) >> 24 & 0xFF).toString(16);
        trace(">> alpha: " + alpha);
        // ff
        var red:String = (myBitmapData.getPixel32(this._xmouse, this._ymouse) >> 16 & 0xFF).toString(16);
        trace(">> red: " + red);
        // aa
        var green:String = (myBitmapData.getPixel32(this._xmouse, this._ymouse) >> 8 & 0xFF).toString(16);
        trace(">> green: " + green);
        // cc
        var blue:String = (myBitmapData.getPixel32(this._xmouse, this._ymouse) & 0xFF).toString(16);
        trace(">> blue: " + blue);
        // ee
        trace("0x" + alpha + red + green + blue);
        // 0xffaaccee
};
var myColorTransform:ColorTransform = new ColorTransform(0, 0, 1, 1, 0, 0, 255, 0);
var blendMode:String = "normal";
var myRectangle:Rectangle = new Rectangle(0, 0, z._width * 1.3, z._height * 1.3);
var smooth:Boolean = false;
myBitmapData.draw(z, myMatrix, myColorTransform, blendMode, myRectangle, smooth);
var colorBoundsRect:Rectangle = myBitmapData.getColorBoundsRect(0xff0000FF, 0xFF000000, false);
trace(colorBoundsRect);
var my = this.createEmptyMovieClip("my", this.getNextHighestDepth());
my._x = colorBoundsRect.x + 10;
my._y = colorBoundsRect.y + 10;
my.lineStyle(0.25, 0xffffff);
my.lineTo(colorBoundsRect.width, 0);
my.lineTo(colorBoundsRect.width, colorBoundsRect.height);
my.lineTo(0, colorBoundsRect.height);
my.lineTo(0, 0);
trace(getTimer());

ПАЛУЧИЛАСЬ!

Всем спасибо:)

iNils 05.07.2007 11:41

Не надо создавать несколько сообщений подряд, надо исправить последнее в теме.

Что-то код слишком громоздкий. Мой вариант:
Код:

function getSize (txt:TextField):Object {
        var bmp:BitmapData = new BitmapData (Math.ceil (txt._width), Math.ceil (txt._height), true, 0x00);
        var bmpW:BitmapData = new BitmapData (1, bmp.height, true, 0x00);
        var bmpH:BitmapData = new BitmapData (bmp.width, 1, true, 0x00);
        bmp.draw (txt);
        var offsetW:Number = 0;
        var offsetH:Number = 0;
        var i:Number = bmp.width;
        while (i > 0 && !bmp.hitTest (new Point (0, 0), 1, bmpW, new Point (i, 0), 0)) {
                i--;
        }
        offsetW = i;
        i = 0;
        while (i < bmp.width && !bmp.hitTest (new Point (0, 0), 1, bmpW, new Point (i, 0), 0)) {
                i++;
        }
        offsetW -= i - 2;
        ////
        i = bmp.height;
        while (i > 0 && !bmp.hitTest (new Point (0, 0), 1, bmpH, new Point (0, i), 0)) {
                i--;
        }
        offsetH = i;
        i = 0;
        while (i < bmp.height && !bmp.hitTest (new Point (0, 0), 1, bmpH, new Point (0, i), 0)) {
                i++;
        }
        offsetH -= i - 2;
        return {w:offsetW, h:offsetH};
}
var o:Object = getSize (txt);
trace (o.w + " " + o.h);


Friday13 05.07.2007 12:04

А координаты текстового поля? верхнего левого пикселя?

У меня в коде много мусора:) Вспомогательного, я не почистил, на радостях бросил все что было в фрейме.

silin 05.07.2007 12:06

можно еще так попробовать
Код:

function getSize (txt:TextField):Object {
        var bmp:BitmapData = new BitmapData (Math.ceil (txt._width), Math.ceil (txt._height), true, 0);
        bmp.draw (txt);
        var rec:Rectangle=bmp.getColorBoundsRect(0xFF000000, 0x00000000,false);
        return {w:rec.width, h:rec.height};
}

если надо с координатами TL угла
Код:

function getSize (txt:TextField):Rectangle {
        var bmp:BitmapData = new BitmapData (Math.ceil (txt._width), Math.ceil (txt._height), true, 0);
        bmp.draw (txt);
        return bmp.getColorBoundsRect(0xFF000000, 0x00000000,false);
}


iNils 05.07.2007 12:21

Еще лучше :) Но у меня получилось, что к ширине и высоте надо по пикселю добавлять.

Friday13 05.07.2007 12:22

Цитата:

Сообщение от silin
bmp.draw (txt);

гы... чего то отказался метод draw рисовать объект TextField


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

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