PDA

Просмотр полной версии : модальное окно и маленькие проблемы...


Ices
06.07.2005, 12:48
Всем привет!!!

Помучился я тут с html alert и решил делать свой на флеше(компоненты в силу их веса не рассматриваю)...

Решил кучу проблемм с этим связанным... Но остались такие вопросы:
1) При блокировки доступа ко всем элементам под окном сообщения с помощью большой прозрачной кнопки с useHandCursor=false все ли реально заблокируется и не начнет ли что-то из-за этого тормозить???

2) На окне сообщения расположил всего одну кнопку "OK". Но как сделать обработку по нажатию на клаву?
Делаю так:
ButtonOK.onKeyUp=function(){trace("pressed");}
не работает...
Эту же функцию пытался ставить практически на все кнопки и просто мувики... И не работает.
А заработало когда я в одном мувике непосредственно написал:

onClipEvent(keyUp)
{
trace("pressed");
}

В чем же разница???

3) Не понимаю как узнать центр ролика. Глупо, но факт.
Почему-то _root._height, _root._width, Stage.height, Stage.width показывают иногда неверное значение.
И поэтому

x=_root._width/2;
y=_root._height/2;

далеко не центр ролика...

Nirth
06.07.2005, 12:51
Stage.height Staget.width

так же не забудь

Stage.scaleMode = "noScale";
и можно Stage.align = "TL";

Насчет того что неверные, не знаю не сталкивался, скорее всего у тебя где то ошибка в другом месте

Nirth
06.07.2005, 12:53
Да ктати центр вычисляеться так
w1 = ширина рабочей поверхности
w2 = ширина модального окна
центр = (w1-w2)/2
аналогично для высоты.

Ices
06.07.2005, 13:09
Stage.scaleMode = "noScale";
Этот код я уже давно сделал т.к. делаю сайт...
А вот на счет
Stage.align = "TL";
еще не экспериментировал...

А на счет центра вы сами напишите такой код в разных местах...
trace(Stage.height)


Да ктати центр вычисляеться так
w1 = ширина рабочей поверхности
w2 = ширина модального окна
центр = (w1-w2)/2 аналогично для высоты.

Так вычисляется не центр, а левый край модального окна, которое будет по центру... Скорее всего опечатка.

Nirth
06.07.2005, 13:14
trace(Stage.height)

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


Так вычисляется не центр, а левый край модального окна, которое будет по центру... Скорее всего опечатка.


угу не так сказал.

прикрепи исходник посмотрю...

Ices
06.07.2005, 13:31
сейчас я не на работе, а дома... по быстрому сварганил пример с трейсом, который не правильно показывает значения...

Nirth
06.07.2005, 13:51
исходник запутанный, не понимаю чего добиваешься вообще.

//Draw the rectangle
var b = this.createEmptyMovieClip("rect_mc", 2);
b.beginFill(0xFF0000, 100);
b.moveTo(0, 0);
b.lineTo(100, 0);
b.lineTo(100, 100);
b.lineTo(0, 100);
b.lineTo(0, 0);
b.endFill();
//End of draw
this.center = function () {
_root.rect_mc._x = (Stage.width - _root.rect_mc._width) / 2;
_root.rect_mc._y = (Stage.height - _root.rect_mc._height) / 2;
};
this.center();
//
Stage.align = "TL";
Stage.scaleMode = "noScale";
var obj = new Object();
obj.onResize = center;
Stage.addListener(this.obj);

тут все работает.

Ices
06.07.2005, 16:26
Разобрался...
Нужно было поставить

Stage.align = "TL";


Я просто хотел знать значения ширины и высоты, которые установлены изначально...

Спасибо за ответы... ;)

netCat
06.07.2005, 16:42
Насчет всяких определений центра сцены и выравниваний советую почитать про SystemManager.screen.

KUZEN
06.07.2005, 16:45
Насчет всяких определений центра сцены и выравниваний советую почитать про SystemManager.screen.
Поподробней пожалуйста

netCat
06.07.2005, 16:48
Цитата из хелпа:

SystemManager.screen
Availability
Flash Player 6 (6.0 79.0).

Edition
Flash MX 2004.

Usage
SystemManager.screen

Description
Property; an object with x, y, width, and height properties that indicate the size and position of the Stage.

