Delphi - otwieranie pliku za pomocą programu

Delphi - otwieranie pliku za pomocą programu
EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Witam!!

W jaki sposób mogę zrobić abym napisanym przez siebie programem mógł otwierać pliki typu mp3, ogg, wav??

Z góry dziękuję za pomoc

edytowany 1x, ostatnio: olesio
szopenfx
  • Rejestracja:prawie 21 lat
  • Ostatnio:5 miesięcy
0

Zacząć od podstaw czyli przeczytać książkę/kurs ew. pobrać gotowca

EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Fajnie - tylko, że ja już mam praktycznie w 100% gotowy i praktycznie w 100% dopracowany odtwarzacz któremu potrzebuję dopisać jedną formułkę któraby odpowiadała za ładowanie pliku razem ze startem programu (bo tak widzę otwieranie za pomocą programu) i przeszukiwanie kursów nie jest zbyt dobrym rozwiązaniem, gdyż tam są totalne podstawy typu dodawanie komponentów, a nie takie rzeczy jak wyżej wymienione otwieranie za pomocą

szopenfx
Może napiszesz czego szukasz? Nie umiem się doczytać z czym masz problem czy z samym otwieraniem/odtwarzaniem plików - do tego są różne biblioteki np. bass lub standardowy komponent bodajże MediaPlayer czy chodzi ci o skojarzenie twojego programu z ww. rozszerzeniami tak (domyślam się) napisałeś w drugim poście odnośnie tego jest kilka rozwiązań Jak skojarzyć moją aplikację z rozszerzeniem danego typu
EL
Aha ok :). A dałoby się tą metodą jakoś pobrać nazwę pliku?? Bo mój program ma pliki konfiguracyjne, które zapamiętują nazwę playlisty i ostatnio odtwarzany plik i gdyby przy otwieraniu pobrałoby mi lokalizację pliku mógłbym ją wstawić w ten plik konfiguracyjny i z niego by mi pobrało
1
Elhatron napisał(a):

Fajnie - tylko, że ja już mam praktycznie w 100% gotowy i praktycznie w 100% dopracowany odtwarzacz

Nie no serio, 40 linijek JUŻ?! Boże to chyba najdłuższy projekt jaki w życiu pisałeś.
Naprawdę, to że użyłeś jakiegoś komponentu nie robi na nas wrażenia.

W jaki sposób mogę zrobić abym napisanym przez siebie programem mógł otwierać pliki typu mp3, ogg, wav??

Czyli: Masz prawie w 100% gotowy odtwarzacz, ale nie umiesz do niego pliku załadować? Zabawne bo wydawało mi się że to podstawowa funkcja.
Sprecyzuj pytanie co chcesz osiągnąć i popytaj googla, na 999999% coś znajdziesz.

EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

chodzi mi o otwieranie za pomocą, bo faktycznie standardową metodę otwierania mam. Faktycznie nie sprecyzowałem.

Aha - i nie 40 tylko (sprawdzę by nie skłamać...) 1349 :)

_13th_Dragon
To o jakieś 1300 za dużo jak na taki projekt.
EL
to chyba nie wiesz jakie mżliwości mu dałem :) - ale nie chodzi mi tu o jakieś przechwalania się czy coś bo napisanie odtwarzacza to nie osiągnięcie mount everestu programistycznego - chodzi mi tylko o to otwieranie za pomocą
_13th_Dragon
Dodaj otwieranie za pomocą ręcznie, a potem znajdź regedit'em gdzie i co się dodało.
1

Aha - i nie 40 tylko (sprawdzę by nie skłamać...) 1349

To żeś nam zaimponował. 1349 linii programu odtwarzającego muzykę który nawet nie ma podpięcia się pod menu kontekstowe i autor nie wie jak to zrobić. Pewnie masz tam wszystko tylko nie to co potrzebne, bo w końcu nic przydatnego nie umiesz zrobić. Ale może zakończmy debatę nad tym dlaczego twój program jest i tak beznadziejny, bo ciężko żebyś od razu pisał winampa czy coś tam innego.

chodzi mi o otwieranie za pomocą, bo faktycznie standardową metodę otwierania mam. Faktycznie nie sprecyzowałem.

Tak, widzę że nie umiesz się wysłowić. A rozwiązaniem na twoje problemy jest rejestr. Nie nie pytaj mnie z czym to się je. Pytaj googla. Tam również znajdziesz to czego szukasz (ale z tym może być problem bo nie umiesz się wypowiedzieć).

