[ HeyJoe @ 17.08.2005. 18:21 ] @
Nov sam pri C#, ali sam već naučio dosta. Napravio sam neko programče za otvaranje slika (u pictureBoh-ovima) sa par filtara i napravio deployment fajl. Ali, ne mogu da provalim kako da taj moj program pri instalaciji povežem sa određenim tipom fajla, tj. kako da se klikom na neku slikicu otvori moj program sa tim slikom u pictureBox1.
Ako neko zna odgovor, pomagajte?



[Ovu poruku je menjao HeyJoe dana 17.08.2005. u 19:23 GMT+1]
[ ivan74 @ 18.08.2005. 08:15 ] @
Pa ima neki "File Types Editor" nisam koristio ali bi trebalo da radi to sto ti treba
[ ivan74 @ 18.08.2005. 08:51 ] @
Malo sam pogledao, nije tesko:
dodaj setup projekat
idi na meni view/edit/file types editor
dodaj ekstenzije i to je to
imas sve u msdn-u
[ HeyJoe @ 19.08.2005. 09:20 ] @
To sam vec uradio, ali je problem sledeci:
Nakon instalacije, kada kliknem na sliku otvori se program, ali nema slike u pictureBox-u. Jedino fileList pokazuje fajlove u tom direktorijumu. Da nije u pitanju neki u parametar u Attributes polju, ili nesto slicno?
Da bi isprobao file types editor, nabrzinu sklepam neki notepad editor i povezem ga sa .txt ekstenzijom. Ista prica, editor se otvori, ali u textBox-u nema sadrzaja fajla.
???
[ dusty @ 19.08.2005. 09:43 ] @
Glupo pitanje, ali da li dobro obradjujes ulazne argumente ?
Pogledaj da li ti mozda odvaja ime fajla o patha-a kao zasebne argumente ?!
[ HeyJoe @ 19.08.2005. 10:05 ] @
ja nigde ne navodim putanju i ima fajla. Po MSDN-u bi to samo trebalo da profunkcionise. Kopka me, da nije nesto sto treba da se upise u Attributes polju, jer za sada stoji parametar po difoltu, tj "%1". Mozda tu treba ime fajla i putanja u nekom opstem obliku ili sta vec? Ako treba, kako to da izvedem?
Je l ima uopste neko ideju kako da se slika na koju kliknem pojavu u otvorenom programu?
[ dusty @ 19.08.2005. 10:56 ] @
Evvoooo reshenjaaaa

Sasvim je ispravno da kao poslednji parametar za tvoju aplikaciju stoji %1. To ce shell da pretvori u putanju do fajla i ime fajla koji se prenosi kao argument tvojoj aplikaciji kada je pokrene preko asocijacije na tip fajla.

Znaci sta tebi nedostaje je obradjujes argumente, koje se prosledjuju main metodi:
Code:

 public void Main(string[] args){
     Debug.WriteLine("Otvori fajl: " + args[0]);
}


Citat:
Po MSDN-u bi to samo trebalo da profunkcionise.


A kako zna koja metoda radi otvaranje fajla

[Ovu poruku je menjao dusty dana 19.08.2005. u 11:57 GMT+1]
[ HeyJoe @ 19.08.2005. 11:11 ] @
Citat:
A kako zna koja metoda radi otvaranje fajla


:) To je i mene bunilo, ali u ovom glupo MSDN-u nema nista o tome. Mozda i ima, ali ja nisam uspeo da nadjem.



Citat:
public void Main(string[] args){
Debug.WriteLine("Otvori fajl: " + args[0]);
}


Biti ce probano jos koliko danas, samo da stignem u stan, ovde nema .NET studio instaliran. Nadam se da sam te dobro razumeo.



[Ovu poruku je menjao HeyJoe dana 19.08.2005. u 12:12 GMT+1]
[ dusty @ 19.08.2005. 11:55 ] @
Citat:
Nadam se da sam te dobro razumeo.


Mislim da je to to Naravno,umesto onog Debug.blatruc stavices poziv za tvoju metodu koja otvara taj tip fajla.

E, ovo nije kompletna stvar !
Ima tu josh jedan problem, a to je ako hoces da radis nad grupom selektovanih fajlova (kao npr. winrar, winzip, ...). Onda mora da se napise shell extension handler, koji je, po meni, jako komplikovan zbog sijaset com interfejsa za implementaciju
Ovako ce pokrenuti po jednu instancu tvoje app za svaki selektovani fajl.

Happy coding
[ jablan @ 19.08.2005. 12:25 ] @
Citat:
dusty: Ovako ce pokrenuti po jednu instancu tvoje app za svaki selektovani fajl.

... a tvoje je da iz novopokrenute instance detektuješ da je jedna već pokrenuta i u njoj otvoriš novi tab, dodaš fajl u plejlistu ili nešto treće...