Example

If Stage.align is set to something other than "LT", it is very difficult to know what coordinates are actually viewable.

For example, suppose you want to place a watermark icon in the lower right corner of the Stage (similar to the watermarks many television channels use). If the Stage is centered and much wider than the Stage size set up in the FLA file, the following code places the watermark offscreen:

Watermark.move(Stage.width – Watermark.width, Stage.height – Watermark.height);

However, the following code would work in all Stage alignments:

Watermark.move(SystemManager.screen.width + SystemManager.screen.x - Watermark.width, SystemManager.screen.height + SystemManager.screen.x – Watermark.height);

Dimchansky
06.07.2005, 16:58
Ices, почему бы тебе не добавить listener к клавиатуре для отлавливания кнопок? Ведь к сцене ты его добавляешь :)

key_listener={}
key_listener.allow_keyboard=true; //---разрешаешь отрабатывать клавиатуру
key_listener.onKeyUp=function(){
if (!this.allow_keyboard) return 0;
trace(Key.getCode()+" key up");
}
key_listener.onKeyDown=function(){
if (!this.allow_keyboard) return 0;
trace(Key.getCode()+" key down");
}
Key.addListener(key_listener);
.
.
.
key_listener.allow_keyboard=false;//---запрещаешь обработку клавиатуры

KUZEN
06.07.2005, 17:00
а ну да ... просто я во флешке ввёл а он не подсветился и подумал мож чё другое ...

Ices
06.07.2005, 19:26
На счет SystemManager не понял...
Не нашел я такого в флеше...
Также при отладке пытался вызвать:

trace(SystemManager.screen.width);

выводит undefined...

В хелпе тоже ничего не нашел...

Пользуюсь MX Professional 2004 Version 7.0

А на счет кнопок надо посмотреть...

netCat
06.07.2005, 19:37
import mx.managers.SystemManager
trace(SystemManager.screen.width);

P.S
незнаю как в 7.0 у меня 7.2

Ices
06.07.2005, 21:16
Понял.

Произвел замеры...
Одна строчка(импортированный SystemManager):

import mx.managers.SystemManager

занимает 6846 байт... Такими темпами у меня флешка будет минимум несколько мегов... :)
Тем более то, что мне надо можно определить и запомнить один раз через Stage, но в главной сцене и в первом кадре таким образом:

_global.MyWorkSize=new Object();
MyWorkSize.width=Stage.width;
MyWorkSize.height=Stage.height;


Только вот что-то это не работает при отладке... :(
Тогда можно и грубым способом:

_global.MyWorkSize=new Object();
MyWorkSize.width=400;
MyWorkSize.height=700;

MIX-er
07.07.2005, 06:26
не понял что у тя не пашет...

_global.MyWorkSize = new Object();
MyWorkSize.width = Stage.width;
MyWorkSize.height = Stage.height;
trace("height: "+MyWorkSize.height+", width: "+MyWorkSize.width);

все выводится...
и что значит при отладки в твоём понятии??

cyraxchel
07.07.2005, 12:15
key_listener={}
key_listener.allow_keyboard=true; //---разрешаешь отрабатывать клавиатуру
key_listener.onKeyUp=function(){
if (!this.allow_keyboard) return 0;
trace(Key.getCode()+" key up");
}
key_listener.onKeyDown=function(){
if (!this.allow_keyboard) return 0;
trace(Key.getCode()+" key down");
}
Key.addListener(key_listener);

Я делаю немного по другому (без сильных заморочек):

ButtonOK.onKeyUp=function(){trace("pressed");}
Key.addListener(ButtonOK);
А если надо убить отлов нажатия клавиатуры, то:
Key.removeListener(ButtonOK);

Dimchansky
07.07.2005, 15:05
cyraxchel да это то же самое, только листенеры я не удаляю. Почему? Вариант более гибкий.

Ices
07.07.2005, 15:22
@MIX-er

Под отладкой я понимаю когда запускаешь флеш в оболочке MX не через ctrl+enter, а через ctrl+shift+enter...

MIX-er
07.07.2005, 18:47
а у тя какая версия мх и в какую версию ты компелишь???

Ices
08.07.2005, 10:26
У меня MX Professional 2004 Version 7.0