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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 706

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

Здравствуйте! Очень срочно нужна Ваша помощь!

Как мне правильно указать путь к файлу для компонента MediaPlayer. Дело в том что указывая путь к файлу в свойстве FileName он сохраняется, но на других компьютерах возникает ошибка "не праильно указан путь к файлу".

Пожалуйста помогите.

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

Вопрос задал: Romanov (статус: Посетитель)
Вопрос отправлен: 29 апреля 2009, 16:42
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Romanov!
Видимо Вы просто указываете полный путь. И естественно, на другом компьютере его может не быть по указанному пути. Указывать относительный путь тоже не выход. Потому что может тоже не найти, если текущий каталог будет изменёт.
Правильно делать так. Мультимедийные файлы сохраняем в папку рядом с исполняемым файлом, например в media.
А когда надо указать путь к файлу (или в OnFormCreate) задаем его в виде
ExtractFilePath(Application.Exename)+'media\'+имяфайла

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 29 апреля 2009, 16:55

Ответ #2. Отвечает эксперт: min@y™

Может быть на других компах этот файл лежит в другом месте или вообще его там нету?
Если файл предполагается держать в одной папке с программой, то назначай плееру имя файла в Runtime, например:

MediaPlayer.FileName:= ExtractFilePath(ParamStr(0)) + 'видево.avi';
Засунь куданить этот кусок. Либо в OnCreate главной формы, либо ещё куда, например вообще перед вызовом метода Show() главной формы в файле проекта (dpr).

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 29 апреля 2009, 16:57


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

Всего сообщений: 16; последнее сообщение — 30 апреля 2009, 10:32; участников в обсуждении: 5.
Amidamaru