EL
widzę iż jesteś geniuszem programistycznym i zarabiasz na tym grube miliony, że aż nie chcesz się tym podzielić z nikim "Ale może zakończmy debatę nad tym dlaczego twój program jest i tak beznadziejny, bo ciężko żebyś od razu pisał winampa czy coś tam innego" - to byś się ... zdziwił :]
0

to byś się ... zdziwił :]

Stary, ja się dziwię że to napisałeś patrząc na twoje posty na tym forum! Otwieramy szampana?

widzę iż jesteś geniuszem programistycznym i zarabiasz na tym grube miliony, że aż nie chcesz się tym podzielić z nikim

Widzę że nie znasz wartości wiedzy.

Btw. Gratuluję długiego komentarza w którym większość treści to moja quota.

EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Naprawdę myślisz, że wszystkie tyczyły się JEDNEGO i TEGO SAMEGO programu??!! Gratuluję :)

0
Elhatron napisał(a):

Naprawdę myślisz, że wszystkie tyczyły się JEDNEGO i TEGO SAMEGO programu??!! Gratuluję :)

Widzę że masz problem z zachowaniem równowagi emocjonalnej, pozwolę tobie ochłonąć. Miło się gadało.

EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0
-123oho napisał(a):

Widzę że masz problem z zachowaniem równowagi emocjonalnej, pozwolę tobie ochłonąć. Miło się gadało.

To ogarnij jeszcze daty postów i to, że to nie jest pierwsze forum z jakiego korzystam. Muszę się z tobą zgodzić, iż nie warto kontynuować tej rozmowy, bo przez to, że chciałem się grzecznie spytać o poradę, przy czym odrobinę się pomyliłem, doszło do tego, że obaj na wzajem się denerwujemy.

edytowany 1x, ostatnio: Elhatron
pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:13 dni
  • Postów:819
0

@Elhatron
Czytam i nie rozumiem o co Ci chodzi.
Możesz podać parametr w linii poleceń (np. nazwę utworu który ma być otwarty) i przy starcie programu odczytać go funkcją ParamStr.

_13th_Dragon
O rzesz, trafiłeś! Czy będę mógł pożyczać twoją szklaną kulę?
EL
A wiesz może jak przy zastosowaniu tej funkcji uniknąć czegoś takiego, ze zamiast kilku parametrów uruchamianych w jednym programie uruchamia mi się program tyle razy ile plików chciałem otworzyć?? Żeby było jaśniej - gdy otwieram jeden plik to otwiera się jak należy, natomiast kiedy chcę otworzyć np. 3 pliki - program otwiera mi się 3 z każdym plikiem osobno. Jak tego unikąć??
_13th_Dragon
"c:\sciezka\program.exe" "%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9"
EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Dzięki!! Takie coś idealnie pasuje do mojego programu

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
0
Elhatron napisał(a)

Dzięki!! Takie coś idealnie pasuje do mojego programu

Jeszcze nie, nie ciesz się tak szybko;

Przede wszystkim jeśli chcesz, by aplikacja w pełni obsługiwała pliki np. mp3, musisz skojarzyć je z Twoją aplikacją; Bo co z tego, że obsłużysz parametry podczas uruchamiania programu, jeśli klikając na plik mp3 dwukrotnie zostaną odpalone w innym programie? No właśnie, tu jest problem; Trzeba więc dodać kilka kluczy do rejestru, które pozwolą po dwukrotnym kliknięciu na plik uruchomić go w Twoim programie, ustawią dla niego wybraną ikonę a także podpis pliku (tag); Nie jest to wiele roboty, a funkcjonalność programu wzrasta;

Kiedyś kiedyś sam szukałem takiej informacji i znalazłem bardzo proste rozwiązanie - dwie procedury służące do rejestrowania rozszerzenia w systemie (stosowany w instalatorze programu) oraz usunięcia go (użyty podczas deinstalacji aplikacji); Poniżej zamieszczam kod procedur - mam nadzieję, że Ci się przydadzą;

Rejestrowanie rozszerzenia w systemie:

Kopiuj
{ REGISTER FILE EXTENSION }
procedure RegisterFileExtension(Extension, ExtensionName, ApplicationName,
                                FileTag, IconPath: String);
const
  HKEY_CLASSES_ROOT = Cardinal(2147483648);
