Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98

Автооткрытие медия файла MediaPlayer

10.04.2012, 19:48. Показов 3986. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня открытие файлов осуществляется с помощью sOpenDialog, т.е. я так получаю имя файла. А как сделать так чтобы при двойном щелчке по файлу он правильно открывался моим проигрыватель, т.е. как же мне получить это название и передать его куда надо ? можно ли это ?

p.s. с++ builder 6, winXP
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2012, 19:48
Ответы с готовыми решениями:

Автооткрытие файла
Подскажите, плз, что не так в процедуре? Нужно чтобы отчет сохранился в формате RTF и автоматически открылся в Word. Сохраняется, но...

MediaPlayer. выгрузка файла в темп
Здравствуйте, для проигрывания музыки на форме сделал следующее: var rStream: TResourceStream; fStream: TFileStream; ...

MediaPlayer, проверить наличие открытого файла
мне лень мониторить все загружаемые файлы в медиаплеер, мб есть какой нибудь упрощенный способ проверить наличие открытых файлов в мп,...

18
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.04.2012, 22:46
Ассоциировать определенные типы файлов с вашим приложением.
1
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
10.04.2012, 22:51  [ТС]
это то само сабой, но ведь он не открывает при таком открытии, просто черный экран, как будто ничего и не было
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.04.2012, 23:09
А, может, и вправду, ничего и не было ?
1
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
10.04.2012, 23:45  [ТС]
ну у меня вот так выглядит, но вот как туда передать при открытии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
sOpenDialog1->Filter =
       "*.avi;*.mpg;*.mpeg;*.mp3|";
  
   file_name = sOpenDialog1->FileName;
   MediaPlayer1->FileName = sOpenDialog1->FileName;
   MediaPlayer1->Open();
 
   sSpeedButton3->Enabled = True;
   MediaPlayer1->Display = Form1;
  
   MediaPlayer1->DisplayRect = Rect(left,top,sw*1.8,sh*1.8);
   MediaPlayer1->Play();
P.s. Код значительно порезан ))
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2012, 03:10
Имя файла передается как параметр командной строки ParamStr(1) вот и открывай его в FormCreate
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.04.2012, 04:03
И все же, я думаю, речь идет об этом (взято с вражеского форума):
Хочу, чтобы при двойном клике на файле с моим расширением запускалась моя прога.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TRegistry * reg = new TRegistry;
reg->RootKey = HKEY_CLASSES_ROOT;
reg->OpenKey(".txt",true);  // ветка с расширением
reg->WriteString("","txtfile");
reg->CloseKey();
reg->OpenKey("txtfile",true);
reg->WriteString("","txt-файл, просто текстовый файл");  // описание
reg->OpenKey("txtfile\\DefaultIcon",true);
reg->WriteString("","C:\\Project1.exe,0");  // иконка
reg->CloseKey();
reg->OpenKey("txtfile\\shell\\open\\command",true);
reg->WriteString("","C:\\Project1.exe");  // программа для открытия
reg->CloseKey();
delete reg;
Всё работает отлично, ну или почти.
Проблема в том, если прогу переместить, то после этого при клике на файле она не запускается! Хочу сделать так чтобы путь вот в этих строчках
C++
1
2
reg->WriteString("","C:\\Project1.exe");  // программа для открытия
reg->WriteString("","C:\\Project1.exe,0");  // иконка
менялся автоматически.
Решение:
C++
1
2
3
4
5
6
7
...
reg->WriteString("",String(Application->ExeName+",0").c_str());  // иконка
...
//путь к программе и имя открываемого файла (%1)
// лучше заключить в кавычки, а то вдруг они будут пробелы содержать
reg->WriteString("",String("\""+Application->ExeName+"\" \"%1\"").c_str());  // программа для открытия
...
1
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
11.04.2012, 23:31  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Имя файла передается как параметр командной строки ParamStr(0) вот и открывай его в FormCreate
все бы хорошо, но не как не могу найти где описана эта функция, выдает ошибку Call to undefined function
ParamStr(0). И я правильно понимаю она возвращает ansiString ? И что она возвращает, если как бэ ничего не открывал автозапуском. Надеюсь не вот этот заголовочник, а то от него ошибок много сыпятся?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.04.2012, 23:40
Цитата Сообщение от DexMipt Посмотреть сообщение
все бы хорошо, но не как не могу найти где описана эта функция, выдает ошибку Call to undefined function
ParamStr(0).
Со справкой не дружим? Тогда смотрим картинку...
Миниатюры
Автооткрытие медия файла MediaPlayer  
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2012, 23:42
Когда программа зарегистрировала свои расширения в реестре то при открытии этих файлов(с эти расширением),файлы (пути к ним) передаются как аргументы в программу.

ParamStr(0); - путь к exe файлу программы, т.е сама программа
ParamStr(1),ParamStr(2)....ParamStr(n) - String-параметры передаваемые в программу как аргументы(твои файлы)
ParamCount() - количество аргументов
1
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
12.04.2012, 01:40  [ТС]
Я добавил в событие FormCreate вот это. Я его урезал, но вобщем так.

