U pola noći zazvonio je telefon - klijent kome ste instalirali najnoviju verziju programa nije znao kako da dođe do neke od osnovnih funkcija. Po završetku razgovora ležete u krevet svesni da ste sve to mogli da izbegnete izradom makar kakvog Help-a... | |
Jedna od najneophodnijih komponenti svakog programa je dobar sistem za pomoć - dobar Help daće korisniku vašeg programa mogućnost da sam pronađe rešenje problema. Help sistem Windows-a je od prvih dana unifikovan, pa svi ga programi koriste iste šablone, kojima se olakšava rad sa aplikacijom. Ipak, vremena se menjaju: Windows 95 i NT 4 omogućavaju da se u help ugradi animacija ili zvuk.
|
Kreiranje Help-a
Pre nego što počnemo, proverite da li ste instalirali Internet Explorer 3 ili (još bolje) IE 4. Krenite od VB-ovog Application Wizard-a - po startovanju izaberite kreiranje Explorer Style aplikacije. U drugom prozoru Wizard-a selektujte View Help menije; po želji možete da koristite i resource fajl, mada on neće biti predmet ovog teksta. Sledeći ekran je najvažniji: izaberite korišćenje/kreiranje svog Web browser-a. Link za home page vam verovatno neće biti potreban, mada možete da umesto Microsoft-ovog stavite svoj URL. Najzad izaberite ime svog projekta (u našem slučaju ActiveHelp) i kliknite Finish. Tako ste napravili kostur aplikacije.
HTML je sada svuda - čak i Help datoteke se u novim verzijama Kada sam prvi put pokušao da izvršim program, browser je davao poruku o grešci (File not found), iako je i putanja do HTML dokumenta bila ispravna, a i on je bio na svom mestu. Posle više pokušaja došao sam do zaključka da "standardno" prikazivanje putanje tipa: C:\Test\Activehelp.html ne može da se primeni; treba koristiti file:///C:/Test/ActiveHelp.html. Ovu konverziju obavlja funkcija FstrConvertToURL sa slike 4. Predloženo rešenje sa otvaranjem programa sa Shell funkcijom ima par ozbiljnih nedostataka. Ako na više mesta pozivate Help, možete zapasti u situaciju da istovremeno budu otvorene više instanci programa, što se rešava dodavanjem koda koji proverava da li je prethodna instanca aplikacije već startovana u form_load (program ćete naći kao jedan od MSDN knowleage base topic-a). Ako je startovana, treba ili da zatvorite prethodnu instancu, ili da joj prosledite potrebne parametre. Jedno od rešenja ovog problema je slanje podataka preko DDE linka, a drugi je izvođenje Help browser-a kao ActiveX komponente. |
Kreiranje ActiveX-a
Elegantno rešenje komunikacije između vaše aplikacije i Help programa može se dobiti korišćenjem ActiveX-a, bolje reći ActiveX EXE komponente. Izabrao sam ActiveX EXE, jer radi u sopstvenom adresnom prostoru, pa se može sprečiti da njegov eventualni pad obori ceo program. Drugi razlog je što lansiranjem Help-a nećete morati da prekinete izvršavanje aplikacije.
|
Obaveštavanje klijenta
Ako želite da obavestite klijent program o nekom od događaja koji se desio tokom korišćenja ActiveHelp-a, možete da kreirate event-ove koje će primati vaš program. VB 5.0 omogućava kreiranje događaja, ali samo delimično: možete samo da napravite "kvazi događaj", tako što ćete svoju WithEvent funkciju "prilepiti" na neki od VB objekata (commandButton, menu, textbox...). Kada korisnik klikne na neki od objekata unutar formulara, recimo menu, aktiviraće se event procedura vaše klase i proslediti događaj klijentu. Da biste napravili event, u General-Declaration delu klase unesite: Private WithEvents mwmnuActiveHelp As Menu i tako ćete kreirati Event vezan za menu objekat programa. Još dodajte funkciju:
|
Poziv ActiveHelp-a
U aplikaciju iz koje treba da se pozove ActiveHelp treba uneti sledeći kod u form_load:
|
Šta je još ostalo
Da bi sve ovo atraktivno izgledalo, treba da dodate program koji će sinhronizovati TreeView kontrolu sa tekstom koji je prikazan u Browser-u. Kod za Back i Forward može se najlakše implementirati sa po linijom koda: brwPageBrowser.GoBack ili brwPageBrowser.GoForward. Da program ne bi dobijao RunTime Error svaki put kada kliknete na Back, a već ste na osnovnom dokumentu, dodajte jedno On Error Resume Next ispred ovih naredbi. Posle njih možete da testirate kod greške, pa ako je različit od 0, onemogućite klik na taster.
|