|
|
|||||
Регистрация: Jan 2012
Сообщений: 3
|
TGetProperty() в Делфи
Люди! Огромная просьба, подскажите мне!
Проблема такая. Использую в Delphi компонент ActiveX Shockwave Flash. Пытаюсь на его основе сделать свой компонент, добавив в него свойство AutoSize и прочие надстройки. Но столкнулся с тем, что не могу определить ширину и высоту загружаемого Swf ролика. Воспользовался функцией TGetProperty(). В неё нужно передавать 2 параметра - имя объекта, и номер свойства. 8 и 9 свойствам соответствуют ширина и высота. В качестве объекта я передаю _root. Таким образом, код выглядит следующим образом: Однако, возвращаемые значения не совсем соответствуют тем, что мне необходимы. Потому что он определяет ширину и высоту с учётом объектов, которые находятся за пределами области видимости. А как вы понимаете, во многих мультиках, да и программах, очень часто за пределами зоны видимости могут располагаться объекты, чтобы в определённый момент времени "выскочить" на экран. К тому же, если на сцене объект меньше, чем видимая область, и в кадре не присутствует больше ничего, возвращаются не размеры видимой области, а размеры этого объекта. Подскажите, какое имя объекта нужно передать в функцию TGetProperty(), чтобы узнать ширину и высоту видимой области сцены swf файла? Размер того самого белого прямоугольника, ширина и высота которого задаётся в свойствах документа во Флеше. В PHP есть функция Getimagesize(), которая умеет определять ширину и высоту этой области, но на Делфи мне этого сделать до сих пор не удаётся... Читал, что в ActionScript можно обращаться через Stage.Width, но передать Stage в качестве имени объекта в функции не получается, выскакивает ошибка... Буду очень признателен за помощь! Последний раз редактировалось XilDen; 25.01.2012 в 00:16. |
|
|||||
Модрон-ветеринар
|
Код в сообщении необходимо выделять соответственными тегами.
__________________
Идите первым! |
|
|||||
Цитата:
По идее во флеше надо брать stage.stageHeight / stage.stageWidth, а афтары компонента берут stage.height / stage.width. Вообще автосайз флеш-контейнера это проитивоестественно. Если обратить внимание на хтмл, то там размеры флешки задаються жостко, а если есть необходитмость увеличить размеры, то все это тупо скейлиться. При чем скейлиться не флеш-плагином а браузером. (Поправьте меня если я не прав) Кроме того флешер расчитывает свою игрушку или банер на определенные размеры. Ты хочешь принудительно сайзить стейдж из делфей? Так за такие приколы афтаров надо бить лопатой до просветления. Во флеше после такого принудительного скейла может нафиг все разползтись. Последний раз редактировалось usacha; 25.01.2012 в 21:36. |
|
|||||
Регистрация: Jan 2012
Сообщений: 3
|
Нет, размер сцены я менять не собираюсь. Проблема в том, чтобы размер флеш-контейнера был равен размеру ролика при 100%-ом масштабе. Иначе, ролик либо не влезает в контейнер, выходя за его пределы, либо масштабируется под размеры контейнера (в зависимости от значения одного атрибута). Разумеется, подогнать для конкретного swf ролика размер контейнера руками - совершенно не проблема, и минутное дело. Но моя задача автоматизировать этот процесс на уровне компонента, в момент подгрузки в контейнер ролика. Ну а также и другими функциями наделить его. например, поверх контейнера создавать невидимую прозрачную загрушку, которая заблокирует возможность нажатия мышкой на сам контейнер. Типо витрина магазина - смотреть можно, трогать нельзя. Нельзя нажимать на кнопки в swf если они есть. нельзя нажимать правую кнопку мыши, управлять качеством ролика, зумом. Просто графический компонент аля "картинка". Хочу создать аналог TGIFImage, но только вместо убогой gif анимации с 256 цветами, чтобы была возможность подгружать в программу хорошую flash анимацию.
Узнал, что необходимый мне размер ролика хранится в сигнатуре swf файла в начальных байтах. Но достать её можно только если не выполнена компрессия файла. Однако, почти все современные swf файлы сжимаются, поэтому первоначально нужно их декомпрессировать с помощью функционала библиотеки zlib.dll. С этим конечно гемор... Нашёл исходник такой проги на С++, но чтобы переписать её в Делфи, придётся попотеть..(( Последний раз редактировалось mooncar; 25.01.2012 в 22:58. |
|
|||||
Внутри флешки, после загрузки, размеры заданные при компиляции можно узнать у LoaderInfo (width / height) рута.
Добавлено через 7 минут Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Регистрация: Jan 2012
Сообщений: 3
|
Слышал ещё, что возможно как то взломать flash.ocx и переписать его под свои нужды. Кому нибудь что то об этом известно?
|
Часовой пояс GMT +4, время: 12:36. |
|
« Предыдущая тема | Следующая тема » |
|
|