Jedna od neophodnih komponenti svakog programa je dobar sistem za pomoć – dobar Help daće korisniku vašeg programa mogućnost da sam pronađe rešenje. Help sistem Windows-a je od prvih dana unifikovan, pa svi programi koriste š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.
Jedno od rešenja je dobijeno korišćenjem HTML formata: koriste ga mnogi, pa ste verovatno primetili da je tokom instalacije Visual Studia 97 na disk prenesen i Internet Explorer 3.01. HTML help se, u Visual Basic-u 5 ugrađuje brzo i efektno – sve potrebno bejzik već donosi sa sobom. Treba samo da povežete komponente.
Kreiranje Help-a
Najpre proverite da li ste instalirali Internet Explorer 3 ili (još bolje) IE 4. Krenite od VB-ovog Application Wizard-a i izaberite kreiranje Explorer Style aplikacije. U drugom prozoru Wizard-a selektujte View Help menije; možete da koristite i resource fajl, mada on neće biti predmet ovog teksta. Sledeći ekran je najvažniji: izaberite kreiranje svog Web browser-a. Najzad izaberite ime svog projekta (u našem slučaju ActiveHelp) i kliknite Finish. Tako ste napravili kostur aplikacije.
Unutar projekta dobili ste dva formulara (frmMain i frmBrowser). Prvi korak je da iz frmMain izbacite lvListView kontrolu i na njeno mesto ubacite brwWebBrowser kontrolu iz frmBrowser. Posle toga zamenite sva mesta gde se pominje listview kontrola novom browser kontrolom. Obratite pažnju na podešavanja kontrola unutar formulara, kada korisnik odluči da promeni njegovu veličinu. ToolBar koji će se kreirati prepravite tako da sadrži standardne browser komande (Back, Forward, Home, Refresh).
Da bi Help mogao da radi, vaš program treba da komunicira sa njim. Postoje više načina da se to uradi. Jedan od njih je da Shell komandom startujete ActiveHelp.exe prosleđujući mu u komandnoj liniji parametre. Ovo je najlakše izvesti – na mestu gde je potreban Help prosledite program sa slike 1.
Pretpostavka je da će se ovaj program nalaziti u istom direktorijumu kao i aplikacija. Prosledili smo: /p (prefiks za putanju do HTML fajlova), /h (ime osnovnog index fajla, čija će namena kasnije biti objašnjena) i /i, naziv teme koja treba da se prikaže prema index fajlu. Za raščlanjivanje parametara komandne linije iskoristićemo kod iz primera 1 (sve primere koji prate ovaj tekst možete da preuzmete sa SezamaPro, ili naše Web strane www.pcpress.co.yu), što je ujedno i izgled naše Sub Main funkcije.
Programu treba proslediti parametre, koji će otvoriti odgovarajući HTML dokument i pozicionirati se na željeni tag. To radimo uz pomoć HelpIndex.inx fajla, čija struktura može da izgleda kao u primeru 2. Ako želimo da korisnik, klikom na TreeView, otvori željenu temu ili stranicu, moramo da unesemo podatke o nodovima. To činimo uz pomoć HelpIndex.inx fajla: prvi parametar u drugom redu, I001, je index noda u listi, I000 za taj nod je član liste koji je roditeljski našeg noda (u ovom slučaju root), treći parametar Active Help Main Menu je tekst koji će se ispisati pored odgovarajuće teme. ActiveHelp-TOC.html je ime HTML fajla koji treba da se otvori, a 0 ili 2 su oznake kojim odvajamo teme od tekstova. Tako možemo da postavimo ikonu za imena celina, unutar kojih se nalazi jedan ili više tekstova.
Kada smo učitali spisak tema, treba da unesemo kod koji će reagovati na klik unutar treeview kontrole. U okviru TreeView_NodeClick događaja proveravamo da li je korisnik kliknuo na naslov teme, kada samo otvaramo treeview kontrolu (Node.Expanded = True), ili je izabrao jedan od tekstova koje treba prikazati u Browser delu forme.
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:TestActivehelp.html ne može da se primeni; treba koristiti file://C:/Test/ActiveHelp.html. Ovu konverziju obavlja funkcija FstrConvertToURL.
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. Unutar programa kreiraćemo dve klase: ActiveHelp_Class), uz pomoć koje ćemo prikazivati željeni Help, i ActiveConnector, koja će omogućiti da više aplikacija koriste isti ActiveX, a da se tek terminiranjem poslednje klase oslobađa memorija. Kliknite na Project / Properties i izaberite Project Type: ActiveX EXE. Kao startup object kliknite na Sub Main, koji će u ovom slučaju biti prazan i jedina uloga će mu biti da podigne aplikaciju. Zatim kliknite na Project prozor i dodajte Class Module, koji će te nazvati ActiveConnector, a u polju Instancing unesite 5. Kliknite na Tools i Add Procedure, izaberite Property i u polje za ime stavite ActiveHelpClass. Na osnovu toga kreiraćete funkciju sa slike 2a.
Svuda se pominje ActiveHelp_Class koju ćemo sada kreirati. Dodajte još jedan ClassModule u project i dajte mu ime ActiveHelp_Class. U polju Instances stavite 2 – PublicNotCreatable. Ova klasa će komunicirati sa našom frmMain, a i njoj će klijent aplikacija prosleđivati parametre Help topic-a i item-a koje treba prikazati. Osim Class_Initialize i Terminate funkcija, napravićemo još jednu public funkciju, preko koje ćemo proslediti parametre. Privatni član klase (Private mWorkForm As frmMain) smo već učitali u Class_Initialize, tu ćemo podatke koje smo dobili kao parametre funkcije prebaciti u globalne promenljive.
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-e koje će primati vaš program. VB 5.0 omogućava kreiranje događaja - možete da napravite „kvazi događaj“, tako što ćete svoju WithEvent funkciju „prilepiti“ na neki od VB objekata. Kada korisnik klikne na neki od objekata, 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 sa slike 2b.
U okviru aplikacije iz koje treba da se pozove ActiveHelp, treba uneti kod sa slike 2c u form_load, a u General – Declaration kod sa slike 2d.|PC_medjunaslov|Šta je još ostalo|medjunaslov_PC|
Da bi sve ovo atraktivno izgledalo, treba da dodate program koji će sinhronizovati TreeView kontrolu sa tekstom u Browser-u. Back i Forward može se 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.
Po završetku aplikacije, ostaje vam da uz pomoć nekog HTML editora kreirate atraktivan Help. Predlažem da glavni topic bude HTML dokument koji će predstavljati sadržaj i obuhvatutu linkove ka ostalim temama i njihovim stranicama. Ostale teme možete da razdelite u više fajlova (svaki po jedna tema) ili da sve smestite u isti. Stranice unutar tema odvojite HTML tagovima...
Napomena: primere koji prate ovaj tekst možete da preuzmete sa SezamaPro, iz konferencije PCPress, ili sa naše Web strane, www.pcpress.co.yu
slika 1
Dim strActiveHelpPath as string
strActiveHelpPath = App.path & ActiveHelp.exe
RetVal = Shell(strActiveHelpPath /p ""D:ProjectsPCPressActiveHelpMyHelp"" /h ""D:Projects
PCPressActiveHelpMyHelpHelpindex.inx"" /i I101", vbNormalFocus)
slika 2
2a
Public Property Get ActiveHelpClass()
As ActiveHelp_Class
Set ActiveHelpClass = gActiveHelpClass
End Property
2b
Private Sub mwmnuActiveHelp_Click()
RaiseEvent ActiveEnd
End Sub
2c
`Učitavanje help Class
Set mactClassQuickHelp = New ActiveConnector
Set maxhClassQuickHelp = mactClass-Quick-
Help.ActiveHelpClass
2d
Private mactClassQuickHelp As ActiveConnector
Private WithEvents maxhClassQuickHelp
As ActiveHelp_Class
Prilozi:
pc033hlp.zip (1.49 kB)
|