Vaistinu happy coding!
[ dusty @ 19.08.2005. 12:38 ] @
Citat:
instance detektuješ da je jedna već pokrenuta i u njoj otvoriš novi tab, dodaš fajl u plejlistu ili nešto treće


Hmmm, dobra ideja.
Ali kako onda da prenesem jednoj instanci argumente druge instance ?
[ jablan @ 19.08.2005. 13:06 ] @
Recimo .NET Remoting?
[ HeyJoe @ 21.08.2005. 13:49 ] @
Pocinjem da se osecam kao onaj iz crtanog filma:"Otvori seee... supice! Otvori seee... salamice, itd."

Sta ne valja sa ovim kodom dole?

Code:
        public void Main(string[] args)
        {
            Form1 nova=new Form1();
            args=Environment.GetCommandLineArgs();
            duzina=args.Length;
            fajl=args[0];
            for (args_indeks=1;args_indeks<=duzina-1; args_indeks+=1)
            {
                fajl=fajl+args[args_indeks];
            }
            nova.pictureBox1.Image=Image.FromFile(fajl);
            nova.Show();
        }


a probao sam i
Code:
        public void Main(string[] args)
        {
            Application.Run(new Form1());
            args=Environment.GetCommandLineArgs();
            duzina=args.Length;
            fajl=args[0];
            for (args_indeks=1;args_indeks<=duzina-1; args_indeks+=1)
            {
                fajl=fajl+args[args_indeks];
            }
            pictureBox1.Image=Image.FromFile(fajl);
            
        }


Sta god da stavim u ovaj Main(), ne izvrsava se.





[Ovu poruku je menjao HeyJoe dana 21.08.2005. u 14:50 GMT+1]
[ jablan @ 21.08.2005. 14:20 ] @
Kog ti je tipa promenljiva fajl i zašto nadovezuješ argumente na nju? Uzgred, prvi (odnosno nulti) argument je ime samog programa koji se izvršava. Pogledaj malo help.

[Ovu poruku je menjao jablan dana 21.08.2005. u 15:21 GMT+1]
[ HeyJoe @ 21.08.2005. 14:23 ] @
prom fajl je tipa string, a args je tipa string[].
jedino mi rako izgleda logicno jer je Environment.GetCommandLineArgs() tipa string[], znaci vektor



[ HeyJoe @ 21.08.2005. 14:26 ] @
Code:
Uzgred, prvi (odnosno nulti) argument je ime samog programa koji se izvršava.

efff, nezgodno.


ali , zasto onda nece da se izvrsava neka glupost koja nema veze sa Arguments, npr ako umesto for petlje i ostatka ubacim samo

From1 nova= new... itd
pivtureBox1.BackColor=Color.Red;

???
[ dacho @ 21.08.2005. 15:03 ] @
Main funkcija mora biti static.


Code:

static void Main(string[] args)
{
}



Ako nemas static void Main(string[] args) u tvom kodu, trebao bi dobiti gresku koja kaze da nemas definisan Entry Point.

[Ovu poruku je menjao dacho dana 21.08.2005. u 16:08 GMT+1]
[ dusty @ 22.08.2005. 08:43 ] @
Ne ne ne ne ne decko, tako se ne pravi aeroplan

Prvo, args=Environment.GetCommandLineArgs(); ti, ali uopste, ne treba. Argumente vec popuni shell kada se pokrene aplikacija.

Znaci:

Code:

public static void Main(string[] args)
        {
            Form1 nova=new Form1();            

            for (args_indeks=1;args_indeks<= args.Length; args_indeks+=1)
                            fajl=fajl+args[args_indeks];
            nova.pictureBox1.Image=Image.FromFile(fajl);
            nova.Show();
        }


Drugo: fajl=fajl+args[args_indeks]; mislim da si se ovde malo zbunio Npr. ako si kliknuo na fajl na c:\test.gif, drugi argument (args[1]) je taj path.

Znaci samo proveri da li postoji drugi argument i taj argument prosledi metodi Image.FromFile();

Trece, mislim da ti ovo nova.show() nece raditi, jer jos uvek ne postoji message queue. Takve pozive mozes da radis tek kada se napravi message queue, tj. posle metode Application.Start();

Nadam se da je sada malo jasnije
[ havramm @ 22.08.2005. 09:09 ] @
Citat:
dusty: Ne ne ne ne ne decko, tako se ne pravi aeroplan :)

Prvo, args=Environment.GetCommandLineArgs(); ti, ali uopste, ne treba. Argumente vec popuni shell kada se pokrene aplikacija.


Da, ali je preporucljivije koristiti upravo Environment.GetCommandLineArg posto se na taj nacin iz cele aplikacije moze pristupiti argumentima komandne linije. npr:

Code:

class Test
{
    static void Main()
    {
        ShowArgs();
    }

    private static void ShowArgs()
    {
        string[] args = Environment.GetCommandLineArgs();

        foreach (string arg in args)
        {
            Console.WriteLine(arg);
        }
    }
}