Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.01.2012, 00:09
XilDen вне форума Посмотреть профиль Отправить личное сообщение для XilDen Найти все сообщения от XilDen
  № 1  
Ответить с цитированием
XilDen

Регистрация: Jan 2012
Сообщений: 3
По умолчанию TGetProperty() в Делфи

Люди! Огромная просьба, подскажите мне!
Проблема такая. Использую в Delphi компонент ActiveX Shockwave Flash. Пытаюсь на его основе сделать свой компонент, добавив в него свойство AutoSize и прочие надстройки. Но столкнулся с тем, что не могу определить ширину и высоту загружаемого Swf ролика.
Воспользовался функцией TGetProperty(). В неё нужно передавать 2 параметра - имя объекта, и номер свойства. 8 и 9 свойствам соответствуют ширина и высота. В качестве объекта я передаю _root. Таким образом, код выглядит следующим образом:
Код:
edt1.Text:=flash.TGetProperty('_root', 8);
edt2.Text:=flash.TGetProperty('_root', 9);
Однако, возвращаемые значения не совсем соответствуют тем, что мне необходимы. Потому что он определяет ширину и высоту с учётом объектов, которые находятся за пределами области видимости. А как вы понимаете, во многих мультиках, да и программах, очень часто за пределами зоны видимости могут располагаться объекты, чтобы в определённый момент времени "выскочить" на экран.
К тому же, если на сцене объект меньше, чем видимая область, и в кадре не присутствует больше ничего, возвращаются не размеры видимой области, а размеры этого объекта.

Подскажите, какое имя объекта нужно передать в функцию TGetProperty(), чтобы узнать ширину и высоту видимой области сцены swf файла? Размер того самого белого прямоугольника, ширина и высота которого задаётся в свойствах документа во Флеше.
В PHP есть функция Getimagesize(), которая умеет определять ширину и высоту этой области, но на Делфи мне этого сделать до сих пор не удаётся... Читал, что в ActionScript можно обращаться через Stage.Width, но передать Stage в качестве имени объекта в функции не получается, выскакивает ошибка...
Буду очень признателен за помощь!


Последний раз редактировалось XilDen; 25.01.2012 в 00:16.
Старый 25.01.2012, 00:13
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код в сообщении необходимо выделять соответственными тегами.
__________________
Идите первым!

Старый 25.01.2012, 21:26
usacha вне форума Посмотреть профиль Отправить личное сообщение для usacha Найти все сообщения от usacha
  № 3  
Ответить с цитированием
usacha

Регистрация: Oct 2010
Сообщений: 41
Записей в блоге: 1
Цитата:
имя объекта, и номер свойства.
Раз уж там свойства пронумерованы (!!!! ну бред же. Не на асме же пишут.) значит на стороне флеша они могут называться как угодно.
По идее во флеше надо брать stage.stageHeight / stage.stageWidth, а афтары компонента берут stage.height / stage.width.

Вообще автосайз флеш-контейнера это проитивоестественно. Если обратить внимание на хтмл, то там размеры флешки задаються жостко, а если есть необходитмость увеличить размеры, то все это тупо скейлиться. При чем скейлиться не флеш-плагином а браузером. (Поправьте меня если я не прав) Кроме того флешер расчитывает свою игрушку или банер на определенные размеры. Ты хочешь принудительно сайзить стейдж из делфей? Так за такие приколы афтаров надо бить лопатой до просветления. Во флеше после такого принудительного скейла может нафиг все разползтись.


Последний раз редактировалось usacha; 25.01.2012 в 21:36.
Старый 25.01.2012, 22:37
XilDen вне форума Посмотреть профиль Отправить личное сообщение для XilDen Найти все сообщения от XilDen
  № 4  
Ответить с цитированием
XilDen

Регистрация: Jan 2012
Сообщений: 3
Нет, размер сцены я менять не собираюсь. Проблема в том, чтобы размер флеш-контейнера был равен размеру ролика при 100%-ом масштабе. Иначе, ролик либо не влезает в контейнер, выходя за его пределы, либо масштабируется под размеры контейнера (в зависимости от значения одного атрибута). Разумеется, подогнать для конкретного swf ролика размер контейнера руками - совершенно не проблема, и минутное дело. Но моя задача автоматизировать этот процесс на уровне компонента, в момент подгрузки в контейнер ролика. Ну а также и другими функциями наделить его. например, поверх контейнера создавать невидимую прозрачную загрушку, которая заблокирует возможность нажатия мышкой на сам контейнер. Типо витрина магазина - смотреть можно, трогать нельзя. Нельзя нажимать на кнопки в swf если они есть. нельзя нажимать правую кнопку мыши, управлять качеством ролика, зумом. Просто графический компонент аля "картинка". Хочу создать аналог TGIFImage, но только вместо убогой gif анимации с 256 цветами, чтобы была возможность подгружать в программу хорошую flash анимацию.

Узнал, что необходимый мне размер ролика хранится в сигнатуре swf файла в начальных байтах. Но достать её можно только если не выполнена компрессия файла. Однако, почти все современные swf файлы сжимаются, поэтому первоначально нужно их декомпрессировать с помощью функционала библиотеки zlib.dll. С этим конечно гемор... Нашёл исходник такой проги на С++, но чтобы переписать её в Делфи, придётся попотеть..((


Последний раз редактировалось mooncar; 25.01.2012 в 22:58.
Старый 26.01.2012, 13:03
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Внутри флешки, после загрузки, размеры заданные при компиляции можно узнать у LoaderInfo (width / height) рута.

Добавлено через 7 минут
Цитата:
Однако, почти все современные swf файлы сжимаются, поэтому первоначально нужно их декомпрессировать с помощью функционала библиотеки zlib.dll
Плеер 11.1 поддерживает новый вид компресии LZMA, если планируете загрузку разных флешек, проверьте поддержку в zlib.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 26.01.2012, 17:01
XilDen вне форума Посмотреть профиль Отправить личное сообщение для XilDen Найти все сообщения от XilDen
  № 6  
Ответить с цитированием
XilDen

Регистрация: Jan 2012
Сообщений: 3
Слышал ещё, что возможно как то взломать flash.ocx и переписать его под свои нужды. Кому нибудь что то об этом известно?

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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