begin
  with TRegistry.Create() do
    try
      { ROOT KEY }
      RootKey := HKEY_CLASSES_ROOT;
      { EXTENSION }
      OpenKey(Extension, True);
      WriteString('', ExtensionName);
      CloseKey();
      { TAG }
      OpenKey(ExtensionName, True);
      WriteString('', FileTag);
      CloseKey();
      { OPEN COMMAND }
      OpenKey(ExtensionName + '\Shell\Open\Command', True);
      WriteString('', '"' + ApplicationName + '" "%1"');
      CloseKey();
      { DEFAULT ICON }
      OpenKey(ExtensionName + '\DefaultIcon', True);
      WriteString('', IconPath);
      CloseKey();
    finally
      Free();
    end;
end;

Znaczenie parametrów:

Identyfikator Opis
Extension nazwa rozszerzenia (koniecznie z kropką jako pierwszy znak!)
ExtensionName pełna nazwa rozszerzenia
ApplicationName pełna nazwa pliku wykonywalnego aplikacji
FileTag opis pliku (widoczny w eksploratorze Windows pod nazwą pliku)
IconPath ścieżka do ikony, jaką mają przyjmować pliki o rejestrowanym rozszerzeniu
Przykładowe wywołanie:
Kopiuj
RegisterFileExtension('.cnot',
                      'CoolNotepadProject', 
                      'C:\Program Files\CoolNotepad\clntpd.exe', 
                      'Plik projektu programu Cool Notepad', 
                      'C:\Program Files\CoolNotepad\Graph\ProjectIcon.ico');

Wyrejestrowywanie rozszerzenia z systemu:

Kopiuj
{ UNREGISTER FILE EXTENSION }
procedure UnregisterFileExtension(Extension: String);
const
  HKEY_CLASSES_ROOT = Cardinal(2147483648);
var
  sKeyName: String;
begin
  with TRegistry.Create() do
    try
      { ROOT KEY }
      RootKey := HKEY_CLASSES_ROOT;
      { KEYS }
      if OpenKeyReadOnly(Extension) then
        begin
          sKeyName := ReadString('');
          CloseKey();
          DeleteKey(sKeyName);
        end;

      DeleteKey(Extension);
    finally
      Free();
    end;
end;

Znaczenie parametrów:

Identyfikator Opis
Extension nazwa rozszerzenia (koniecznie z kropką jako pierwszy znak!)
Przykładowe wywołanie:
Kopiuj
UnregisterFileExtension('.cnot');

I to tyle; Przetestuj sobie podane przeze mnie kody procedur na rozszerzeniu, które jeszcze nie istnieje w systemie; Procedury trzeba zmodyfikować - trzeba dodać tworzenie backup'u jeśli dane rozszerzenie jest już wykorzystywane przez jakiś program, ponieważ po odinstalowaniu Twojego rozszerzenie będzie samotne (nieskojarzone z żadnym programem);


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
EL
Chwileczkę!! Czy czasem rejestrowanie rozszerzenia nie dotyczy rozszerzeń które wcześniej nie istniały w systemie?? Jak skojarzyć moją aplikację z rozszerzeniem danego typu
flowCRANE
A jaka to różnica czy istnieją w systemie czy nie? Jeśli nie istnieją to wystarczy ten kod, jeśli istnieją to też, ale wypadałoby backup'a zrobić, bo jak odinstalujesz swoją aplikację to pozbawisz wcześniejszej obsługi tych plików;
EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Dzięki za pomoc, ale tamto na prawdę mi pomogło :). Mój program ma pliki konfiguracyjne, z których ładuje informacje o ostatnio używanym pliku audio i ostatnio używanej playliście. Na samym początku ustawiłem sobie, że program pobiera ścieżki plików, ładuje je do pliku playlisty tymczasowej, następnie do pliku konfiguracyjnego, później następują kolejne procesy ładowania danych z pliku konfiguracyjnego.

pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:13 dni
  • Postów:819
0
Elhatron napisał(a):

Dzięki!! Takie coś idealnie pasuje do mojego programu

Wypada zaznaczyć/zaakceptować odpowiedź, która rozwiązała problem.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
0
Elhatron napisał(a)

Dzięki za pomoc, ale tamto na prawdę mi pomogło

Czyli nie zrozumiałeś treści mojego postu;

