Pr∙vodce tvorbou nßpov∞dy - 5. dφl Vß₧enφ p°ßtelΘ, vφtßm vßs u ji₧ pßtΘho v²letu do virtußlnφho sv∞ta poΦφtaΦovΘ nßpov∞dy. DneÜnφ a budoucφ dφl budou pon∞kud netradiΦnφ, no pevn∞ v∞°φm, ₧e stejn∞ zajφmavΘ. Povφme jsi toti₧ n∞co o jednΘ z mnoha forem nßpov∞dy, o asistentovi (pomocnφkovi) Office.
P°edstavenφ pomocnφka Jak jist∞ mnozφ z vßs v∞dφ, pomocnφk je souΦßstφ softwarovΘho balφku Microsoft Office. PoΦφtaΦov² asistent byl poprvΘ implementovßn ve verzi Office 97 a nßsledn∞ se objevil ve vÜech vyÜÜφch verzφch, tedy Office 2000 a XP. Jeliko₧ je pomocnφk souΦßstφ sady Office, nelze jej pou₧φt samostatn∞, to znamenß, ₧e je pot°ebnΘ, abyste m∞li vy a vaÜi u₧ivatelΘ nainstalovan² ji₧ vzpomφnan² softwarov² balφk. Proto se malinko pono°φme i do prost°edφ VBA (Visual Basic for Applications), kter² p°edstavuje programovacφ jazyk kolekce Office. Ukß₧eme jsi, jak je mo₧nΘ naprogramovat pomocnφka a jak vyu₧φt jeho zßkladnφ mo₧nosti. Jenom jedna poznßmka: uvedenΘ p°φklady byly vyvinuty s nejnov∞jÜφ verzφ balφku (Office XP). K dispozici mßte nßsledujφcφ typy virtußlnφch asistent∙:
Standardn∞ je pro vßs p°ipravena znßma kancelß°skß sponka, samoz°ejm∞ za p°edpokladu, ₧e aktivaci pomocnφka povolφte. Je pochopiteln∞ na vßs, kterΘho pr∙vodce si vyberete, naprogramovat m∙₧ete kterΘhokoliv z nich. Z programßtorskΘho hlediska je d∙le₧itΘ, ₧e existuje samostatn² objekt s nßzvem Assistant, metody a vlastnosti kterΘho jsou vßm pln∞ k dispozici. Interakce s objektem Assistant se uskuteΦ≥uje z prost°edφ VBA, kterΘ m∙₧ete spustit z jednΘ z aplikacφ Office (t°eba z Wordu, jak je vid∞t na spodnφm obrßzku) Na zaΦßtek si ukß₧eme jednoduch² p°φklad, kter² "zviditelnφ" pomocnφka na obrazovce. Abyste mohli zapsat nφ₧e uveden² segment k≤du do editoru VBA, je nevyhnutnΘ toto prost°edφ z Wordu spustit (klßvesovou zkratkou ALT+F11, nebo pomocφ sekvence krok∙: nabφdka Tools>Macro>Visual Basic Editor). Dßle p°idejte standardnφ formulß° (Insert>UserForm) a na formulß° umφst∞te tlaΦφtko, kterΘ pojmenujte. Pro novßΦky ve VBA je zde schΘmatickΘ znßzorn∞nφ postupu:
1) klßvesovß zkratka pro aktivaci prost°edφ VBA (ALT+F11) 3) V²b∞r tlaΦφtka z panelu nßstroj∙ a jeho umφst∞nφ na formulß°. Pro vyvolßnφ pomocnφka zapiÜte do obsluhy udßlosti Click vytvo°enΘho tlaΦφtka tento k≤d: With Assistant If .On = True Then .Visible = True Else .On = True End If End With
Nastavenφm vlastnostφ On a Visible se aktivuje a zviditelnφ pomocnφk. Zde se na chvφli zastavφme. Ob∞ vlastnosti jsou toti₧ jist²m zp∙sobem p°epojeny. Kdy₧ je vlastnost On nastavena na False, Visible je rovn∞₧ automaticky nastavena na False. V p°φpad∞, ₧e On=True, zßle₧φ jenom na hodnot∞ vlastnosti Visible, zda je pomocnφk viditeln² (True), nebo skryt² (False). Jestli je hodnota vlastnosti On zm∞n∞na z False na True, vlastnost Visible je automaticky nastavena na True. Jin²mi slovy to znamenß, ₧e kdy₧ je asistent vypnut² (On=False) a vy jej zapnete (On=True), ji₧ nenφ nutnΘ explicitn∞ nastavovat vlastnost Visible na True, aby byl viditeln². Prßv∞ tuto situaci °eÜφ i v²Üe uveden² zdrojov² k≤d. Ze vÜeho nejd°φve testujeme hodnotu vlastnosti On asistenta. Kdy₧ mß u₧ivatel zapnutΘho pomocnφka (On=True), zobrazφme jej (Visible=True). Naopak, jestli je pomocnφk vypnut², nastavφme vlastnost On na True, Φφm₧ asistenta zobrazφme. Pro zjednoduÜenφ ve vÜech nßsledujφcφch p°φpadech p°edpoklßdejme, ₧e asistent je zapnut², a tedy pro jeho zviditeln∞nφ budeme nastavovat jenom vlastnost Visible na True. Dobrß, pomocnφka jsme zobrazili, no co s nφm dßl? NejspφÜ budete chtφt zobrazit bublinovΘ okno s nßpov∞dnφm textem. Nu₧e, sm∞le do toho. Na vytvo°enφ a zobrazenφ okna s nßpov∞dou poslou₧φ vlastnost NewBalloon objektu Assistant, kterß vracφ objekt Balloon. Ten p°edstavuje bublinovΘ okno asistenta, ve kterΘm se objevujφ vÜechny pot°ebnΘ informace. Dopl≥te k≤d nßsledovn∞: With Assistant.NewBalloon .Heading = "Co chcete ud∞lat?" 'text v zßhlavφ .Text = "Vyberte jednu polo₧ku:" 'hlavnφ text .Labels(1).Text = "Spustit moji nßpov∞du" 'vytvo°enφ prvnφ polo₧ky .Labels(2).Text = "Spustit program" 'vytvo°enφ druhΘ polo₧ky .Show 'zobrazenφ bublinovΘho okna End With Poznßmka: Ka₧dß polo₧ka p°edstavuje objekt BalloonLabel. Kolekce t∞chto objekt∙, oznaΦovanß jako BalloonLabels m∙₧e obsahovat a₧ 5 jednotliv²ch polo₧ek (Φlen∙). V²sledkem by m∞la b²t takovßhle podoba asistenta. Dim hodnota As Integer 'vytvo°enφ prom∞nnΘ With Assistant.NewBalloon .Heading = "Co chcete ud∞lat?" .Text = "Vyberte jednu polo₧ku:" .Labels(1).Text = "Spustit moji nßpov∞du" .Labels(2).Text = "Spustit program" hodnota = .Show 'p°i°azenφ ΦφselnΘ hodnoty do prom∞nnΘ End With Select Case hodnota Case 1 With cdl1 'nastavenφ ovlßdacφho prvku Common Dialog .HelpFile = "c:\pokus.hlp" .HelpCommand = cdlHelpContents .ShowHelp End With Case 2 Dim program As Double program = Shell("notepad.exe",vbNormalFocus) End Select Jak jste si po prostudovßnφ k≤du mohli vÜimnout, nßpov∞dn² soubor je volßn pomoci ovlßdacφho prvku Common Dialog. Pokud tento prvek nemßte na panelu nßstroj∙ (Toolbox), musφte jej do projektu p°idat (Tools>Additional Controls). Uveden² k≤d zabezpeΦφ, ₧e po klepnutφ na prvnφ polo₧ku se zobrazφ nßpov∞dn² soubor "pokus.hlp" a aktivace druhΘ polo₧ky pak spustφ program notepad. Pozici okna pomocnφka m∙₧ete m∞nit pomocφ vlastnostφ Left a Top. DalÜφ, nemΘn∞ zajφmavou mo₧nostφ je nastavenφ animace asistenta. Animace m∙₧e b²t aplikovßna na objekt Assistant, kdy je zobrazena okam₧it∞ po tom, co je asistent zapnut² a viditeln². Animaci lze aplikovat i na objekt Balloon, pomocnφk je pak animovßn ve chvφli zobrazenφ nßpov∞dnΘho okna. Praktickou vlastnostφ je MoveWhenInTheWay, kterß automaticky m∞nφ pozici okna asistenta, kdy₧ se ten nachßzφ v "cest∞" u₧ivateli. Praktick² p°φklad m∙₧e nab²t nßsledujφcφ podobu. With Assistant .Left = 200 .Top = 200 .MoveWhenInTheWay = True .Visible = True .Animation = msoAnimationLookDown End With Pokud jde o bublinovΘ okno s nßpov∞dou, m∙₧ete jej doplnit ikonou nebo obrßzkem (cestu k vaÜemu obrßzku upravte dle pot°eby). Jak to ud∞lat uvidφte dßl. Dim x as Integer With Assistant.NewBalloon .Heading = "Informace" .Text = "{bmp c:\obrßzek1.bmp}"& " Pokud chcete"& _ " umφstit do nßpov∞dnΘho okna ikonu," & _ " pou₧ijte vlastnost {cf 252}Icon{cf 0}" & _ " objektu {cf 252}Balloon{cf 0}." .Icon = msoIconAlertInfo x = .Show End With Text zapsan² mezi formßtovacφmi p°φkazy {cf 252} a {cf 0} je zabarven namodro. Prvnφ p°φkaz barvu textu zapφnß a druh² ji vracφ op∞t do standardnφ podoby. Na text je mo₧nΘ aplikovat i jednoduchΘ podtr₧enφ pomocφ p°φkaz∙ {ul 1} a {ul 0}. Zdrojov² k≤d vykreslφ pomocnφka v obdobnφ podob∞. Pokud budete chtφt, aby okno s asistentem po stisknutφ tlaΦφtka OK zmizelo, p°idejte jeÜt∞ mal² segment k≤du: If x = -1 Then Assistant.Visible = False Pro reßlnΘ pou₧itφ by bylo na samΘm zaΦßtku nejlepÜφ zjistit, zda u₧ivatel pou₧φvß pomocnφka, nebo jej deaktivoval a pracuje v²luΦn∞ s nßpov∞dnφm textem. Kdy₧ potom aktivujete pomocnφka a vykonßte to, co bylo vaÜφm zßm∞rem, m∞li byste uvΘst pomocnφka do takovΘho stavu, v jakΘm byl p°ed spuÜt∞nφm k≤du vaÜφ aplikace. ╪eΦeno jin²mi slovy, kdy₧ u₧ivatel standardn∞ nepou₧φvß asistenta, i po skonΦenφ Φinnosti vaÜeho programu by m∞la b²t v²chozφ vlastnost On nastavena na False a naopak. P°edpoklßdejme, ₧e vyvφjφte aplikaci ve VBA a chcete, aby se asistent objevil jenom jednou, a sice p°i prvnφm otev°enφ dokumentu. Jakmile u₧ivatel otev°e dokument Wordu, objevφ se pomocnφk. Pro vy°eÜenφ ·lohy p°idejte od obsluhy udßlosti Open objektu Document tento k≤d: Dim aktivace As Integer aktivace = GetSetting("Pokus", "Asistent", "Aktivace", 0) If aktivace = 0 Then Assistant.Visible = True SaveSetting "Pokus","Asistent", "Aktivace", 1 Else Assistant.Visible = False End If Za pomoci jednoduchΘ testovacφ podmφnky a zßpisu hodnoty do registru (do sekce HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings\Pokus\Asistent) lze pom∞rn∞ snadno urΦit, zda u₧ivatel otev°el dokument prvn∞ (prom∞nnß aktivace = 0), nebo jde o druhou aktivaci (aktivace = 1). Ve vÜech znßzorn∞n²ch p°φkladech jsme pou₧φvali p°φmo prost°edφ VBA Wordu.Samoz°ejm∞, ₧e lze uplatnit i jin² zp∙sob, i kdy₧ se nedß docela °φci, ₧e jde o postup standardnφ. JednoduÜe m∙₧eme "zavolat" asistenta pomocφ ryzφho Visual Basicu, za p°edpokladu, ₧e u₧ivatel mß na svΘm poΦφtaΦi nainstalovan² balφk Office (nebo n∞kterou z integrovan²ch aplikacφ, nap°. Word, jak uvidφte za chvφli). JeÜt∞ p°ed zahßjenφm psanφ k≤du je nutnΘ p°idat do projektu VB p°φsluÜnΘ odkazy na knihovny Office. Aktivujte nabφdku Project>References a zaÜkrtn∞te polo₧ky Microsoft Office 10.0 Object Library a Microsoft Word 10.0 Object Library. Aktivaci aplikace Word lze docφlit dv∞ma odliÜn²mi zp∙soby:
1. zjistφme, zdali je Word spuÜt∞n² a jestli ano, zaΦneme s nφm komunikovat Zmφn∞nß problematika spadß do oblasti OLE Automation. ZkuÜen∞jÜφ programßto°i ji₧ jist∞ v∞dφ, o Φem mluvφm, pro ty mΘn∞ zkuÜenΘ poskytnu jenom struΦnΘ vysv∞tlenφ pojmu, proto₧e st°edem naÜeho zßjmu nenφ prozkoumßvßnφ celΘ maÜinΘrie OLE, n²br₧ jenom asistent Office. Nu₧e, technologie OLE Automation je pouze jednou Φßstφ podstatn∞ ÜirÜφho pojmu, kter²m je OLE (Object Linking and Embedding). Jak je ze samotnΘho nßzvu patrnΘ, jednß se o sdφlenφ objekt∙ mezi aplikacemi. Lze tedy pom∞rn∞ snadno pracovat s objekty jin²ch aplikacφ, pou₧φvat jejich metody a vlastnosti. Implementace OLE vyu₧φvß principu tzv. komponentovΘho software, kdy je aplikace chßpana jako kolekce objekt∙, kterΘ majφ svoje vlastnosti a metody. Pokud tedy komponenta aplikace podporuje OLE, je mo₧nΘ "vyp∙jΦit" si jejφ vlastnosti nebo metody pro zpracovßnφ konkrΘtnφho ·kolu. Uvedenß skuteΦnost mß mnoho v²hod, kterΘ ocenφte zejmΘna v situacφch, kdy pot°ebujete vykonat urΦit² specifick² ·kol, nap°. vypoΦφtat hodnotu medißnu. Vtip je v tom, ₧e nemusφte cel² algoritmus v²Φtu medißnu programovat samy, ale "zavolßte" Excel, kterΘmu poskytnete vstupnφ ·daje, pou₧ijete statistickou funkci a mßte b∞hem n∞kolika vte°in po ruce v²sledek. V naÜem p°φkladu budeme pracovat s aplikacφ Word. Word je robustnφ aplikace, kterß obsahuje velkΘ mno₧stvφ r∙zn²ch objekt∙, p°iΦem₧ p°istupuje i k objektu Assistant, kter² je sdφlen² vÜemi aplikacemi Office. Pro pot°eby naÜeho "technologickΘho dema" nebudeme brßt v potaz alternativu kontaktovßnφ ji₧ spuÜt∞nΘ aplikace pomocφ funkce GetObject, mφsto toho vytvo°φme rovnou novou instanci aplikace pou₧itφm funkce CreateObject. NaÜe aplikace bude netradiΦnφ v tom smyslu, ₧e nebudeme pracovat se ₧ßdn²ma formulß°i ani tlaΦφtky, ale vytvo°φme spouÜt∞cφ proceduru Main, pomocφ kterΘ spustφme program a navß₧eme komunikaci s Wordem. Nejprve p°idejte do projektu VB modul a do jeho deklaraΦnφ Φasti p°idejte deklaraci objektovΘ prom∞nnΘ s Φasnou vazbou: Public objWord As Word.Application 'deklarace prom∞nnΘ s Φasnou vazbou Dßle vlo₧te do modulu proceduru Main (Tools>Add Procedure) a zapl≥te ji uveden²m k≤dem: Set objWord = CreateObject("Word.Application") With objWord .Documents.Add 'vytvo°enφ novΘho dokumentu .Visible = True 'zviditeln∞nφ aplikace .Activate 'aktivace okna aplikace End With Nynφ vlo₧te do modulu proceduru s nßzvem "pomocnik" a zapiÜte do nφ tento k≤d: Dim hodnota As Integer Assistant.Visible = True With Assistant.NewBalloon .Heading = "Co chcete ud∞lat?" .Text = "Vyberte jednu polo₧ku:" .Labels(1).Text = "Spustit moji nßpov∞du" .Labels(2).Text = "Spustit program" .Icon = msoIconTip hodnota = .Show End With Select Case hodnota Case 1 Dim nap As Long nap = WinHelp(Form1.hwnd,"c:\pokus.hlp", _ HELP_CONTENTS, 0) Assistant.Visible = False objWord.Quit 'ukonΦenφ instance Wordu Set objWord = Nothing 'uvoln∞nφ objektovΘ reference End Case 2 Dim program As Double program = Shell("notepad.exe",vbNormalFocus) Assistant.Visible = False objWord.Quit Set objWord = Nothing End Case -1 'u₧ivatel stisknul tlaΦφtko OK Assistant.Visible = False objWord.Quit Set objWord = Nothing End End Select Deklaraci API funkce Winhelp a konstanty p°idejte rovn∞₧ do modulu: Public Const HELP_CONTENTS = &H3& Public Declare Function WinHelp Lib _ "user32" Alias "WinHelpA" _ (ByVal hwnd As Long, _ ByVal lpHelpFile As String, _ ByVal wCommand As Long, _ ByVal dwData As Long) As Long Na zßv∞r musφte Visual Basicu °φct, aby program zaΦφnal vytvo°enou procedurou Main. Aktivujte nabφdku Project Properties a na kart∞ General nastavte jako Startup Object proceduru Sub Main. Po spuÜt∞nφ projektu se nastartuje Word a zobrazφ se pomocnφk s nßpov∞dnφm oknem. Po vybrßnφ polo₧ky se provede pat°iΦnß akce, ukonΦφ se spuÜt∞nß instance Wordu, "vyΦistφ" se objektovß prom∞nnß a nßÜ program se ukonΦφ. Prßv∞ jsme si ukßzali komplexnφ p°φklad aktivace pomocnφka za pou₧itφ VB. Jak vidφte, je mo₧nΘ pom∞rn∞ snadno spojit mo₧nosti pomocnφka a standardnφho nßpov∞dnΘho souboru. Na shledanou u dalÜφho pokraΦovßnφ naÜeho serißlu. |
© 2001 Vogel Publishing, design by ET NETERA