Форум 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)
-   -   модальное окно и маленькие проблемы... (http://www.flasher.ru/forum/showthread.php?t=66432)

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

Вложений: 1
сейчас я не на работе, а дома... по быстрому сварганил пример с трейсом, который не правильно показывает значения...

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

Цитата:

Сообщение от netCat
Насчет всяких определений центра сцены и выравниваний советую почитать про 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

Цитата:

Сообщение от Dimchansky

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


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

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