|
13. dφl |
Vß₧enφ p°ßtelΘ,
rßd bych vßs p°ivφtal u dalÜφho dφlu serißlu o tvorb∞ nßpov∞dy. DneÜnφ
t°inßctß kapitola se bude v∞novat spφÜe programovacφm postup∙m, nebo¥ se budeme
zab²vat zkoumßnφm samotnΘho HTMLHelp API a jeho vyu₧itφ p°i zavßd∞nφ HTML nßpov∞dy
do aplikace Visual Basicu 6.0. Ukß₧eme si, jak zobrazit hlavnφ nabφdku nßpov∞dy
a jednotlivß tΘmata. Ve druhΘ polovin∞ se podφvßme na zm∞ny, kterΘ do
sv∞ta nßpov∞dy p°inesl modernφ Visual Basic .NET.
Charakteristika
API funkce HTMLHelp
V tΘto Φßsti si p°edstavφme aplikaΦnφ programovΘ rozhranφ (API),
kterΘ vnit°n∞ pohßnφ celou maÜinΘrii HTML nßpov∞dy. Zßkladem naÜeho zkoumßnφ
bude API funkce s nßzvem HTMLHelp. Pokud jste ji₧ n∞kdy pracovali
s WinHelp API, brzy poznßte mnoho spoleΦn²ch atribut∙. Tedy zßpis funkce
HTMLHelp je v prost°edφ VB 6.0 nßsledovnφ:
Public Declare Function
HtmlHelp Lib _
"hhctrl.ocx"
Alias "HtmlHelpA" ( _
ByVal hwndCaller As Long,
_
ByVal pszFile As String,
_
ByVal uCommand As Long, _
ByVal dwData As Long _
) As Long
Jak si m∙₧ete vÜimnout, funkce je volßna z prost°edφ ovlßdacφho
prvku hhctrl.ocx. Pravd∞podobn∞ nejjednoduÜÜφ a nejsrozumiteln∞jÜφ bude
p°edstavenφ vÜech parametr∙ funkce.
Parametr |
Charakteristika |
hwndCaller |
Specifikuje ukazatel (handle) na aplikaΦnφ okno,
kterΘ si vy₧ßdalo spuÜt∞nφ HTMLHelp nßpov∞dy. |
pszFile |
UrΦuje soubor HTML nßpov∞dy (.CHM), kter² se mß
zobrazit. Voliteln∞ je mo₧nΘ pou₧φt i typ okna, ve kterΘm se mß obsah souboru
nßpov∞dy zobrazit. Zßpis pak vypadß takto: soubor_nßpov∞dy>typ_okna. |
uCommand |
Konstanta, kterß blφ₧e popisuje, jakß akce se mß
uskuteΦnit, nap°. zobrazenφ hlavnφ nabφdky souboru HTML nßpov∞dy. |
dwData |
Poslednφ parametr dodateΦn∞ rozÜi°uje p∙sobenφ
parametru uCommand. Ilustraci jeho mo₧nostφ si ukß₧eme dßle v textu. |
á
Z deklarace funkce je z°ejmΘ, ₧e vracφ i jistou nßvratovou hodnotu
ve form∞ dlouhΘho celΘho Φφsla (Long). Tato hodnota determinuje ukazatel na
aplikaΦnφ okno nßpov∞dy v podob∞ identifikaΦnφho Φφsla v p°φpad∞, ₧e
volßnφ funkce prob∞hlo ·sp∞Ün∞. V opaΦnΘ situaci je vrßcena nulovß
hodnota. Velice d∙le₧itΘ je takΘ p°edßvßnφ vÜech argument∙ hodnotou, co
naznaΦuje pou₧it² modifikßtor ByVal.
|
Funkce HTMLHelp je v porovnßnφ s funkcφ
WinHelp pon∞kud vφce citlivß, a proto se p°i prßci s nφ v₧dy ujist∞te,
₧e jφ p°edßvßte parametry ve sprßvnΘm po°adφ a se sprßvn²mi datov²mi typy.
Funkce mß toti₧ tendenci p°i sebemenÜφch nesrovnalostech zp∙sobit obecnou
chybu ochrany a poh°bφt jednak testovacφ aplikaci a pota₧mo i cel² VB 6.0. á |
V tΘto sekci si ukß₧eme, jak lze vyu₧φt mo₧nostφ funkce HTMLHelp
k zobrazenφ standardnφho souboru HTML nßpov∞dy a poslΘze i
k zobrazenφ specifickΘho tΘmatu nßpov∞dy.
Funkce
HTMLHelp a praxe
Projekt 1: Zobrazenφ ·vodnφ
nabφdky HTML nßpov∞dy
Krok 1: P°φprava
prost°edφ VB 6.0
Ze vÜeho nejd°φve je zapot°ebφ p°ipravit VB tak, aby bylo z jeho
prost°edφ mo₧nΘ zavolat API funkci HTMLHelp. Postupujte podle uveden²ch krok∙:
Public Const HH_DISPLAY_TOPIC
= &H0
á
|
Abyste p°edeÜli jak²mkoliv ztrßtßm p°i ne·sp∞ÜnΘm
volßnφ funkce HTMLHelp, pov∞zte VB, aby v₧dy p°i startu programu ulo₧il vÜechny
projektovΘ soubory. Docφlφte toho aktivacφ volby Save Changes na zßlo₧ce Environment
v sekci Options, kterß je
dostupnß z nabφdky Tools. á |
Funkce
HTMLHelp a praxe
Projekt 1: Zobrazenφ ·vodnφ
nabφdky HTML nßpov∞dy
Krok 2: Zßpis k≤du pro
spuÜt∞nφ souboru HTML nßpov∞dy
Call HtmlHelp(Me.hWnd,
"c:\soubor1.chm", HH_DISPLAY_TOPIC, 0)
Domnφvßm se, ₧e bude vhodnΘ, kdy₧ zßpis
funkce trochu objasnφm. Tedy, prvnφ parametr identifikuje okno, kterΘ po₧ßdalo
o aktivaci funkce. V naÜem p°φpad∞ jde o okno, ve kterΘm se prßv∞ provßdφ
veÜkerß Φinnost, co je ostatn∞ z°eteln∞ definovßno pou₧itφm klφΦovΘho slova Me.
Druh² parametr pojednßvß o souboru HTML nßpov∞dy, kter² chceme zobrazit.
Proto₧e jde o textov² °et∞zec, musφ b²t uzav°en v dvojit²ch uvozovkßch.
T°etφm parametrem je konstanta urΦujφcφ, jakou formou bude zobrazen soubor
s nßpov∞dou. V naÜem p°φpade jde o konstantu HH_DISPLAY_TOPIC, kterß
zabezpeΦuje zobrazenφ hlavnφ nabφdky souboru nßpov∞dy. A koneΦn∞, poslednφ
parametr poskytuje dodateΦnΘ informace o parametru uCommand, a proto₧e chceme
zobrazit standardnφ nabφdku, nastavφme jeho hodnotu na nulu.
Deklarace konstanty do modulu:
Public Const HH_CLOSE_ALL =
&H12
K≤d pro ukonΦenφ instance HTML nßpov∞dy do
obsluhy udßlosti QueryUnload:
Call HtmlHelp(0, vbNullString,
HH_CLOSE_ALL, 0)
Kdy₧ po poveden²ch zm∞nßch spustφte projekt a zobrazφte nßpov∞du, m∙₧ete
zav°φt i okno projektu, vÜe bude v po°ßdku, ukonΦφ se i spuÜt∞nß nßpov∞da.
á
V dalÜφ Φßsti prozkoumßme, jak zobrazit specifickΘ tΘma HTML
nßpov∞dy.
Zobrazenφ nßpov∞dy s konkrΘtnφm tΘmatem p°edstavuje jistou formu
kontextovΘ nßpov∞dy. NejlΘpe si uvedenou situaci rozebereme na p°φkladu.
P°edstavte si, ₧e na formulß°i mßte jist² ovlßdacφ prvek, °ekn∞me tlaΦφtko, po
stisknutφ kterΘho budete chtφt, aby se zobrazila nßpov∞da s urΦit²m
tΘmatem, nap°. popisem funkcφ dialogovΘho okna. V tΘto a mnoha dalÜφch
situacφch m∙₧ete snadno pou₧φt postup, kter² si budeme dßle demonstrovat.
Funkce
HTMLHelp a praxe
Projekt 2: Zobrazenφ
specifickΘho tΘmatu HTML nßpov∞dy
Krok 1: Tvorba sekcφ
ALIAS a MAP v projektovΘm souboru nßpov∞dy
Prvnφm krokem bude sestavenφ sekcφ ALIAS a MAP v projektovΘm souboru (.HHP) HTML
nßpov∞dy. Je obecn∞ doporuΦeno, abyste tyto sekce needitovali p°φmo
v prost°edφ kompilßtoru HTML Help Workshop (d∙vodem je velikß nestabilita
programu). Proto si rad∞ji otev°ete vßÜ projektov² soubor v poznßmkovΘm
bloku a postupujte nßsledovn∞:
[ALIAS]
IDH_TEMA_1 = Stranka1.htm
Hlavnφm ·Φelem sekce ALIAS je p°i°adit
jednotliv²m .HTM soubor∙m (v uvedenΘm p°φpad∞ pouze jeden soubor s nßzvem äStranka1ô)
symbolickΘ konstanty. Pou₧itΘ konstanty nesmφ b²t ΦφselnΘ a rovn∞₧ se
doporuΦuje, abyste vyu₧φvali formßt ve tvaru IDH_vaÜe_identifikace.
[MAP]
#define IDH_TEMA_1 10000
|
Pokud mßte n∞jakΘ zkuÜenosti s programovacφm
jazykem C, je vßm zcela jist∞ tentoá zßpis
pov∞dom². Velmi jednoduÜe °eΦeno, direktiva #define se pou₧φvß pro nßhradu
jednΘ konstanty jinou. V tomto p°φpad∞ se nahrazuje textovß konstanta
IDH_TEMA_ 1 numerickou konstantou (10000). V₧dy, kdy₧ kompilßtor objevφ prvnφ
konstantu, nahradφ ji druhou (nßsledujφcφ) konstantou.á |
Funkce
HTMLHelp a praxe
Projekt 2: Zobrazenφ
specifickΘho tΘmatu HTML nßpov∞dy
Krok 2: Aktivace HTML
nßpov∞dy z prost°edφ VB 6.0
Public Const HH_HELP_CONTEXT =
&HF
Call
HtmlHelp(0, "c:\pokus.chm", HH_HELP_CONTEXT, 10000)
K≤d zabezpeΦφ spuÜt∞nφ nßpov∞dy a zobrazenφ obsahu strßnky s nßzvem
äStranka1ô. Podobn²m postupem m∙₧ete zobrazovat kterΘkoliv tΘma z vaÜeho
systΘmu nßpov∞dy.
Funkce
HTMLHelp a praxe
ProblΘm s implementacφ
kontextovΘ nßpov∞dy stylu HTML ve VB 6.0
Jak je to
s opravdovou kontextovou nßpov∞dou ve VB 6.0?
Pod pojmem äopravdovßô kontextovß nßpov∞da se rozumφ skuteΦnß nßpov∞da
k libovolnΘmu prvku nebo kontextu. Tato forma nßpov∞dy se s v²hodou
vyu₧φvß p°edevÜφm v modßlnφch dialogov²ch oknech. Obvyklß prezentace
kontextovΘ nßpov∞dy je vizußln∞ umocn∞na p°φtomnostφ tlaΦφtka s otaznφkem
v titulkovΘm pruhu okna. PotΘ, co u₧ivatel klepne na vzpomφnanΘ tlaΦφtko,
se kurzor myÜi zm∞nφ na ikonu Üipky s mal²m otaznφkem. Jestli₧e te∩
u₧ivatel klikne na n∞kter² prvek, objevφ se popis Φi charakteristika tohoto
prvku. Toto je hlavnφ idea skuteΦnΘ kontextovΘ nßpov∞dy.
NaneÜt∞stφ, v prost°edφ programovacφho jazyka Visual Basic 6.0 nenφ
podpora pro kontextovou nßpov∞du stylu HTML nijak implementovßna. Uveden²
nedostatek v²vojovΘho prost°edφ se pak musφ jist²m zp∙sobem tak°φkajφc obejφt.
Pokud by jsme na tento problΘm nazφrali ze zcela programßtorskΘho
hlediska, jako nejvhodn∞jÜφ technika implementace HTML kontextovΘ nßpov∞dy by
p°ipadala do ·vahy technologie subclassingu. Pomocφ subclassingu by bylo mo₧nΘ
äodchytßvatô zprßvy, kterΘ posφlajφ Windows programu, kdy₧ u₧ivatel aktivuje
mo₧nost kontextovΘ nßpov∞dy. Proto₧e vÜak implementace subclassingu je tΘma
velmi pokroΦilΘ, nebudeme se nφm dßle zab²vat.
Jako druhß mo₧nost se nabφzφ zakoupenφ funkΦnφho ovlßdacφho prvku od
jednΘ z mnoha spoleΦnostφ, kterΘ se v²vojem takov²chto produkt∙
profesionßln∞ zab²vajφ. Z°etelnou nev²hodou je zde po°izovacφ cena produktu,
ovÜem na druhΘ stran∞ zφskßte samostatn² ovlßdacφ prvek, pou₧itφm kterΘho bude
vaÜe prßce daleko snazÜφ a efektivn∞jÜφ. Za dalÜφ plusov² bod se pova₧uje
podpora ze strany producenta. áá
A koneΦn∞ t°etφ mo₧nost (a moje nejoblφben∞jÜφ) je vyu₧itφ kontextovΘ
nßpov∞dy stylu Windows 95. Filozofie tΘto strategie je vφce ne₧ jednoduchß:
M∙₧ete pou₧φvat dva soubory nßpov∞dy, jeden ve formßtu HTML jako standardnφ
nßpov∞du a druh² soubor pro kontextovou nßpov∞du ve stylu Windows 95. VB 6.0 si
s kontextovou nßpov∞dou stylu Windows 95 velmi dob°e rozumφ (jak jsme si ukßzali
ve 2. Φßsti serißlu) a co je jeÜt∞ d∙le₧it∞jÜφ, v popup oknech kontextovΘ
nßpov∞dy typu Windows 95 m∙₧ete pou₧φvat libovolnΘ formßtovßnφ pφsma, obrßzky a
hypertextovΘ odkazy. O toto vÜechno jste v HTML kontextovΘ nßpov∞d∞
ochuzeni.
Visual Basic ve svΘ nejmodern∞jÜφ instanci zvanΘ honosn∞ .NET p°idal
mnoho nov²ch technologick²ch koncept∙, ze kter²mi se musφ v²vojß°i äpopratô,
jestli₧e cht∞jφ permanentn∞ dr₧et krok s dobou. Ve VB .NET opravdu
nez∙stal kßmen na kameni a uvedenΘ konstatovßnφ se vß₧e i na vyu₧itφ nßpov∞dy
v prost°edφ aplikacφ vyvinut²ch tφmto modernφm programovacφm nßstrojem. V nßsledujφcφch
podkapitolßch se pokusφme p°ezkoumat zßkladnφ koncepty a techniky, kterΘ je
nutnΘ zvlßdnout, aby vaÜe aplikace mohly komunikovat s u₧ivateli na ävyÜÜφ
.NET ·rovniô.
Komparace
vyu₧itφ nßpov∞dy ve VB 6.0 a VB .NET
Abyste neztratili ni¥, zaΦneme porovnßnφm vyu₧itφ nßpov∞dy ve VB 6.0 a
VB .NET. Ve VB 6.0 byla nßpov∞da implementovßna na ·rovni projektu. JednoduÜe jste v okn∞ Project Properties
urΦili soubor nßpov∞dy, kter² jste cht∞li ve vyvφjenΘ aplikaci pou₧φvat a bylo,
jak se °φkß, vymalovßno. Tento soubor s nßpov∞dou (Φi u₧ v podob∞
.HLP nebo .CHM) jste pak mohli pou₧φt p°i mnoha p°φle₧itostech, i kdy₧ je nutnΘ
p°iznat, ₧e VB 6.0 pracoval lΘpe se standardnφmi soubory nßpov∞dy (typu
WinHelp 4.0), jak s nßpov∞dou ve formßtu HTML. VB .NET naproti tomu zaΦφnß
p°esazovat nßpov∞dnou koncepci na ·rovni
formulß°e, p°i implementaci kterΘ mu pomßhajφ dv∞ zcela novΘ komponenty, a
to HelpProvider a ToolTip (obr. 1).
Obr. 1 û Zobrazenφ
instancφ komponent HelpProvider a ToolTip
Prßce s t∞mito prvkami je pom∞rn∞ jednoduchß; instance prvk∙ lze
umφstit na formulß°, poslΘze nastavit vÜechny nezbytnΘ vlastnosti a nakonec
staΦφ jenom spustit projekt. áááááá
|
Zcela jasnß se jevφ p°edstava v²vojß°∙
Microsoftu, co se t²Φe stylu pou₧itΘ nßpov∞dy. JednoznaΦn∞ se razφ cesta äjen
HTML nßpov∞da a nic jinΘhoô. Ve skuteΦnosti nenφ situace a₧ tak ähorkßô.
Pomocφ API funkce WinHelp m∙₧ete stßle pou₧φvat i soubory nßpov∞dy stylu
Windows 95. Jak na to uvidφte v sekci WinHelp 4.0 a VB
.NET dßle v textu.á |
Nßpov∞da
a VB .NET
Projekt 1: Zobrazenφ HTML
nßpov∞dy
Zobrazenφ ·vodnφ nabφdky
HTML nßpov∞dy
Postupujte nßsledovn∞:
Obr.
2 û V²b∞r novΘho typu projektu
V textovΘm poli Name zadejte nßzev pro
°eÜenφ (solution) a dßle zatrhn∞te volbu Create directory for Solution, Φφm₧ zabezpeΦφte vytvo°enφ specißlnφ
slo₧ky pro vßÜ projekt. Pokud jste s uskuteΦn∞n²mi zm∞nami spokojeni,
klepn∞te na tlaΦφtko OK. á
Private Sub Button1_Click(ByVal
sender As System.Object, _
ByVal e As System.EventArgs)
Handles Button1.Click
ááááááá
Help.ShowHelp(Me,
"c:\Soubor1.chm")
End Sub
Jestli₧e chcete zobrazit nßpov∞du s explicitn∞ aktivovanou zßlo₧kou
Index, obm∞≥te k≤d takto:
Help.ShowHelpIndex(Me, "c:\Soubor1.chm")
á
Nßpov∞da
a VB .NET
Projekt 2: Zobrazenφ HTML
nßpov∞dy pomocφ prvku HelpProvider
Zobrazenφ ·vodnφ nabφdky
HTML nßpov∞dy
V tomto p°φklad∞ si ukß₧eme, jak za pou₧itφ komponenty HelpProvider
zobrazit hlavnφ nabφdku souboru s HTML nßpov∞dou. Ud∞lejte nßsledovnφ:
Obr. 3 û Nastavenφ
vlastnosti HelpNamespace prvku HelpProvider
╖
HelpButton = True
╖
MaximizeBox = False
╖
MinimizeBox = False
╖
ShowHelp
on HelpProvider1 = True
╖
HelpNavigator
on HelpProvider1 = TableOfContents
ááNßpov∞da a VB .NET
Projekt 3: Zobrazenφ kontextovΘ HTML
nßpov∞dy pomocφ prvku HelpProvider
Kontextovß nßpov∞da poprvΘ
V dalÜφm p°φklad∞ probßdßme mo₧nosti implementace skuteΦnΘ
kontextovΘ nßpov∞dy do aplikace. Op∞t nßm bude asistovat komponenta
HelpProvider. Postupujte takto:
Obr. 4 û Proces
kontextovΘ nßpov∞dy ve VB .NET
á Nßpov∞da
a VB .NET
Projekt 4: Zobrazenφ kontextovΘ
HTML nßpov∞dy pomocφ prvku HelpProvider
Kontextovß nßpov∞da
podruhΘ
Mo₧nß budete n∞kdy chtφt, aby byl popis pro urΦit² prvek pon∞kud rozsßhlejÜφ,
aby poskytoval u₧ivateli daleko vφc informacφ ne₧ pouh²ch pßr v∞t. V tΘto
chvφli rozhodn∞ s v²hodou vyu₧ijete dalÜφ implementaΦnφ techniku
kontextovΘ nßpov∞dy. Prost°ednictvφm tΘto techniky se zobrazφ konkrΘtnφ strßnka
systΘmu nßpov∞dy s po₧adovan²mi informacemi.
|
VÜechny nevyhnutnΘ soubory pro nßsledujφcφ
cviΦenφ si m∙₧ete zkopφrovat
zde. |
Postupujte podle t∞chto instrukcφ:
á Nßpov∞da
a VB .NET
Projekt 5: Zobrazenφ nßpov∞dy
typu WinHelp 4.0
WinHelp 4.0 a VB .NET
Pokud jste d°φve ve znaΦnΘ
mφ°e pou₧φvali soubory s nßpov∞dou typu WinHelp 4.0 a cht∞li byste
p°edejφt situaci kompletnφho upgradu nßpov∞dnφho systΘmu, VB .NET mß pro vßs
°eÜenφ. I nadßle m∙₧ete pou₧φvat vaÜe soubory s nßpov∞dou, ovÜem na jejich
äzavolßnφô budete pot°ebovat API funkci WinHelp. Tato je vÜak z d∙vodu
zp∞tnΘ kompatibility stßle k dispozici, tak₧e vßm nic nebrßnφ ji pou₧φt.
V nßsledujφcφch krocφch si ukß₧eme, jak p°ipravit vaÜi .NET aplikaci na
zobrazenφ standardnφ nßpov∞dy.
ááá
Public Const HELP_CONTENTS = &H3&
ááá
Public Declare Function WinHelp Lib _
ááá
"user32" Alias "WinHelpA" ( _
ááá
ByVal hwnd As Integer, _
ááá
ByVal lpHelpFile As String, _
ááá
ByVal wCommand As Integer, _
ááá
ByVal dwData As Integer _
ááá ) As
Integer
|
P°i zßpisu API funkce WinHelp m∞jte na pam∞ti, ₧e
VB .NET pou₧φvß pro interpretaci dlouhΘho celΘho Φφsla (d°φve Long) datov²
typ Integer. Proto je nutnΘ i v deklaraci funkce nahradit d°φv∞jÜφ
datov² typ Long odpovφdajφcφm souΦasn²m datov²m typem Integer. |
Call
WinHelp(Me.Handle.ToInt32, "c:\obsah.hlp", HELP_CONTENTS, 0)
áJßn Hanßk
á