Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   Создание тесктового поля из класса (http://www.flasher.ru/forum/showthread.php?t=64236)

Manowar1 27.10.2004 13:02

Создание тесктового поля из класса
 
Вообщем нужно мне сделать ползунок и им из линейки значений выбирать значение. Делаю его с помощью класса.
Вернее у меня есть мувиклип, к которому привязан класс описывающий его логику.
Поскольку начальное значение линейки и конечное могут меняться, то промежутотчные значения расчитываются на ходу. Так вот проблема в том чтобы создать тектовые поля с этими значениями под линейкой выбора.

есть у меня такой метод куда приходит х координата текстового поля, которого нужно создать. Как его правильно создавать и можно ли это вообще сделать из класса? Я делаю так
Код:

class slider extends MovieClip{
 ....................................................
        function insertTextField(x:Number){
              this.createTextField('tf' + x, x, x - 10, yoffset , 20, 20);
              eval('tf' + x).text = "test";
        }
 ....................................................
}

такой способ не работает, хотя по идее он бы ещё и матюкнуться должен поскольку объект 'tf' + x не объявлен.

silin 28.10.2004 21:20

вот так, однако, работает
Код:

class Slider extends MovieClip{
        function insertTextField(x:Number){
              this.createTextField('tf' + x, x, x - 10, 40 , 20, 20);
              eval('this.tf' + x).text = "test";
        }
}

имхо логичнее : this['tf'+x].text = "test";
а зачем его объявлять, если ты его создаешь, че-то не пойму

Manowar1 29.10.2004 11:05

Ну так, через массив можно, но текстовые поля при этом всёравно не создаются. Может this это только класс без привязки к мувику? Хотя если делать this.attachMovie то этот самый атач происходит именно на мувик привязанный к this. Вообщем ерунда какая-то. Я проблему решил, вместо this использую _parent. Вот на _parent текстовые поля создаются без проблем, но при этом для даннного мувика приходится сначала создавать новый мувиклип, а потоом к ниму атачить сам мувик.В приниципе это не проблема, конечно, просто хотелось сделать что-то без дополнительных средств из вне.

Proman 29.10.2004 14:30

Manowar1
А ты сам не запутался?
Метод то вызвал? Всмысле my_clip.insertTextField(num) , пока не вызовешь ничего создаваться не будет. Сам метод рабочий, все в порядке.

Manowar1 29.10.2004 15:09

Вызывать то вызываю, делается это правда, в момент исполнения конструктора. Т.е. вполне вероятно, что когда делается атачМуви с передачей параметров класса, сначала запускается конструктор и только потом происходит сам атач, тогда может возникнуть ситуация, что вроде как негде ещё пока создавать тектовые поля, хотя в конструкторе я делаю также мувиАтач другого мувика, который без проблем появляется. Вообще ясно, чтоо ничего не ясно. Мой же работающий код будет выглядеть так.
Код:

class slider extends MovieClip{
        function slider(){
            insertTextField(100);
            insertTextField(120);
        }
 ....................................................
        function insertTextField(x:Number){
              _parent.createTextField('tf' + x, x, x - 10, yoffset , 20, 20);
              _parent['tf' + x].text = "test";
        }
 ....................................................
}

вместо неработающего
Код:

class slider extends MovieClip{
        function slider(){
            insertTextField(100);
            insertTextField(120);
        }
 ....................................................
        function insertTextField(x:Number){
              this.createTextField('tf' + x, x, x - 10, yoffset , 20, 20);
              eval('tf' + x).text = "test";
        }
 ....................................................
}


Proman 29.10.2004 15:21

Твой "неработающий пример" полностью рабочий :) он реально содает два текстовых поля, кинь исходники я посмотрю в чем глюк.

Manowar1 29.10.2004 16:37

Вложений: 1
Держи, это немного изменённый пример, но суть полностью осталось описанной в посте.

Proman 29.10.2004 17:24

Все что могу тебе сказать
Цитата:

MovieClip.createTextField()
Availability
Flash Player 6.

Usage
my_mc.createTextField(instanceName:String, depth:Number, x:Number, y:Number, width:Number, height:Number) : Void

Parameters
instanceName A string that identifies the instance name of the new text field.

depth A positive integer that specifies the depth of the new text field.

x An integer that specifies the x coordinate of the new text field.

y An integer that specifies the y coordinate of the new text field.

width A positive integer that specifies the width of the new text field.

height A positive integer that specifies the height of the new text field.



Manowar1 29.10.2004 19:44

Да читал раз 10 или больше, но что ты мне хотел скеазать этим я не понял

silin 30.10.2004 02:06

он хотел сказать что текстфилд у тебя не создается, сравни
Код:

class test extends MovieClip{
        function test(){
                var i:Number;
                for (i=1; i< 5; i++){
                        insertTextField(i);
                }
        }
        function insertTextField(x:Number){
                        this.createTextField("tx" + x, x,20,x*30,0,0 );
                        this['tx' + x].autoSize=true
                        this['tx' + x].text = "test";
        }
}


Proman 30.10.2004 11:48

silin Respect!!! :)

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

Когда-то давно один человек сказал:
Цитата:

1. Купите Англо-Русский словарь.
2. Пользуйтесь им.

Manowar1 01.11.2004 12:15

МдаЮ ошибочка вышла с примерчиком, поторопился. Но всёравно Спасибо, slin, за НОРМАЛЬНОЕ разъяснение. В исходном варианте были прописаны все параметры, а этот пример я сделал на скорую руку из-за чего всё и получилось. На самом деле, проблема была в том, что я пытался обратиться к создаваемым полям через eval, а не через this[]. В конце концов, я до этого дошёл, но уже через _парент, короче сам себя поймал.

Уважаемый Proman,
ты всётаки как никак на форуме, а не со студентами в классе. Люди здесь ищут ответы на вопросы, а ответ по типу, что ты дал, мало того, что не информативен, так и ещё довольно обидный. Лучше промолчи, если тебе лень нормально ответить, как говориться "инодi лiпше жувати".

Proman 01.11.2004 15:36

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

Manowar1 01.11.2004 16:27

Да ладно, я почти не обиделся, чуть -чуть только ;) . Прям как дети.. :D


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

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