Delphi - otwieranie pliku za pomocą programu

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

0

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

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ą

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.

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 :)

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ć).

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.

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.

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.

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.

0

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

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:

{ 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:
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:

{ 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:
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);

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.

0
Elhatron napisał(a):

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

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

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;

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

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 ;/

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ć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1