Просмотр полной версии : модальное окно и маленькие проблемы...
Всем привет!!!
Помучился я тут с 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;
далеко не центр ролика...
Stage.height Staget.width
так же не забудь
Stage.scaleMode = "noScale";
и можно Stage.align = "TL";
Насчет того что неверные, не знаю не сталкивался, скорее всего у тебя где то ошибка в другом месте
Да ктати центр вычисляеться так
w1 = ширина рабочей поверхности
w2 = ширина модального окна
центр = (w1-w2)/2
аналогично для высоты.
Stage.scaleMode = "noScale";
Этот код я уже давно сделал т.к. делаю сайт...
А вот на счет
Stage.align = "TL";
еще не экспериментировал...
А на счет центра вы сами напишите такой код в разных местах...
trace(Stage.height)
Да ктати центр вычисляеться так
w1 = ширина рабочей поверхности
w2 = ширина модального окна
центр = (w1-w2)/2 аналогично для высоты.
Так вычисляется не центр, а левый край модального окна, которое будет по центру... Скорее всего опечатка.
trace(Stage.height)
в своих исходниках писать смысла не вижу, ибо у меня и без трэйса центрируеться.
Так вычисляется не центр, а левый край модального окна, которое будет по центру... Скорее всего опечатка.
угу не так сказал.
прикрепи исходник посмотрю...
сейчас я не на работе, а дома... по быстрому сварганил пример с трейсом, который не правильно показывает значения...
исходник запутанный, не понимаю чего добиваешься вообще.
//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);
тут все работает.
Разобрался...
Нужно было поставить
Stage.align = "TL";
Я просто хотел знать значения ширины и высоты, которые установлены изначально...
Спасибо за ответы... ;)
Насчет всяких определений центра сцены и выравниваний советую почитать про SystemManager.screen.
Насчет всяких определений центра сцены и выравниваний советую почитать про SystemManager.screen.
Поподробней пожалуйста
Цитата из хелпа:
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;//---запрещаешь обработку клавиатуры
а ну да ... просто я во флешке ввёл а он не подсветился и подумал мож чё другое ...
На счет SystemManager не понял...
Не нашел я такого в флеше...
Также при отладке пытался вызвать:
trace(SystemManager.screen.width);
выводит undefined...
В хелпе тоже ничего не нашел...
Пользуюсь MX Professional 2004 Version 7.0
А на счет кнопок надо посмотреть...
import mx.managers.SystemManager
trace(SystemManager.screen.width);
P.S
незнаю как в 7.0 у меня 7.2
Понял.
Произвел замеры...
Одна строчка(импортированный 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;
не понял что у тя не пашет...
_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 да это то же самое, только листенеры я не удаляю. Почему? Вариант более гибкий.
@MIX-er
Под отладкой я понимаю когда запускаешь флеш в оболочке MX не через ctrl+enter, а через ctrl+shift+enter...
а у тя какая версия мх и в какую версию ты компелишь???
У меня MX Professional 2004 Version 7.0
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.