Kojarzenie typu pliku i brak ikony :|

0

Cześć. Więc chciałem skobie skojarzyć jakiś typ plików z moim programem. Robię to jakby na dwa sposoby.
Tzn. kojarzenie typu pliku, który nie istnieje w komputerze(nie jest nigdzie zarejestrowany) - z tym niby nie ma problemu, ale:

Tworzę w HKEY_CLASSES_ROOT w rejestrze klucz, np: '.juh'
Wpisuje mu domyślną wartość: 'juhasFile'

Zamykam klucz i tworzę klucz: 'juhasFile\DefaultIcon', tam w wartości domyślnej wpisuję(programowo): application.ExeName+',1';

Zamykam klucz i tworzę kolejny:
juhasFile\shell\open\command
W wartości domyślnej wpisuje: application.ExeName+' %1';
(też programowo oczywiście :))

I ładnie, plik się uruchamia w moim programie, ale nie ma ikony!
tzn. ma tą zwykłą: MS.
Nie wiem, o co chodzi. Przeglądałem inne klucze w rejestrze, ale mają to samo, ale ikone mają...

Dlaczego mój plik nie ma ikony???

Druga sprawa to kojarzenie typu pliku, który już istnieje w komputerze(np. .jpg).

Robię to tak, że po prostu zapisuję (TRegistry.SaveKey) ten klucz to pliku(tzn. .jpg), a potem zmieniam wartość domyślną z jpegfile na juhasFile

A z resztą postępuję tak samo, jak wyżej... I podobna sytuacja. Uruchamia się w moim programie, ale ikonę ma z ie :|

O co więc chodzi z tymi ikonami?

0

W głównym programie przez który otwierasz nowo zarejestrowne pliki musisz mieć ID ikony. Sama ikona główna od programu nie wystarcza. Musi być jeszcze jedna dodatkowa o np: numerze 2. Potem odwołujesz się przy kojarzeniu rozszerzenia do tego numerka.

Tak to mniej więcej wygląda w teorii.

A najlepiej to zobacz źródło tam są dwie ikony w jednym exeku z czego jedna to ikona programu, a druga to ikona pliku skojarzonego:
http://www.wiresslan.pl/darck/pliki/delphi-source/inne/Ink.rar :)

0

A ja myślę, że to sprawa podania numeru ikonki, która nie istnieje. Wydaje mi się, że bez problemu może to być ikonka główna programu, tylko że trzeba podać 0 jako jej index, a u ciebie jest: application.ExeName+',1';

0
Opi napisał(a)

W głównym programie przez który otwierasz nowo zarejestrowne pliki musisz mieć ID ikony. Sama ikona główna od programu nie wystarcza. Musi być jeszcze jedna dodatkowa o np: numerze 2. Potem odwołujesz się przy kojarzeniu rozszerzenia do tego numerka.

Tak to mniej więcej wygląda w teorii.

A najlepiej to zobacz źródło tam są dwie ikony w jednym exeku z czego jedna to ikona programu, a druga to ikona pliku skojarzonego:
http://www.wiresslan.pl/darck/pliki/delphi-source/inne/Ink.rar :)

Fajnie, ale, że to jest to samo, co jest tu w serwisie i nie ma nigdzie nic, czego nie zrobiłem(poza tym, że chyba ikony są w pliku rez)

0
thenkles napisał(a)

A ja myślę, że to sprawa podania numeru ikonki, która nie istnieje. Wydaje mi się, że bez problemu może to być ikonka główna programu, tylko że trzeba podać 0 jako jej index, a u ciebie jest: application.ExeName+',1';

Zmiana na 0 też nic nie daje.

0

:0 no to rzeczywiście...

Ja pamiętam kiedyś tym programem

Ale gdy zmieniłem np: ikonkę na swoją lub rozszerzenie to już nie było fajnie... :(
Nie wiem o co w tym chodzi

Może o jakiś sposób zapisu tej ikony do zasobów, jej rozmiar i głębię koloru
lub właśnie o ten numerek ID ikony... ;)

0

może po prostu o to chodzi że windows se cachuje ikonki skojarzone z rozszerzeniami i po prostu zapamiętał że wcześniej dla rozszerzenia .juh była zwykła ikonka windowsa to nie patrzył na rejestr tylko ją jeb na ekran, mnie to cache czasami wkurza jak nadpiszę sobie w programie graficznym ikonkę to jakbym nie odświerzał to jest ta stara cały czas pokazana ikonka, dopiero po zresetowaniu cache ikon jest ok, a BTW jak w programie jest tylko MainIcon i nie ma ponumerowanej żadnej innej ikonki to w ogóle nie powinno się chyba nic podawać po przecinku, nawet przecinka nie powinno siędawać, a drugie BTW to że się kiedyś tu pytałem jak programowo odświerzyć cache ikon i mi nikt nie odpowiedział :(

0

może po prostu o to chodzi że windows se cachuje ikonki skojarzone z rozszerzeniami i po prostu zapamiętał że wcześniej dla rozszerzenia... [...]

Raczej nie :)

Bo tym programikiem własnie wszystko idzie dobrze.

Tylko dlaczego w nim działa, a jak samemu zrobisz to nie ?? ;)

a drugie BTW to że się kiedyś tu pytałem jak programowo odświerzyć cache ikon i mi nikt nie odpowiedział

W Windows XP usuwasz plik: IconCache.db
A najlepiej to go od nowa utworzyć (0 bajtów), żeby plik instaniał.
Plik jest ukryty w lokalizacji:
C:\Documents and Settings\USER\Ustawienia lokalne\Dane aplikacji :)

0

to wiem, ale to nie wystarcza, nie wiem jak w XP ale w 98/ME trzeba jeszcze odświeżyć explorera i nie wiem właśnie tego jak się robi

0

to wiem, ale to nie wystarcza, nie wiem jak w XP ale w 98/ME trzeba jeszcze odświeżyć explorera i nie wiem właśnie tego jak się robi

Zamknąć proces Explorer.exe i ponownie go uruchomić np: start/uruchom/explorer.exe

Jeśli chodzi o XP oczywiście... :)

0

OK, Panowie. Zrobiłem bez żadnego przecinka(czyli po prostu w defaultIcon dałem ścieżkę do execa) i działa.

A moje pytanie kolejne, to jak dodać do EXECA kilka ikon i, żebym wiedział, która ma jakie ID(żeby plik.juh nie miał ikony mojego programu, tylko taką, jaką chce, która jest w execu)

Nie chcę tworzyć pliku zasobów, w którym będę miał te ikony, ale chcę je bezpośrednio mieć w execu
(żebym w rejestrze w DefaultIcon wpisywał np.: C:\program.exe,1)

0

Chyba bez zasobów to się nie obejdzie ;)

Skorzystaj z Restoratora.
Kliknij: Plik/Nowy/Nowy plik *.res
W nowym pliku wybierz Dodaj

Typ standardowy Windows ustaw na Ikona
Nazwa na: 1
I przypisz to tej jedynki ikonkę np: 1.ico

Potem Nazwa na 2 i przypisz kolejną ikonkę.

I tak w zasobach będzie kilka ikon do których odwołujesz się po tym numerku. :)

0
Opi napisał(a)

I tak w zasobach będzie kilka ikon do których odwołujesz się po tym numerku. :)

Ale przecież w wielu programach(ba, nawet w dll'kach) jest po kilka ikon.
I jak oni to robią?

Czy dodanie klauzuli:

{$R zasob.res} spowoduje dodanie tego, co w zasobie do exeka?

0

to wiem, ale to nie wystarcza, nie wiem jak w XP ale w 98/ME trzeba jeszcze odświeżyć explorera i nie wiem właśnie tego jak się robi

Zobacz w faq dla delphi. Dodalem tam art.

0

Czy dodanie klauzuli:
{$R zasob.res} spowoduje dodanie tego, co w zasobie do exeka?

TAK :d

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