Amidamaru (статус: 4-ый класс), 29 апреля 2009, 16:45 [#1]:

А по подробнее можно? Желательно ещё с кодом.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Romanov

Romanov (статус: Посетитель), 29 апреля 2009, 16:53 [#2]:

В том то и дело что мне желательно путь к файлу указать кодом. А как не знаю. В компоненте MediaPlayer в свойстве FileName открывая файл(видео.wmv) указываеться его прямой путь (C:\Documents and Settings\Олег Романов\Рабочий стол\Программма\Data\DCD.wmv). А мне нужно это как то обойти (чтобы сразу было \Data\DCD.wmv )
Amidamaru

Amidamaru (статус: 4-ый класс), 29 апреля 2009, 17:00 [#3]:

а где находится exe программы?
если например программа 'C:\Documents and Settings\Олег Романов\Рабочий стол\Программма\prog.exe'
то 'C:\Documents and Settings\Олег Романов\Рабочий стол\Программма\Data\DCD.wmv' для неё можно указать
так: '.\Data\DCD.wmv'
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
min@y™

min@y™ (статус: Доктор наук), 29 апреля 2009, 17:02 [#4]:

Цитата:


В том то и дело что мне желательно путь к файлу указать кодом. А как не знаю. В компоненте MediaPlayer в свойстве FileName открывая файл(видео.wmv) указываеться его прямой путь (C:\Documents and Settings\Олег Романов\Рабочий стол\Программма\Data\DCD.wmv). А мне нужно это как то обойти (чтобы сразу было \Data\DCD.wmv )


Ничо, брателло, привыкай. Все так начинали, это нормально. Мне 30,5 лет, а я до сих пор помню, как в школьные годы учился ваять проги на турбопаскале по одной единственной задрипанной книжке, когда про интернет ваще никто даже и не знал. Поверь, тебе будет проще, чем мне!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Romanov

Romanov (статус: Посетитель), 29 апреля 2009, 18:31 [#5]:

min@y
Спасибо на добром слове, но не получается. Выдает ошибку:

Project Progect1.exe raised exception class EMCIDeviceErorr with message 'Не удается определить тип устройства по указаному расширению имени файла.'.Process stopped.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.FileName:= ExtractFilePath(ParamStr(0)) + 'DCD.wmv';
end;
Amidamaru

Amidamaru (статус: 4-ый класс), 29 апреля 2009, 18:36 [#6]:

Я никогда не пользовался MediaPlayer'ом и не знаю, какие он поддерживает форматы. Знаю, что avi - точно воспроизводит. А насчет wmv не знаю.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Romanov

Romanov (статус: Посетитель), 29 апреля 2009, 20:56 [#7]:

Переконвертировал файл .wma в .avi и в свойстве DeviceType выставил AviVideo. Теперь банально не воиспроизводит. А если оставить dtAutoSelect выводит выше указаную ошибку.

Помогите умоляю. Преддипломная практика горит только из-за этого недоразумения.


procedure TForm5.FormCreate(Sender: TObject);
begin
MediaPlayer1.FileName:= ExtractFilePath(ParamStr(0)) + '1.avi';
MediaPlayer1.Play;
end;
Amidamaru

Amidamaru (статус: 4-ый класс), 29 апреля 2009, 21:35 [#8]:

А чем помочь то? у меня он воспроизводит и avi и другие.
PS wma в avi ? это как?
wmv - avi
wma - лучше wav хотя можно и mp3

Я сейчас попробовал. Нормально avi и wmv (Windows Media Video) открывает
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Romanov

Romanov (статус: Посетитель), 29 апреля 2009, 21:37 [#9]:

Amidamaru
А ты этим способом пробовал?
MediaPlayer1.FileName:= ExtractFilePath(ParamStr(0)) + '1.avi';

А с wma - avi пордон, опечатался.
Amidamaru

Amidamaru (статус: 4-ый класс), 29 апреля 2009, 21:44 [#10]:

а при чом здесь этот способ?
я MediaPlayer.FileName устанавливаю с помощью OpenDialog.FileName?но если туда поставить просто имя файла - всёравно работает.
И если расположить в тойже папке некий 1.avi - то твой "способ" тоже работает.
ИМХО у тебя проблема с твоим 1.avi или с кодеками.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Romanov

Romanov (статус: Посетитель), 29 апреля 2009, 22:02 [#11]:

Пи*ц пол дня провозиться из-за такой фигни.
Amidamaru Спасибо вот за это "поставить просто имя файла".
Amidamaru

Amidamaru (статус: 4-ый класс), 29 апреля 2009, 22:09 [#12]:

очень смешно... комуто... наверно... :)
я собственно сразу советовал использовать относительный путь без всяких ExtractFilePath
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
МиГрАф

МиГрАф (статус: 1-ый класс), 29 апреля 2009, 22:49 [#13]:

В procedure TForm1.FormCreate(Sender: TObject); я обычно добавляю
строку:
Dir:=GetCurrentDir+'\'; - директория, где находится запускаемый модуль.
Здесь же должны находиться папки необходимой информацией. Тогда обращение, например:
Dir+'Temp\+FileName всегда работает.
Отмечу, что в этом случае в свойствах OpenDialog, SaveDialog и т.п. не нужно устанавливать Options - onNoChangeDir=False
Вадим К

Вадим К (статус: Академик), 30 апреля 2009, 01:25 [#14]:

to all
относительные пути имеют ещё одну засаду. Если сделать ярлык на программу, то в его свойствах можно указать "рабочую директорию". А она стает текущей.
и Dir:=GetCurrentDir+'\'; уже возвращает её. Но ещё заметнее это стает, когда программа стает в автозапуск. Там такое...
Галочка "подтверждения прочтения" - вселенское зло.
Amidamaru

Amidamaru (статус: 4-ый класс), 30 апреля 2009, 10:25 [#15]:

Не знаю какое там "такое" в автозапуске с GetCurrentDir, но я проверял и уверен, что '.\' всегда указывает на папку, в которой находится exe прогрммы
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Вадим К

Вадим К (статус: Академик), 30 апреля 2009, 10:32 [#16]:

Нет, не обязано. Не стоит надеяться. Да, может это работает в ХР, но может перестать работать в Виста. Подобные прецеденты уже были.
Галочка "подтверждения прочтения" - вселенское зло.

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

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