C++
1
2
3
4
5
6
7
8
    AnsiString temp_name = NULL;
    temp_name = ParamStr(0);
 
    if (temp_name != NULL){
      MediaPlayer1->FileName = temp_name;
      MediaPlayer1->Open();
      MediaPlayer1->Play();
     }
Но он, если открывать просто саму программу пишет не удается определить тип устройства по указанному расширению файла, а если какой нить медия файл то опять же ничего не происходит. Что я точно делаю не так. И что-то не смог найти такой темы в Архангельском.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.04.2012, 01:42
C++
1
2
String temp_name = "";
temp_name = ParamStr(1); /* 1 (один) !!! */
1
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
12.04.2012, 02:18
Можете воспользоватся этой статьёй: http://www.piter-press.ru/atta... at=exc&n=0 Мне она очень помогла.
Или этим кодом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
MediaPlayer1->FileName = OpenDialog1->FileName;
MediaPlayer1->Open();
}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MediaPlayer1->Play();
}
//---------------------------------------------------------------------------
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.04.2012, 02:48
Архангельский стр 70
Миниатюры
Автооткрытие медия файла MediaPlayer   Автооткрытие медия файла MediaPlayer   Автооткрытие медия файла MediaPlayer  

2
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
12.04.2012, 16:45  [ТС]
Чувствую, что ответ уже близок, но все равно ничего не происходит. Т.к. при открытии файла моим проигрывателем он даже в условие не проходит. Код вставлен в TForm1::FormCreate().
C++
1
2
3
4
5
6
7
8
9
    String temp_name = "";
    temp_name = ParamStr(1);
 
    if (temp_name != ""){
      sLabel1->Caption  =  temp_name; // так как в итоге тут ничего тут не вывелось
      MediaPlayer1->FileName = temp_name;
      MediaPlayer1->Open();
      MediaPlayer1->Play();
      }
p.s. я думаю ничего в реестр не прописывать.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.04.2012, 17:01
Вы невнимательны, либо читать не умеете

C++
1
2
3
4
5
 if (ParamCount()>0){  // страница 72
      String temp_name= ParamStr(1);
      sLabel1->Caption  =  temp_name;
      MediaPlayer1->FileName = temp_name;
    //.....
1
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
12.04.2012, 18:57  [ТС]
Написал вот так, вот опять ничего не происходит, опять условие if (ParamCount()>0) не выполняется. Я правильно, понимаю, что он должен работать, когда я нажму на нужный файл открыть с помощью и выберу мою программу, то как раз все будет норм ?
C++
1
2
3
4
5
6
7
  if (ParamCount()>0) {
    String temp_name= ParamStr(1);
    sLabel1->Caption = temp_name;
    MediaPlayer1->FileName = temp_name;
    MediaPlayer1->Open();
    MediaPlayer1->Play();
  }
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.04.2012, 19:11
Вывод один - твое приложение не зарегистрировало расширения

Добавлено через 5 минут
Пробуй ф-ции для регистрации

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void RegExt(String ProgName,String Ext,String ExtName,int index)
{
 TRegistry *reg = new TRegistry;
 reg->RootKey = HKEY_CLASSES_ROOT;
 
 reg->OpenKey(Ext,true);
 reg->WriteString("",ExtName);
 reg->CloseKey();
 
 reg->OpenKey(ExtName+"\\DefaultIcon",true);
 reg->WriteString("",ParamStr(0)+","+String(index));
 reg->CloseKey();
 
 reg->OpenKey(ExtName+"\\shell\\open\\command", true);
 reg->WriteString("",ParamStr(0)+" \"%1\""); // кажется здесь у Архангельского нет кавычек в чем проблема
 reg->CloseKey();
 
 reg->Free();
}
//----------------------------------------------------------
void UnRegExt(String Ext,String ExtName)
{
 TRegistry *reg = new TRegistry;
 reg->RootKey = HKEY_CLASSES_ROOT;
 
 reg->DeleteKey(Ext);
 reg->DeleteKey(ExtName);
 reg->Free();
}
//----------------------------------------------------------
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
12.04.2012, 19:26
Avazart, сколько можно толочь воду в ступе, подсовывая один и тот же ранее предложеный код то в виде скана из книги, то еще как-нибудь? Количество сообщений - далеко не всегда качество.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2012, 19:26
Помогаю со студенческими работами здесь

Использование ProgressBar для отображения времени проигрывания файла MediaPlayer
У меня вопрос, как можно задействовать элемент управления progressBar для отображения времени проигрывания мультимедиа файла, загруженного...

Как указать не полный адрес Uri для воспроизведения файла MediaPlayer() C++
Указываю ссылку для открытия файла MediaPlayer Uri^ uri = gcnew Uri("img\\main.wav", System::UriKind::Relative); Ошибок нет, но он не...

"constructor MediaPlayer in class MediaPlayer cannot be applied to given types"
Проблема в строке "37--final MediaPlayer mp = new MediaPlayer(this,R.raw.sample);" Ошыбка : Error:(39, 41) error: constructor...

Автооткрытие сообщений
Всем доброго. Всех с Новым Годом! Связал Outlook с Access, при получении писем в Access не отображается содержимое письма, до тех пор, пока...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru