Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Asocijacija =]

[es] :: Pascal / Delphi / Kylix :: Asocijacija =]

[ Pregleda: 2706 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.som.sezampro.yu

Sajt: www.activecollab.com


+1 Profil

icon Asocijacija =]01.06.2003. u 20:46 - pre 232 meseci
Kako da asociram neke ekstenzije sa svojim programom i kako da nateram porgram da se pokrene i otvori neki fajl kad neko dva put klikne na njegovu ikonu?

Znate ono: stoji Word fajl, ja dva puta kliknem na njega, pokrene se word i otvori fajl =]
http://www.activecollab.com - Alat za upravljanje projektima
 
Odgovor na temu

Zekica
Filip Milivojević
Pirot, Niš

Član broj: 2856
Poruke: 309
212.124.182.*

Jabber: zekica@elitesecurity.org
Sajt: www.pirotcity.com


+10 Profil

icon Re: Asocijacija =]03.06.2003. u 20:39 - pre 232 meseci
Teorija:
Windows čuva asocijacije tipova file-ova u registry-ju, i to u HKEY_CLASSES_ROOT.
tu se nalaze mnoge stvari (koje možeš videtu iz regedit-a), a među njima i dve bitne za
ovaj problem:

1. Pod-kljucevi .ext - u njima se nalazi samo jedan default-value sa imenom pod-ključa, koji
odredjuje sve ostalo.

Npr:
ključ .txt sadrži vrednost txtfile.
postoji ključ txtfile u kome su sva ostala podesavanja.

Note: Ovo je uradjeno iz samo jednog razloga:
vise tipova file-ova može da otvara isti program...


2. Pod-ključevi npr txtfile - u njima se nalaze sve informacije o ikonici, programu koji otvara file...

U ovom kjuču se nalaze mongi podključevi, od kojih su najvažniji:
DefaultIcon, koji određuje ikonu file-a

DefaultIcon ključ sadrži default value koji predstavlja ime ikone file-a
u formatu: \path\to\file.ext, iconindex

primer: C:\Windows\notepad.exe,1


Shell, koji određuje koje akcije mogu da se rade nad file-om, koji program uporebiti...

Shell ključ sadrži kao default value ime pod-ključa, koji je podrazumevana akcija (open ako je izostavljeno), i pod-ključeve sa akcijama koje mogu da se primene nad tim file-om.
Npr: open, print...

Bilo koji od ovih, recimo open sadrži kao default value ime akcije, koje će biti prikazano u meniju, kada se na file klikne desnim tasterom, i još neke pod-ključeve, od koji je najbitniji:
command - koji kao default value sadrži program koji treba da se izvrši:

primer: C:\Windows\notepad.exe "%1"

dakle ovako:

Code:

HKEY_LOCAL_MACHINE
    .txt
        (Default)=txtfile
    txtfile
        (Default)=Fajl sa tekstom
        DefaultIcon
            (Default)=C:\Windows\notepad.exe,1
        Shell
            (Default)=print
            open
                (Default)=Otovri ovaj file
                command
                    (Default)=C:\Windows\notepad.exe "%1"
            print
                (Default)=Odstampaj ovaj file
                command
                    (Default)=C:\Windows\notepad.exe /p "%1"

Ovo je samo primer, moglo je i drugacije...


Izvinjavam se na dugom postu, ali to je bilo potrebno objasniti.
Ovo, predpostavljam da nisi baš razumeo, mada ne znam... :-)

Praksa:
Evo ipak malo koda, koji će uraditi gore pomenuto...

Ovako, prvo treba ubaciti unit za rad sa registry-jem:
Code:

uses ..., Registry;


Onda, treba negde ubaciti proceduru (samo primer):

Code:

procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CLASSES_ROOT;
reg.OpenKey('.ext',true);
reg.WriteString('','extfile');
reg.CloseKey;
reg.OpenKey('extfile',true);
reg.WriteString('','Ovo je file .EXT');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\DefaultIcon',true);
reg.WriteString('','C:\path\to\icon.exe, 0');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell',true);
reg.WriteString('','Open');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell\Open',true);
reg.WriteString('','Otvori ovaj file');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell\Open\command',true);
reg.WriteString('','C:\path\to\exe.exe "%1"');
reg.CloseKey;
reg.Destroy;
reg.OpenKey('Prgname.Extenzija\Shell\Print',true);
reg.WriteString('','Otvori ovaj file');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell\Print\command',true);
reg.WriteString('','C:\path\to\exe.exe /p "%1"');
reg.CloseKey;
reg.Destroy;
end;


Nadam se da je jasno, i unapred se izvinjavam, ako je ovo bilo dosadno, ali mislim da je vredelo...

Pozdrav.
Sad ja znam zašto sam vam ovo ispričao, ovo će sigurno nekome koristiti....
 
Odgovor na temu

silverglider

Član broj: 651
Poruke: 218
*.dip.t-dialin.net

Sajt: www.benchmark.co.yu


Profil

icon Re: Asocijacija =]03.06.2003. u 23:07 - pre 232 meseci
http://msdn.microsoft.com/libr.../shell_adv/registeringapps.asp


Ima dosta zanimljivih stvari u MSDN-u, a postoji i online verzija na:
http://msdn.microsoft.com/library/default.asp
 
Odgovor na temu

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.som.sezampro.yu

Sajt: www.activecollab.com


+1 Profil

icon Re: Asocijacija =]08.06.2003. u 01:13 - pre 232 meseci
OK, asocijaciju sam odradio, medjutim, imam drugi manji problem: koju poruku i kako da obradim da bi se asocirani fajl otvorio u mom programu kada dva puta kliknem na njega ili odaberem svoj program iz OpenWith liste? Pregledao sam neki kod i uspeo da ga nateram da radi to, medjutim, problem je sto moje resenje radi samo kad je bar jedna instanca programa pokrenuta (deo koda preuzet iz JEDIEdit projekta).

Najsimpaticnija stvar je sto su neke stvari koje se korisnicima cine izuzetno logicnim (gornji primer) ponekad prava glavolomka za programera!!! =]
http://www.activecollab.com - Alat za upravljanje projektima
 
Odgovor na temu

Crazy Mix
Nemanja Avramovic
QuadraSoft
Mladenovac

Član broj: 7103
Poruke: 331
*.telekom.yu

ICQ: 266136396
Sajt: www.quadrasoft.co.sr


Profil

icon Re: Asocijacija =]29.06.2003. u 13:30 - pre 231 meseci
Nisam te razumeo bas najbolje, ali ovaj kod ti je podrska za Open With/2xLk

Code:
if paramstr(1)<>'' then begin
//kod ucitavanja
memo1.lines.loadfromfile(paramstr(1)); //primer, mozes uraditi sta zelis
end;


Jah rastafari!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Asocijacija =]

[ Pregleda: 2706 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.