Pr∙vodce tvorbou nßpov∞dy û 4. dφl Vß₧enφ Φtenß°i, vφtßm vßs u dalÜφho pokraΦovßnφ naÜeho serißlu. Po minulΘ teoretickΘ studii se vrßtφme op∞t do ryzφ praxe a povφme jsi n∞co o zßkoutφch tvorby nßpov∞dnΘho systΘmu. Jak za chvφli uvidφte, dneÜnφ dφl se podobß nejvφce populßrnφ sΘrii otßzek a odpov∞dφ, kterΘ p°edstavujφ pom∞rn∞ oblφbenou formu °eÜenφ problΘm∙. Doufßm, ₧e pom∙₧e jak zaΦßteΦnφk∙m, tak i samotn²m profesionßl∙m.
ProblΘm: Pot°ebuji vytvo°it nßpov∞du pro svoji aplikaci. Dodr₧uji p°esn∞ stanoven² postup. Nejd°φve vytvo°φm ve Wordu 97 samotn² text a ulo₧φm jej ve formßtu RTF. Dote∩ probφhß vÜe v po°ßdku. Kdy₧ ale chci vygenerovat spustiteln² soubor nßpov∞dy, kompilßtor vypφÜe nßsledujφcφ zprßvu: HC4002: Warning: HC4005: Warning: Nevφm, co s tφm. D∞lßm snad n∞kde chybu? Odpov∞∩: Ne, chybu ned∞lßte, alespo≥ co se t²Φe postupu tvorby nßpov∞dnΘho souboru. Potφ₧ je toti₧ v n∞Φem jinΘm. A sice ve verzi kompilßtoru nßpov∞dnφch soubor∙, kter² pou₧φvßte. S nejv∞tÜφ pravd∞podobnostφ jde o Help Workshop starÜφ verze jako 4.03. Je tedy nezbytnΘ zφskat nov∞jÜφ verzi kompilßtoru, nejlΘpe ji₧ vzpomφnanou verzi 4.03. Aktußlnφ verzi lze zφskat na internetovΘ adrese: http://www.helpmaster.com/hlp-developmentaids-hcw403.htm. Abyste zjistili, jakou verzi mßte nainstalovanou na vaÜem poΦφtaΦi, ud∞lejte nßsledovn∞: - spus¥te Help Workshop ProblΘm nekompatibility kompilßtoru starÜφ verze se objevφ tehdy, kdy₧ vytvß°φte text nßpov∞dy ve Wordu verze vyÜÜφ ne₧ 7.0 (tedy jde o Word 97/2000/2002). Naproti tomu, s Wordem 7.0 (Word pro Windows 95) a jeho soubory RTF jsi i starÜφ kompilßtor rozumφ, a zde ke chyb∞ p°i tvorb∞ nßpov∞dnΘho souboru nedojde.
ProblΘm: P°i tvorb∞ grafickΘho rozhranφ pro moji nßpov∞du pou₧φvßm externφ bitovΘ mapy. Je vÜak pon∞kud pracnΘ vytvß°et p°i ka₧dΘ p°φle₧itosti obrßzky (nap°. pro odrß₧ky) a neustßle "odskakovat" od psanφ nßpov∞dy do kreslφcφho programu. Neexistuje n∞jakΘ jednoduÜÜφ °eÜenφ? Odpov∞∩: Ano, °eÜenφ samoz°ejm∞ existuje a je velmi komfortnφ. Program Help Workshop obsahuje sadu standardnφch obrßzku, kterΘ m∙₧ete ihned pou₧φt p°i psanφ nßpov∞dnΘho textu. Tato malß galerie vypadß takto: Pou₧itφ je vhodnΘ zejmΘna p°i odrß₧kßch nebo znaΦkßch odskok∙. Aplikace je velice snadnß: zßpis {bmc shortcut.bmp} vytvo°φ v nßpov∞dnΘm textu obrßzek se Üipkou. Pokud chcete k obrßzku asociovat odskok, cel² v²raz v p°edchozφ v∞t∞ podtrhn∞te dvojit∞, ihned napiÜte nßzev tΘmatu, do kterΘho se mß skßkat a tento formßtujte jako skryt².
ProblΘm: Mßm problΘm p°i tvorb∞ neskrolujφcφ oblasti. A¥ d∞lßm co d∞lßm, kompilßtor mne v₧dy äpovzbudφô zprßvou o chyb∞: HC3048: Warning: topic #1 of C:\Nßpov∞da.rtf: Jak lze situaci vy°eÜit? Odpov∞∩: Je z°ejmΘ, proΦ se kompilßtor ästavφ na hlavuô. P°i vytvß°enφ statickΘ oblasti musφte pamatovat na to, ₧e neskrolujφcφ text musφ b²t v₧dy na zaΦßtku samotnΘho nßpov∞dnΘho tΘmatu. Jestli tedy aplikujete formßtovßnφ neskrolujφcφ oblasti na text n∞kde uvnit° nßpov∞dnΘho tΘmatu, kompilßtor vypφÜe v²Üe uvedenou chybu.
ProblΘm: Rßd bych do nßpov∞dnφho tΘmatu umφstil tlaΦφtko, kterΘ by poskytovalo u₧ivateli informace o p°φbuzn²ch tΘmatech. Jakmile by u₧ivatel klepnul na toto tlaΦφtko, objevilo by se okno se seznamem tΘmat, kterΘ poskytujφ souvisejφcφ relevantnφ informace. Za odpov∞∩ d∞kuji. Odpov∞∩: Uvedenou problematiku lze spolehliv∞ zvlßdnout pomocφ dvou maker ALINK a KLINK. Ob∞ makra jsou si podobnß, rozdφl je ovÜem v tom, ₧e makro ALINK prochßzφ tΘmata, kterß obsahujφ znak A jako poznßmku pod Φarou, zatφmco makro KLINK prochßzφ tΘmata s pφsmenem K v poznßmce pod Φarou. Celß problematika je pon∞kud rozsßhlejÜφ, uvedu proto co mo₧nß nejjednoduÜÜφ a nejsrozumiteln∞jÜφ postup, jak dosßhnout stanoven² cφl s co nejmenÜφ nßmahou. Uva₧ujme nynφ, ₧e mßte u vÜech tΘmat s relevantnφmi informacemi, pou₧it² znak K s textem v poznßmce pod Φarou. Kdy₧ chcete, aby po klepnutφ na odkaz äDalÜφ informaceô Winhelp prohledal vÜechny tΘmata a naÜel ty, kterΘ obsahujφ jako klφΦovΘ slovo v poznßmce pod Φarou t°eba slovo äSouborô, uskuteΦnφte uveden² zßpis makra: Pokud bude nalezeno v∞tÜφ mno₧stvφ tΘmat, standardn∞ bude zobrazeno dialogovΘ okno, kterΘ u₧ivateli umo₧nφ vybrat to tΘma, o kterΘ mß zßjem. Podobn∞ pracuje i makro ALINK, ovÜem klφΦovß slova specifikovßna v poznßmce pod Φarou za znakem A nejsou nikde v nßpov∞dnΘm souboru viditelnß. KlφΦovΘ slova K se naproti tomu objevujφ v indexu klφΦov²ch slov.
ProblΘm: Nevφte o jednoduÜÜφ cest∞ pro dvojitΘ podtr₧enφ textu a jeho skrytφ? P°i psanφ textu je krajn∞ nepohodlnΘ pou₧φvat myÜ jenom pro zm∞nu formßtu textu. Odpov∞∩: ╚astΘ u₧φvßnφ myÜi p°i psanφ je opravdu nejenom nepraktickΘ, ale i namßhavΘ. NicmΘn∞, Word poskytuje klßvesovΘ zkratky, kterΘ tuto Φinnost zabezpeΦφ omnoho rychleji a hlavn∞ s vyÜÜφ efektivitou. Tady jsou: - pro dvojitΘ podtr₧enφ vyberte po₧adovan² text do bloku a stiskn∞te CTRL+SHIFT+D
ProblΘm: Programuji ve Visual Basicu a cht∞l bych vytvo°it nßpov∞du pro jednotlivΘ polo₧ky menu. Nap°φklad mßm menu äSouborô, kterΘ obsahuje mnoho polo₧ek. Pro n∞kterΘ z nich bych rßd implementoval nßpov∞du. Dß se to v∙bec ud∞lat a kdy₧ ano tak jak? Odpov∞∩: Aktivovat nßpov∞du pro polo₧ky menu lze mnoha zp∙soby. Jednφm z nich je pou₧itφ nßpov∞dnΘho textu ve statusbaru. V tomto p°φpad∞ se text vysv∞tlujφcφ jednotlivΘ polo₧ky menu objevuje ve vzpomφnanΘm ovlßdacφm prvku ihned jak u₧ivatel umφstφ kurzor myÜi änadô samotnou polo₧ku. Druhou mo₧nostφ je zobrazenφ nßpov∞dnΘho okna stisknutφm klßvesy F1. Zobrazenφ textu ve statusbaru je velmi struΦnΘ a obvykle poz∙stßvß jenom z n∞kolika slov, je tedy vhodnΘ pro jasnou a p°esnou nßpov∞du. Pokud vÜak pot°ebujete u₧ivateli sd∞lit v∞tÜφ mno₧stvφ informacφ, rad∞jiá vyzkouÜejte druhou mo₧nost. Aby bylo v∙bec mo₧nΘ p°em²Ület o zobrazenφ nßpov∞dnΘho okna s k²₧en²mi informacemi, musφ b²t spln∞ny tyto podmφnky: - sepsanΘ nßpov∞dnΘ tΘma Aktivujte p°φkaz Menu Editor... z nabφdky Tools nebo stiskn∞te CTRL+E. Vyberte po₧adovanou polo₧ku a v textovΘm poli vedle nßzvu HelpContextID zadejte Φφselnou hodnotu, pod kterou je namapovßno nßpov∞dnΘ tΘma pro aktußlnφ polo₧ku menu. Jakmile spustφte aplikaci, umφstφte kurzor myÜi änadô polo₧ku menu a stiskn∞te klßvesu F1, objevφ se nßpov∞da.
ProblΘm: Jak lze dosßhnout toho, aby odskok sm∞roval do jinΘho tΘmatu jinΘho nßpov∞dnΘho souboru? Odpov∞∩: Pro "skßkßnφ" do jinΘho tΘmatu cizφho nßpov∞dnΘho souboru se pou₧φvß zßpis: kde n1 je nßzev tΘmatu v souboru Nßpov∞da.hlp. VÜimn∞te si prosφm, ₧e jedin∞ text "Skok" je formßtovßn dvojit²m podtr₧enφm, ostatnφ text je skryt². (Znak zavinßΦe napφÜete lehce pomocφ kombinace pravΘ klßvesy ALT a pφsmena V.)
ProblΘm: Cht∞l bych do nßpov∞dy umφstit multimedißlnφ data ve form∞ videa. Jde to v∙bec s klasickou nßpov∞dou uskuteΦnit, nebo pot°ebuji vytvo°it HTML nßpov∞du? Odpov∞∩: Mo₧nß budete p°ekvapeni, ale "klasickß" nßpov∞da dokß₧e opravdu obdivuhodnΘ v∞ci. Jednou z nich je i p°ehrßvßnφ multimedißlnφch souboru. Pro vlo₧enφ .avi souboru do nßpov∞dy je nutnΘ pou₧φt p°φkaz {mci}. Jeho syntaxe je uvedena nφ₧e. {mci[_left| _right] [options,] filename} Sekce [options] specifikuje hodnoty pro prohrßvßnφ multimedißlnφho souboru. P°ipomenu, ₧e pokud chcete uvΘst vφce hodnot, odd∞lujte je mezerami nikoliv Φßrkami.
Filename p°edstavuje jmΘno souboru s multimedißlnφm obsahem. P°φklad pou₧itφ: {mci external, video1.avi} Na zßv∞r bych jeÜt∞ upozornil na zßvislost mezi velikostφ souboru videa a rychlosti p°ekreslovßnφ okna nßpov∞dnΘho tΘmatu. Kdy₧ je video p°φliÜ objemnΘ, zpomalφ se znaΦn∞ i prßce s nßpov∞dnφm tΘmatem a naopak.
ProblΘm: Jak docφlit toho, aby bylo mo₧nΘ z prost°edφ aplikace ve VB spouÜt∞t makra Winhelpu? Odpov∞∩: Tento dotaz pat°φ do oblasti "vyÜÜφ matematiky" problematiky interakce aplikace a nßpov∞dnΘho systΘmu. Jak mo₧nß vφte, standardnφ deklarace funkce Winhelp je nßsledovnφ:
Po peΦliv∞jÜφm prostudovßnφ funkce zjistφte, ₧e poslednφ parametr je celΘ Φφslo (Long). P°edpoklßdejme, ₧e budete chtφt zavolat makro PopupID, kterΘ mß dva parametry. V tomto p°φpad∞ parametr wCommand funkce Winhelp nabude p°φznak HELP_COMMAND (&H102&). SamotnΘ makro bude pot°ebnΘ zapsat v jeho krßtkΘm tvaru (jako PI), proto₧e Winhelp je schopen akceptovat jen krßtk² tvar makra (pokud existuje). Za druhΘ, zßpis makra musφ b²t v uvozovkßch, proto₧e jde o textov² °et∞zec. ProblΘmem ale je, ₧e poslednφ parametr oΦekßvß celoΦφselnou hodnotu, zatφmco zßpis makra je prost² text.á Kdybyste nynφ zkusili zavolat makro v nφ₧e uvedenΘm zßpise, VB by oznßmil v²skyt chyby za b∞hu programu Φφslo 13 - nesoulad datov²ch typ∙.
Z hlediska logiky VB je vÜe p°irozenΘ û poslednφ parametr funkce Winhelp oΦekßvß Φφslo, zatφmco mu byl nabφdnut text, co₧ vyvolß chybu. Vy°eÜit tuto situaci lze pom∞rn∞ jednoduÜe mal²m trikem. Vytvo°te jeÜt∞ jednu deklaraci funkce Winhelp (resp. zkopφrujte tu souΦasnou), oznaΦte ji jako Winhelp2 a datov² typ poslednφho parametru zm∞≥te na String. V²sledek by m∞l vypadat jako v nßsledujφcφm p°φklad∞:
Pro spuÜt∞nφ makra je nevyhnutn² tento segment zdrojovΘho k≤du:
K≤d zobrazφ v popup okn∞ tΘma än1ô nßpov∞dnΘho souboru äpokus.hlpô. Poslednφm problΘmem je ukonΦenφ spuÜt∞nΘ instance Winhelpu. V tomto p°φpad∞ nenφ mo₧nΘ pou₧φt p°φznak HELP_QUIT, proto₧e operujeme s novou instancφ funkce Winhelp (oznaΦenou jako Winhelp2). Aby bylo mo₧nΘ funkci opravdu ukonΦit, umφst∞te tento k≤d do obsluhy udßlosti Unload formulß°e Form1.
Poslednφ parametr "Exit()" zabezpeΦφ ukonΦenφ Winhelpu, tak₧e ten ji₧ nealokuje pam∞¥ poΦφtaΦe. Uveden² postup vzeÜel z dφlny autora, proto₧e ₧ßdn² konkrΘtnφ zp∙sob pou₧itφ nßpov∞dnφch maker prost°ednictvφm Visual Basicu nenφ v dostupnΘ literatu°e dokumentovßn ani jakkoli vzpomφnßn. Jde o pom∞rn∞ slo₧itou problematiku, ale uveden² algoritmus je opravdu funkΦnφ. Na shledanou op∞t za m∞sφc. |