Jeśli program ma w pełni wspierać dane rozszerzenie to pliki o danym rozszerzeniu musza być skojarzone z daną aplikacją; U Ciebie jak do tej pory tego nie ma, więc jest lipa... Myślisz, że każdy użytkownik będzie wiecznie klikał PPM -> Otwórz za pomocą -> NazwaTwojegoProgramu ? Ja taki program od razu usunąłbym z dysku; Nie po to masz kojarzenie rozszerzenia z aplikacją, żeby utrudniać sobie pracę; Po to właśnie rejestruje się w systemie dane rozszerzenie, ustala się nazwę i ścieżkę aplikacji, która będzie obsługiwać takie pliki oraz ustawia się tag i ikonę; Po to to właśnie jest, by z tego korzystać; Jak tego nie ma, powtarzam - totalna lipa; Wszystkie programy, które mają obsługiwać dany plik są z nim skojarzone i wymuszają to podczas instalacji (lub ma się to do wyboru);

To co już masz to tylko część rozwiązania, kolejną część podałem Ci w poprzednim poście;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
_13th_Dragon
Na siłę nikogo niczemu nie nauczysz. ;P
flowCRANE
Co za pech, że taki uparty... ;]
pelsta
No bez przesady. Można też PPM -> Otwórz za pomocą -> Wybierz program... -> Zawsze używaj wybranego programu do otwierania tego typu plików i system sobie to zapamięta. Nie stresuj początkujących programistów.
flowCRANE
Ja? Stresuję? Bzdura, ale skoro wolicie takie rozwiązania to prosze bardzo, powodzenia... O.o
EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Aha, ok. Ale czły czas nie wiem czemu przy próbie otwarcia kilku plików na raz każdy z nich otwiera mi się w osobnym oknie programu, a nie w jednym oknie

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0
Elhatron napisał(a):

Aha, ok. Ale czły czas nie wiem czemu przy próbie otwarcia kilku plików na raz każdy z nich otwiera mi się w osobnym oknie programu, a nie w jednym oknie

Bo tak ją zakodowałeś. Ech, ręce opadają - zero samodzielności i chęci do pokombinowania lub poszukania w google skutecznego rozwiązana. Dobra, dołaczam do tego postu kod oraz exeka przykładowego programu, który kiedyś na szybko napisałem. Masz teraz przykład w jaki sposób można obsłużyć otwieranie wielu plików. Pewnie mozna zrobić to inaczej, na przykład przez DDE, ale to sobie w końcu sam wykombinuj. A i należało by dorobić sprawdzanie czy plik/i podany/e jako parametr/y istnieje(ą), ale to już banał, więc sam to sobie dorób, bo póki co wygląda jakbyś chciał żebyśmy cały program napisali za Ciebie ;/


Pozdrawiam.
EL
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:37
0

Olesio:

Po 1. - Dzięki za pomoc. To co podesłałeś działa

Po 2. - Nie, nie proszę Ciebie/Was byś(cie) napisał(-li) za mnie cały program tylko proszę o pomoc w tym aby dało się napisany program kojażyć z rozszerzeniem i żeby otwierało się to w jednym oknie, a nie tylu ile plików próbowałem otworzyć. To tylko element programu, a nie jego całość. Ja to widzę tak jak składanie kompa. Jak będziesz chciał go złożyć sam to będziesz wszystkie elementy robił sam?? Dysk, ram, procesor płytę gł. itd.?? Oczywiste, że te elementy kupisz, a i tak będzie się liczyło, że kompa złożyłeś sam. Tak samo widzę to. Ja pytam tylko o jeden element programu a nie całość, bo jak wcześniej zaznaczyłem mam go prawie gotowego, tylko brakuje mu kojażenia go z plikiem. Z resztą pisząc ten program większość rzeczy robiłem sam, sam do tego dochodziłem, szukałem w google i też pytałem na forach, ale zawsze tylko o jeden element podchodząc do tego z myślą, aby się przy okazji czegoś jeszcze nauczyć.

edytowany 2x, ostatnio: Elhatron
_13th_Dragon
"Oczywiste, że te elementy kupisz" - właśnie kupisz, nie otrzymasz za darmo. Już mówiłem w tym temacie jak to zrobić, dwukrotnie!
EL
no w sumie racja - w ten sposób sam siebie pocisłem :)
EL
i w tej sytuacji znowu miałem okazję nauczyć się czegoś nowego, nie koniecznie z dziedziny programowania

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.