Просмотр полной версии : Свойство System.capabilities.screenResolutionY от второго монитора - рельно ли?.
При наличии в системе двух мониторов свойство System.capabilities.screenResolutionY берется из свойств только того монитора, который указан в системе как основной, независмо от того, на какой монитор уведен браузер (когда видеокарта работает в режиме Dual View, то есть при независимой настройке мониторов). Обнаружилось опытным путем.
Это никак не победить, потому что связано с ее величеством системой? Может быть JavaScript умеет брать разрешение того дисплея, в котором в данный момент спозиционировано окно браузера?
По обстоятельствам требуется вносить изменения в ролике в зависимости от разрешения монитора (при полноэкранном режиме).
Нет этого сделать нельзя. зависит от системы
По поводу класса System я и сам это понял. Но, отвлекаясь от флеш, "система"-то знает, что у нее два монитора. Может быть JS умеет более глубоко в свойства системы проникнуть, хотя бы при посредничестве браузера?
При Dual View настройка мониторов независимая. Это же где-то должно отражаться.
В идеале хотелось бы еще также, чтобы браузер мог узнать и как-то передать флешке, куда он выведен или развернут. Ведь многие приложения умеют узнавать это (например, обычные видеоплееры "знают", на какой монитор они выведены большей своей частью, когда начинают разворачиваться в полный экран. Да те же браузеры себя ведут так же).
В жаэсе ничего подобного не видал
rainbowrussia
17.05.2010, 23:45
Javascript: screen.width, screen.height
IE6 - разрешение основного экрана, IE7 не могу проверить.
Chrome, Safari, Firefox - разрешение текущего экрана.
Можно попробовать проверить ширину окна браузера и сравнить со screen.width.
Возможно System.capabilities.screenResolutionY тоже зависит от браузера.
Нет, System.capabilities.screenResolutionY зависит только от системы, насколько я понял, причем тут речь только о мониторе, прописанным в системе как основной, а не текущий.
Видимо нюанс составляет определить, какой, собственно, текущий.
Сам браузер это как-то знает. (Как узнать, хотя бы с помощью JS, эту информацию от браузера?) Если растянуть браузер на два монитора, и нажать "Развернуть", он развернется в том мониторе, где оказалась расположенной большая его площадь.
Поэтому сравнивать ширину окна браузера вообще не вижу смысла, она может быть любой, даже больше ширины монитора.
А уж меньше-то запросто, если окно браузера не развернуто.
Javascript: screen.width, screen.height
IE6 - разрешение основного экрана, IE7 не могу проверить.
Chrome, Safari, Firefox - разрешение текущего экрана.
А вот тут нельзя ли поподробнее - что подразумевается тут под "текущий"? Того, где расположена большая площадь браузера?
По этому моменту я не нашел информации.
В общем, если вкратце, мне нужно узнать разрешение "текущего" монитора. Браузер знает и какой сейчас текущий, и максимальные размеры (равное разрешению монитора), в пределах которых он может развернуться. Можно ли как-то получить эти данные?
Добавлено через 1 час 40 минут
Вот мои наблюдения.
Может быть кому-то полезно будет, как screen.width, screen.height определяют разрешение монитора при работе в различных браузерах:
1) Opera 10.53. Определяется разрешение для того монитора, в области которого стартовал браузер. Если браузер перенести и развернуть на другой монитор, эти данные не изменятся. Если окно перенести в другой монитор, закрыть Оперу и снова запустить (она откроется уже в новом мониторе), только тогда разрешение определится уже с новыми значениями. То есть браузер "текущим" тут считает тот монитор, в области которого он стартовал. Плохо.
2) IE 6.0. Ему все равно, где находится окно, и откуда он стартовал. При любом раскладе всегда выдается разрешение основного монитора (то есть того, которое определяется в свойствах "Экрана", "Параметры" как основной). Еще хуже.
2) FireFox 3.5.9. Правильно определяется разрешение именно текущего монитора, т.е. того, куда было перенесено окно либо где расположена большая площадь браузера. Причем неважно, в каком мониторе был стартован FF. Отлично!
Других браузеров под рукой не нашлось.
Ввыоды. В общем, все грустно. Передать флешке актуальную информацию, какое разрешение выставлено именно в том мониторе, где она открыта сейчас, я так и не понял - можно ли в принципе как-то организовать. Только один FF ведет себя корректно при вызове соответствующих функций JS.
______________________
К чему это все? Дело в том, что сейчас я пишу видеоплеер и нужно определять разрешение монитора, для того чтобы правильно позиционировать и масштабировать видео и элементы меню в полноэкранном его режиме.
rainbowrussia
18.05.2010, 02:15
что подразумевается тут под "текущий"? Того, где расположена большая площадь браузера?
Да, где браузера "больше", получается так.
Я не совсем понял для чего вам нужны эти значения, поясните если не секрет плз.
Ну и как крайний вариант узнать разрешение текущего монитора - развернуть фшелку на весь экран, прочитать Stage.width и Stage.height и свернуть обратно. Правда на каком из мониторов она развернется, возможно, тоже непредсказуемо.
Stage.width и Stage.height всегда постоянны и не зависят от разрешения монитора по горизонтали и вертикали, независмио от того, полноэкранный это режим или нет. Меняются размеры Stage только когда Stage.scaleMode установлено в noScale или при оперативной перепубликации флешки на странице с помощью JS . У меня не этот случай, у меня при разворачивании флешки в полный экран все по обычному масштабируется.
Пишу плеер. Нужно определять разрешение монитора, для того чтобы правильно позиционировать и масштабировать область видео и элементы меню в полноэкранном режиме.
Например, меню должно быть "прилеплено" в полноэкранном режиме всегда к низу. Где низ? Допустим пропорции монитора одни, прекрасно, подгоним полноэкранное меню на сцене, где будет низ экрана. Но на другом мониторе в полноэкранном режиме все может стать иначе, так как пропорции монитора уже другие, в координатах монитора флешка на нем может стать больше или меньше, втискиваясь в экран! Она ведь в полноэкранном режиме всегда масштабируется так, чтобы сцена (Stage) поместилась полностью, касаясь либо верхнего и нижнего краев экрана, либо правого и левого края (как это получится - как раз зависит от пропорций экрана).
Сцена может прилипнуть своими краями к правому или левому краю монитора, тогда ее высота сожмется, низ сцены поедет вверх (вместе с меню!), верхний край вниз. И наоборот, если сцена влезла в экран так, что прилепилась краями к верху и низу монитора, то она сожмется по ширине в координатах монитора.
Для компенсации этого и нужно знать разрешение монитора, чтобы, например, меню всегда оставалось прилепленным к низу экрана.
То есть некоторые нужные элементы (у меня это меню и область видео) нельзя фиксировать, если нужно добиться их постоянного положения по отношению к краям того или иного монитора в полноэкранном режиме.
Что я и делаю. Сейчас все прекрасно работает, расчитывается верно, но только если не запускать или не перемещать страницу с флешкой на другой экран...
А ведь сейчас два монитора - это не редкость, многие ставят второй и параллельно обычным занятиям смотрят на нем фильмы, делают что-то еще. Карточки все сейчас с двумя выходами... К нотбукам подключают внешние мониторы. И т.д.
rainbowrussia
18.05.2010, 05:26
Вашу задачу понял, но... а зачем же такие сложности? Сделайте noScale, в случае переключения в полный экран установите _xscale и _yscale у визуальных элементов, а лучше их групп. Например, когда я делал видеоплеер, я в полноэкранном режиме устанавливал _xscale и _yscale у клипа, в котором был собран весь "низ" плеера (прогресс, плей, пауза, громкость, другие кнопки). При noScale мы точно будем знать разрешение, точно знаем размер всех элементов и нет проблем с подгонкой. В вашем случае все решения будут полумерами.
Ну или на случай если Scale необходим - думаю вот так можно узнать ширину флешки при переходе в полноэкранный режим:
var sm = Stage.scaleMode;
Stage.scaleMode = 'noScale';
trace(Stage.width);
Stage.scaleMode = ns;
По крайней мере в среде разработки код:
Stage.scaleMode = "Scale";
onEnterFrame = function () {
var sm = Stage.scaleMode;
Stage.scaleMode = 'noScale';
trace(Stage.width);
Stage.scaleMode = ns;
}
работает, содержимое масштабируется, ширина выводится в зависимости от того на сколько окно растянули и изображение не дергается. А в вашем случае onEnterFrame, конечно, не нужен и переключать scaleMode можно и нужно реже.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.