Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 773

/ вопрос открыт /

Уважаемые эксперты, как можно зная только путь к swf ролику изнать его разрешение (например 800х600).Меня не интересует длина, мне надо сколько высота и ширина у ролика, тоесть как у картинки width heigh, МНЕ НАДО ЧТОБЫ РАЗМЕР ФОРМЫ БЫЛ РАВЕН РАЗМЕРУ РОЛИКА.

Аксион Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 21 июля 2007, 10:44
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Матвеев Мефодий Олегович!
Все необходимые данные можно изъять с помощью методов TGetProperty() и TGetPropertyAsNumber(). Подробное описание всех свойств и методов TShockwaveFlash можно увидеть здесь: http://www.delphiflash.com/library-shockwave-flash.php. Как видно из таблицы, ширине и высоте самого swf-ролика соответствуют константы 8 и 9. Таким образом, чтобы установить размер объекта TShockwaveFlash равным размерам ролика, нужно сначала загрузить сам ролик, изменив свойство Movie, а затем узнать нужные параметры. Пример:

Flash.Movie:=\'C:\your_path\movie.swf\';
Flash.Width:=Round(Flash.TGetPropertyAsNumber(\'/\',8));
Flash.height:=Round(Flash.TGetPropertyAsNumber(\'/\',9));
Здесь Flash - сам объект TShockwaveFlash. Метод TGetPropertyAsNumber возвращает указанный параметр в виде числа, а TGetProperty - просто в виде строки.
Далее, чтобы установить размер формы по размеру поля Flash, нужно либо использовать AutoSize формы (установить в True), либо изменить размеры клиентской области вручную:
YourForm.ClientWidth:=Flash.Width;
YourForm.ClientHeight:=Flash.Height;
Желаю удачи!

Ответ отправил: Dron (статус: Студент)
Время отправки: 21 июля 2007, 12:07
Оценка за ответ: 5

Комментарий к оценке: Спасибо

Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 22 июля 2007, 13:22; участников в обсуждении: 3.
Dron

Dron (статус: Студент), 21 июля 2007, 11:07 [#1]:

А какой компонент вы используете для отображения Flash на форме? Может быть, там есть что-то вроде AutoSize?
С уважением.
Аксион

Аксион (статус: 4-ый класс), 21 июля 2007, 11:17 [#2]:

Нет AutoSize там нет, а вот сылка на "компонент" http://www.interface.ru/home.asp?artId=4608
Dron

Dron (статус: Студент), 21 июля 2007, 12:08 [#3]:

Кстати, это ссылка не на компонент, а на статью с примером его использования :-) Сам компонент - это ActiveX TShockwaveFlash.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 21 июля 2007, 14:23 [#4]:

Dron сами вы пробовали то что предложили мне?А то у меня как был начальный размер так и остался хотя я сделал как вы сказали
Dron

Dron (статус: Студент), 21 июля 2007, 14:43 [#5]:

Естественно.
Ищите, что является помехой. Возможно, размер вашего ролика как раз точно совпадает с размером компонента. Чтобы убедиться, откройте ролик в каком-нибудь flash-проигрывателе и сравните результаты. А вообще, начать нужно с проверки значений, которые выдаются TGetPropertyAsNumber (с помощью debugger\'а или выводом их куда-нибудь на форму).
С уважением.
Аксион

Аксион (статус: 4-ый класс), 21 июля 2007, 14:45 [#6]:

Хотя нет работает но не правельно правельно отображается размер у 1 из 4 флэшек
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 21 июля 2007, 14:47 [#7]:

Матвеев Мефодий Олегович, Dron: в уведомлениях о сообщениях на мини-форумах последние полчаса могли быть неверные имена участников, оставивших сообщение или мог отсутствовать текст. Исправлялась одна из ошибок. Всё устранено.
Dron

Dron (статус: Студент), 21 июля 2007, 14:49 [#8]:

Не у каждого ролика жёстко задан его размер. Многие ролики могут быть безразмерными, т.е. резиновыми и растягиваться по всему окну.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 21 июля 2007, 14:51 [#9]:

вывел в лабел1 и лабел2 при просмотре ролика happy tree friends были значения 1820.1 и 1350.8 не много ли? О_о
Аксион

Аксион (статус: 4-ый класс), 21 июля 2007, 14:54 [#10]:

Вообще я изучал Micromedia flash 8 но я всегда чётко задавал размер, а как делать без размерные такого я не знаю.
Dron

Dron (статус: Студент), 21 июля 2007, 14:55 [#11]:

Значит ролик в таком разрешении и создан. Определяется там всё верно - я пробовал на маленьком ролике - выдавались значения около 270x250 - оно так и есть. Если бы мы вручную ковыряли файл и находили там данные - тогда ошибки могли бы быть, но здесь всё от Macromedia "в чистом виде", поэтому ошибки исключены.
С уважением.
Dron

Dron (статус: Студент), 21 июля 2007, 15:00 [#12]:

С Macromedia Flash не работал, но причина может быть и какая-то другая. Может быть там разные способы сохранения или что-нибудь в этом роде. Например, попадаются ролики, которые вообще не открываются - кто знает, отчего так?
В общем, лучше всего проверять значения и если они реальные, то изменять размер формы, а если нет (кстати, что выдавалось на тех роликах, где размер формы не менялся?), то ставить какой-то стандартный размер вроде 320x240.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 22 июля 2007, 12:56 [#13]:

А НЕТ НИКАКОГО ДРУГОГО КОМПОНЕНТА С ВНЯТНЫМ AUTOSIZE
Dron

Dron (статус: Студент), 22 июля 2007, 12:59 [#14]:

Не знаю. Их вообще не так много... См. на том же сайте, с которого мной была взята информация о константах. Там есть TShockwaveFlashEx - быть может там это есть. Но он платный.
P.S. Не надо писать большими буквами, и без того нормально сообщения воспринимаются.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 22 июля 2007, 13:22 [#15]:

Ой я незаметил включёный Caps Lock (опять)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 24 марта 2023, 22:02
Выполнено за 0.03 сек.
Рейтинг@Mail.ru