8 37 Skrypty w Visual Studio (2)


Rozdział 37.
Skrypty w Visual Studio


W tym rozdziale:

Szybkie makra
Rejestrowanie makr
Edycja makr
Używanie makr
VBScript
Model obiektów Visual Studia
Przykładowe makra


Jako programista, z pewnością nieobca Ci jest idea, że komputery służą do ułatwienia nam życia przez zautomatyzowanie powtarzalnych czynności. Właśnie to robisz dla innych, pisząc swoje programy. Jednak korzystając z najnowszej wersji Visual C++, możesz w pewnym stopniu zautomatyzować także swoją pracę.
Skrypty Visual Studia pozwalają na przejęcie kontroli nad projektem i zautomatyzowanie tych czynności, które często się powtarzają. Aby jak najbardziej skorzystać z informacji w tym rozdziale, przyjrzyj się swojej pracy z Visual C++ i poszukaj czynności, które często powtarzasz i dla których chciałbyś mieć przycisk na pasku narzędzi. Na przykład, czy często masz do czynienia z kodem, który nie jest sformatowany tak jak lubisz i w związku z tym spędzasz wiele czasu na ponownym formatowaniu programu? Czy uważasz, że mimo iż Twoje funkcje są samodokumentujące, jednak chciałbyś dopisać do nich dodatkowy komentarz?
Są to właśnie przykłady niektórych z czynności, które możesz zautomatyzować używając skryptów. Visual Studio posiada dwa rodzaje skryptów automatyzujących pracę. Jedne to makra, które można edytować za pomocą VBScriptu, zaś drugie to szybkie makra, używane do doraźnych celów. W tym rozdziale dowiesz się, jak stosować makra i jak najlepiej wykorzystać ich możliwości.
Makra w Visual Studio
Jednym z dwóch rodzajów makr w Visual Studio sątzw. szybkie makra (Quick Macro). Makra tego typu mogą być bardzo przydatne, choć w danej chwili możesz posiadać tylko jedno. Gdy tylko zarejestrujesz nowe szybkie makro, stare zostaje zapomniane. Jeśli okaże się, że potrzebujesz kilku makr tego typu lub potrzebujesz nieco większej kontroli nad działaniem makra, powinieneś stworzyć edytowalne makro, zapisane w nadającym się do ponownego wykorzystania pliku.
Standardowe makra mogą być albo rejestrowane, tak jak szybkie makra, albo pisane od zera za pomocą VBScriptu. Rejestrowane makra są automatycznie tłumaczone na VBScript w momencie zapisywania makra do pliku.
Szybkie makra
Zanim zarejestrujesz jakiekolwiek makro, przemyśl kroki, jakie mają być zapamiętane. Możesz nawet przećwiczyć sekwencję czynności lub zapisać je sobie na kartce. Może to się wydawać dziwne, jednak przećwiczenie makra lub zapisanie jego czynności zwykle jest dobrym pomysłem. Zapisując konieczne czynności unikniesz błędów i lepiej przemyślisz przebieg całej operacji.
Jednym z powodów, dla których dobrze jest przemyśleć lub przećwiczyć makro, jest ograniczenie polegające na niemożności zarejestrowania poleceń z menu kontekstowych. Aby skorzystać z takiego polecenia, musisz znaleźć inny sposób. Zwykle jednak polecenie lub opcja z menu kontekstowego powtarza się w którymś z menu lub pasków narzędzi.
Rejestrowanie szybkiego makra
Jedną z powszechnych czynności jest dodawanie nowych plików do projektu. To naprawdę prosta czynność i zwykle nie ma potrzeby, aby ją automatyzować, chyba że zechcesz dołączyć do swoich plików standardowe komentarze w nagłówku. Nasze przykładowe makro automatyzuje kroki używane w tworzeniu nowego pliku ze standardowym początkowym komentarzem.
Dodawanie plików do projektu
W celu zarejestrowania makra dodającego pliki do projektu wykonaj poniższe kroki:
1. W menu Tools wybierz polecenie Record Quick Macro. Pojawi się pasek narzędzi Record, pokazany na rysunku 37.1, a Visual Studio zacznie rejestrację wszystkich wciskanych klawiszy i wybieranych poleceń menu.
2. W menu Project, w podmenu Add to Project, wybierz polecenie New. Pojawi się znajome okno dialogowe New.
3. Tak jak zwykle, wybierz typ pliku i wpisz jego nazwę.
4. Kliknij przycisk OK, zamykając okno i otwierając nowy plik.
5. Na początku pliku dopisz standardowy, ogólny komentarz, tak jak uczyniłbyś to w normalnej sytuacji. Komentarz może obejmować Twoje nazwisko, datę i inne ogólne informacje, wspólne dla wszystkich plików w projekcie.
6. Zapisz plik.
7. Na pasku narzędzi Record kliknij przycisk Stop. Pasek narzędzi zniknie, a makro
zostanie zapamiętane.
Używanie szybkiego makra
W tym momencie możesz użyć szybkiego makra. Nie rób tego jednak bez zastanowienia, gdyż mamy pewien problem. Jeśli w menu Tools wybierzesz polecenie Play Quick-Macro, makro zostanie uruchomione, lecz nowy utworzony plik będzie miał tę samą nazwę co plik utworzony podczas rejestracji makra. To spowoduje usunięcie wszystkich zmian, jakie wprowadziłeś w poprzednim pliku.
Używając makr bądź bardzo rozważny. Makra służą do automatyzowania pracy i są bardzo użyteczne, jednak mają możliwość zmiany ustawień oraz edycji plików źródłowych, przez co mogą być także bardzo niebezpieczne, jeśli użyjesz ich niewłaściwie.
Zwykle od razu przystąpiłbyś do debuggowania kodu makra. Jednak w przypadku szybkich makr nie ma kodu, który byłby dostępny do debuggowania czy edycji. Jeśli szybkie makro nie działa poprawnie, możesz jedynie je ponownie zarejestrować. W przypadku naszego szybkiego makra możesz więc ograniczyć się do wstawienia standardowego komentarza do istniejącego pliku. W tym celu pomiń po prostu kroki od 2. do 4. z procedury opisanej w sekcji "Rejestrowanie szybkiego makra".
Inną możliwością jest stworzenie makra, które dałoby się edytować. Takie makra są nazywane makrami standardowymi (lub po prostu makrami); opiszemy je w dalszej części rozdziału. Standardowe makro zawiera kod, który można edytować i debuggować.
Tworzenie makr VBScriptu
Istnieją trzy zasadnicze różnice pomiędzy makrami VBScriptu (standardowymi) a szybkimi makrami. Standardowe makra mogą być edytowane, debuggowane i zapisywane w pliku. Te dodatkowe możliwości stanowią o większej elastyczności makr tego typu w porównaniu z szybkimi makrami.
Aby użyć makra VBScriptu, możesz stworzyć je, rejestrując serię czynności lub pisząc je w edytorze kodu VBScript. Często najszybszym sposobem utworzenia makra jest zarejestrowanie go, a dopiero potem ręczne zmodyfikowanie kodu. Innym sposobem skorzystania z makra jest załadowanie pliku makra stworzonego przez kogoś innego.
Zanim stworzysz makro, zwykle dobrym pomysłem będzie wcześniejsze przećwiczenie go. W ten sposób łatwiej zapamiętasz klawisze i polecenia menu, które mają być zarejestrowane. Oprócz tego zabezpieczysz się przed niepotrzebnymi cofnięciami oraz będziesz mógł łatwiej zrozumieć kod makra, gdy ewentualnie przystąpisz do jego edycji.
Rejestrowanie makra VBScriptu
Kroki przy rejestrowaniu makra VBScriptu są bardzo podobne do kroków z procedury rejestrowania szybkiego makra, przedstawionej nieco wcześniej. W tej procedurze korzystamy nawet z tego samego przykładu. Jedną z ważniejszych różnic jest to, że przed zarejestrowaniem musisz nadać makru nazwę.
1. W menu Tools wybierz polecenie Macro. Gdy to robisz pierwszy raz, pojawia się okno dialogowe informujące, że podczas działania makra na pasku narzędzi będzie wyświetlana ikona makra.
2. Wyłącz opcję Show this text next time, tak aby to okno dialogowe nie pokazywało się w przyszłości, po czym kliknij przycisk OK. Gdy okno się zamknie, pojawi się okno dialogowe Macro, przedstawione na rysunku 37.2.
W polu Macro Name wpisz nazwę makra, na przykład AddNewFileToProject. To makro zostanie zapisane w pliku wskazanym na rozwijanej liście Macro File.
3. Kliknij przycisk Record (zarejestruj). Pojawi się okno dialogowe Add Macro, pokazane na rysunku 37.3.
4. W polu Description opisz swoje makro. Ten opis zostanie dołączony do pliku razem z makrem.
5. Kliknij przycisk OK, zamykając okno Add Macro. Pojawi się pasek narzędzi Record, a Visual Studio zacznie rejestrację wszystkich wciskanych klawiszy i wybieranych poleceń menu.
6. W menu Project, w podmenu Add to Project, wybierz polecenie New. Pojawi się znajome okno dialogowe New.
7. Tak jak zwykle, wybierz typ pliku i wpisz jego nazwę.
8. Kliknij przycisk OK, zamykając okno i automatycznie otwierając nowy plik do edycji.
9. Na początku pliku dopisz standardowy, ogólny komentarz, tak jak uczyniłbyś to w normalnej sytuacji. Komentarz może obejmować twoje nazwisko, datę i inne ogólne informacje, wspólne dla wszystkich plików w projekcie.
10. Zapisz plik.
11. Na pasku narzędzi Record kliknij przycisk Stop. Pasek narzędzi zniknie, a makro zostanie otwarte do edycji, tak jak pokazano na rysunku 37.4.
To makro zawiera ten sam błąd co zarejestrowane wcześniej szybkie makro. Jednak tym razem możemy poddać kod makra edycji, tak aby zamiast tworzyć plik o określonej nazwie, prosiło użytkownika ojej podanie.
Gdy tworzysz własne makra, możesz użyć przycisku Options w oknie dialogowym Macro (rysunek 37.2). Ten przycisk powoduje rozwinięcie okna i wyświetlenie opcji pozwalających na przypisanie nowego makra przyciskowi paska narzędzi, kombinacji klawiszy czy wybranie nowego pliku dla makra.
Kod makr VBScriptu
Oto kod stworzony w wyniku zarejestrowania makra:
Sub AddNewFileToProject()
'DESCRIPTION: Dodaje do projektu nowy plik i uzupełnia go o komentarz
'Begin Recording
Documents.Add "Text"
ActiveDocument.Save "c:\HELION\ROZDZ35\MyBrowser\text.cpp"
ActiveDocument.Language = "C/C++"
ActiveDocument.Selection = "// Autor: Garrett Pease"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "// Data: 5/22/98"
ActiveDocument.Selection.NewLine
ActiveDocument.Save 'End Recording End Sub
Makro jest napisane w VBScripcie, więc jeśli nie znasz tego języka, w dalszej części rozdziału znajdziesz krótki samouczek.
Pierwsza linia kodu dodaje nowy dokument tekstowy. Ten nowy dokument jest dostępny poprzez obiekt ActiveDocument. Jako typ języka wybraliśmy C/C++. Następnie do tekstu są dodawane komentarze. Służą do tego właściwości Selection obiektu ActiveDocument. Na końcu plik jest zapisywany wraz ze wszystkimi wprowadzonymi zmianami.
Przykładowy kod zawiera kilka szczegółów, które należy zmienić, aby uczynić go bardziej użytecznym. Po pierwsze, kod powinien prosić o podanie nowej nazwy dla pliku. Po drugie, kod będzie bardziej użyteczny, jeśli automatycznie umieści nazwę pliku w komentarzu, łącznie z bieżącą datą i czasem. Na koniec, makro nie dodaje pliku do projektu, mimo że takie było pierwsze wybrane polecenie menu. W następnych sekcjach opiszemy, w jaki sposób dokonać edycji kodu, aby makro spełniało nałożone nań wymagania.
Edycja makra VBScriptu
Edycja kodu makra jest niezbędna, gdy chcesz zmodyfikować zarejestrowane makro lub napisać je od początku. W tym przykładzie poddamy edycji poprzednio zarejestrowane makro AddNewFileToProject, tak aby było bardziej ogólne.
Edycja makra AddNewFileToProject
W celu stworzenia bardziej ogólnej wersji makra wykonaj poniższe kroki:
1. W menu Tools wybierz polecenie Macro. Jeśli nie wyłączyłeś uprzednio opcji Show this next time, może pojawić się informacyjny komunikat.
2. W oknie dialogowym Macro zaznacz na liście makro, które chcesz poddać edycji. Nazwa makra pojawi się w polu Macro Name.
3. Kliknij przycisk Edit. Pojawi się okno edytora tekstowego z załadowanym kodem makra.
4. Zmodyfikuj kod makra tak, aby wyglądało tak jak poniżej:
ExecuteCommand "FileNewInProj ect" ActiveDocument.Selection = "// Plik:& ActiveDocument.Name ActiveDocument.Selection.NewLine ActiveDocument.Selection = "// Autor;Garrett Pease" ActiveDocument.Selection.NewLine ActiveDocument.Selection = "// Data:"& Now ActiveDocument.Selection.NewLine ActiveDocument.Save
5. Zapisz zmiany.
6. Kliknij plik prawym przyciskiem myszy i z menu kontekstowego wybierz polecenie Reload Macro File, gdyż zanim użyjesz nowego makra, musisz je ponownie załadować.
Pierwszą zmianą w kodzie jest użycie instrukcji ExecuteCommand. Ta instrukcja pozwala na wywoływanie poleceń w menu, takich jak FileNewInProject. FileNewInPro-ject jest nazwą polecenia menu wbudowanego w Visual Studio.
Po utworzeniu nowego pliku makro dopisuje na jego początku linię komentarza zawierającą nazwę pliku. W tym celu pobieramy nazwę pliku za pomocą właściwości ActiveDocu-ment.Name. Ostatnią zmianą jest dopisanie w komentarzu daty. Ta linia kodu pobiera bieżącą datę i czas, używając funkcji VBScript NÓW.
Po edycji makro w pełni spełnia nałożone mu wymagania. Zamiast zwyczajnie otwierać nowy plik tekstowy makro wywołuje polecenie menu otwierające okno dialogowe New i pozwala użytkownikowi na wskazanie nazwy i typu pliku. Po stworzeniu pliku makro dodaje do niego kilka komentarzy, zawierających między innymi nazwę pliku i bieżący czas, po czym zapisuje plik na dysku.
Tworzenie pustego makra
Innym sposobem utworzenia makra jest ręczne wpisanie kodu VBScriptu. Ten proces wymaga od programisty dużo większej wiedzy, gdyż konieczna jest znajomość wszystkich poleceń VBScriptu, jakie mają zostać użyte. Zwykle dużo łatwiej jest zarejestrować makro, co powoduje przetłumaczenie poleceń na kod VBScript. Jednak jak widzieliśmy w poprzednim przykładzie, polecenia nie zawsze są tłumaczone tak, jak byśmy sobie tego życzyli.
Ręczne tworzenie makra
1. W menu Tools wybierz polecenie Macro. Pojawi się okno dialogowe Macro pokazane na rysunku 37.5.
2. W polu Macro Name wpisz nazwę makra.
3. Kliknij przycisk Edit. Pojawi się okno dialogowe Add Macro.
4. Wpisz opis nowego makra.
5. Kliknij przycisk OK. Okno się zamknie, po czym zostanie otwarty plik makra, dzięki czemu będziesz mógł przystąpić do edycji (rysunek 37.6).
6. Wpisz kod makra.
7. Zapisz plik makra.
W tym momencie masz nowe makro VBScriptu. Pamiętaj, że przed jego użyciem musisz ponownie załadować plik makra.
Użycie makr VBScriptu
Makra są przechowywane w zwykłych plikach tekstowych z rozszerzeniem .DSM. Domyślnym miejscem, w którym Yisual Studio szuka plików makr, jest kartoteka devstudio\common\MSDev98\Macros\. W tej kartotece mogą być już trzy pliki i powinieneś przechowywać w niej także własne pliki makr, włącznie z plikiem skopiowanym z dołączonej do książki płytki CD-ROM. W ten sposób będziesz miał do nich łatwiejszy dostęp.
Trzy pliki, które już mogą znajdować się w tej kartotece, to TemporaryQuickMacro.DSM, MyMacros.DSMorazSample.DSM. Pliki TemporaryQuickMacro.DSM i MyMacros.DSM są tworzone przez Visual Studio dopiero w momencie, gdy zaczynasz tworzyć własne makra. Pliku TemporaryQuickMakro.DSMnie powinieneś ruszać, gdyż właśnie w nim Visual Studio przechowuje kod bieżącego szybkiego makra. Plik MyMacros.DSM jest domyślnym plikiem dla nowych makr. Plik Sample.DSM zawiera kilka przykładowych makr dostarczonych przez Microsoft.
Plik Sample.DSM zawiera kilka przykładowych makr, które możesz przejrzeć, aby lepiej poznać język VBScript i jego zastosowanie, Jednym z bardziej użytecznych aspektów makr w tym pliku jest to, że zostały one opracowane do działania z kilkoma rodzajami plików, podczas gdy przykłady zaprezentowane w tym rozdziale są przydatne głównie dla programistów C++. Jeśli tworzysz także pliki HTML, możesz przejrzeć przykładowe makra Microsoftu, aby dowiedzieć się, jak operować zawartością tych plików.
Ładowanie plików makr
Aby użyć któregoś z makr zawartych w pliku, musisz najpierw załadować ten plik. Gdy rejestrujesz lub edytujesz makro, plik jest ładowany automatycznie. Inne pliki, takie jak YCBible.DSMczy Sample.DSM, muszą być ładowane ręcznie.
Ładowanie pliku makra
1. Skopiuj plik yCBible.DSMz dołączonej do książki płytki CD-ROM do kartoteki devstudio\common\MSDev98\Macros.
2. W menu Tools wybierz polecenie Customize. Pojawi się okno dialogowe Customize.
3. Kliknij zakładkę Add-ins and Macro Files, pokazanej na rysunku 37.7.
4. Z listy Add-ins and macro files wybierz plik makra, który chcesz załadować. Aby wybrać plik, kliknij prostokąt opcji obok nazwy pliku. Jeśli zapomniałeś co zawiera dany plik, gdy go zaznaczysz, pojawi się krótki opis.
5. Możesz także użyć przycisku Browse w celu załadowania plików znajdujących się poza domyślną kartoteką.
6. Kliknij przycisk Close. Jeśli makro o tej samej nazwie występuje w kilku zaznaczonych plikach, pojawi się ostrzegawczy komunikat i zostanie załadowany tylko jeden z plików.
Pamiętaj o załadowaniu najnowszej wersji pliku makra, gdyż może to mieć duże znaczenie podczas edycji pliku. Jeśli spróbujesz uruchomić zmodyfikowane makro lub choćby odwołać się do niego poprzez okno dialogowe Macro, pojawi się komunikat informujący o konieczności ponownego załadowania makra.
Okno dialogowe Macro stanowi najprostszy sposób zarządzania makrami. Pozwala na ich uruchamianie i edytowanie. Innym sposobem dostępu do makr jest przypisywanie im kombinacji klawiszy lub przycisków na paskach narzędzi.
Pliki makro zawierają opisy zawarte w liniach komentarza zaczynających się od słów "FILE DESCRIPTION:", umieszczonych na początku pliku. Ta etykieta nie musi być wypisana dużymi literami i czasem można natrafić na opis pliku w formie:
'File Description: Makra formatowania kodu
Uruchamianie makr VBScriptu
Gdy już załadujesz plik, możesz uruchomić któreś z zawartych w nim makr. W tym celu możesz przypisać makro do przycisku na pasku narzędzi lub do kombinacji klawiszy, lub po prostu skorzystać z okna dialogowego Macro.
Uruchamianie makra w oknie dialogowym Macro
1. W menu Tools wybierz polecenie Macro. Pojawi się okno dialogowe Macro.
2. Z rozwijanej listy Macro File wybierz plik zawierający makro, które chcesz uruchomić.
3. Zaznacz makro na liście poniżej pola Macro Name. W dolnej części okna pojawi się opis makra.
4. Kliknij przycisk Run, po czym Visual Studio uruchomi makro. Podczas działania makra na pasku narzędzi jest wyświetlana mała ikona.
Przypisywanie makr do przycisków na paskach narzędzi
Pasek narzędzi jest dobrym miejscem do umieszczenia często używanych makr, szczególnie wtedy gdy masz makro podobne w funkcji do istniejącego przycisku. Na przykład, makro AddNewFileToProject używane w tym rozdziale doskonale nadaje się do umieszczenia obok przycisku New lub nawet zamiast tego przycisku.
Aby przypisać makro do przycisku na pasku narzędzi, musisz najpierw sprawdzić, czy jest załadowany plik zawierający to makro. Następnie w menu Tools wybierz polecenie Customize i w oknie dialogowym kliknij zakładkę Commands (rysunek 37.8).
Z rozwijanej listy Category wybierz pozycję Macros. Na liście Commands pojawią się wszystkie załadowane makra. Wybierz makro z listy (jego opis pojawi się w dolnej części okna). Przeciągnij nazwę makra do tego miejsca na którymś z pasków narzędzi, w którym chcesz umieścić przycisk makra. Gdy zwolnisz przycisk myszy, pojawi się okno dialogowe Button Appearance, pokazan na rysunku 37.9.
Wybierz tę opcję, która najlepiej odpowiada funkcji makra, a następnie wybierz przycisk lub wpisz tekst opisujący makro. Kliknij przycisk OK, po czym przycisk pojawi się na pasku narzędzi. Jeśli przycisk nie pojawił się w tym miejscu paska, w którym sobie życzyłeś, możesz go przeciągnąć przy wciśniętym klawiszu Alt. Możesz dalej przypisywać kolejne makra aż do chwili, gdy klikając przycisk Close zamkniesz okno dialogowe Customize.
Przypisywanie makr do kombinacji klawiszy
Innym sposobem uruchamiania makra jest przypisanie mu kombinacji klawiszy, co jest szczególnie przydatne w przypadku często stosowanych makr. Jednym z takich makr może być przykładowe makro CommentOut, dostarczane jako jedno z makr przykładowych. To makro powoduje umieszczenie w komentarzu zaznaczonego tekstu i działa zarówno z plikami C++, jak i HTML.
Aby przypisać makro do kombinacji klawiszy, musisz najpierw sprawdzić, czy jest załadowany plik zawierający to makro. Następnie w menu Tools wybierz polecenie Customize i w oknie dialogowym kliknij zakładkę Keyboard (rysunek 37.10).
Z rozwijanej listy Category wybierz pozycję Macros. Na liście Commands pojawią się wszystkie załadowane makra. Wybierz makro z listy (jego opis pojawi się w dolnej części okna). Następnie kliknij w polu Press new shortcut key i wciśnij kombinację klawiszy, której chcesz przypisać makro. Jeśli wybrana kombinacja była już czemuś przypisana, poniżej pola zostanie wyświetlona odpowiednia informacja. Aby przypisać makro wybranej kombinacji, kliknij przycisk Assign.
VBScript
VBScript jest ostatnim dodatkiem do rodziny języków programowania Yisual Basic Microsoftu. Jeśli znasz Visual Basic lub Visual Basic for Applications, nie będziesz miał problemów z korzystaniem z VBScriptu. W rzeczywistości, VBScript jest po prostu podzbiorem języka Visual Basic for Applications, w skrócie VBA.
Jednak VBScript nieco się różni od innych języków rodziny Visual Basica. Po pierwsze, VBScript wymaga do działania aplikacji-gospodarza. Duża część funkcjonalności języka pochodzi właśnie od aplikacji gospodarza, którą w tym przypadku jest Visual Studio. Do innych aplikacji-gospodarzy YBScriptu, jakie możesz znać, należą Internet Explorer oraz Windows Scripting Host (Host skryptów systemu Windows). Co więcej, zarządzanie VBScriptem możesz dodać nawet do własnych programów.
Ze względu na korzystanie z aplikacji-gospodarza YBScript został opracowany jako język niezależny od platformy i brakuje w nim kilku elementów występujących w innych wersjach Visual Basica. Między innymi, VBScript nie posiada funkcji wejścia-wyjścia, obecnych w innych językach. Nie oznacza to, że nie możesz operować na plikach, a jedynie że musisz to robić nieco "dookoła". Visual Studio zawiera kilka obiektów, które mogą zostać wykorzystane do operacji na plikach. Tymi obiektami zajmiemy się w dalszej części rozdziału.
Ta sekcja zawiera opis kilku podstawowych aspektów programowania w języku VBScript, przeznaczony dla tych osób, które nie znają skryptów Visual Basica. Z powodu ograniczonej ilości miejsca bardziej szczegółowych informacji będziesz musiał poszukać gdzie indziej. Jednym ze źródeł informacji o VBScripcie jest dostarczana wraz z Yisual Studiem dokumentacja, zawierająca opis wszystkich wbudowanych funkcji. Innym źródłem są książki o VBScrypcie. Większość z nich skupia się na programowaniu dla Internetu, na przykład Web Scripting Host Steva Holznera, jednak wiele z zawartych w nich informacji odnosi się także do Visual Studia.
Programowanie VBScriptu
W odróżnieniu od C czy C++, YBScript jest językiem interpretowanym, więc działa w inny sposób. Kod jest odczytywany po jednej linii naraz, interpretowany i wykonywany. To oznacza, że linia kodu musi być pełna. Ogólnie należy założyć, że nie można umieszczać instrukcji w kilku kolejnych liniach, tak jak się to zwykle praktykuje w Yisual C++. Jeśli podział na linie jest konieczny, na końcu linii należy umieścić znak podkreślenia. Oto przykład długiej instrukcji zapisanej w kilku liniach:
ActiveDocuraent.Selection = " + vbLF + _ " + vbLF & Deser & "" + vbLF
Kolejną konsekwencją faktu, że VBScript jest językiem interpretowanym, jest to, że do przetestowania kodu nie możesz wykorzystać kompilacji. Kod jest sprawdzany wyłącznie podczas działania i tylko wtedy możesz sprawdzić także błędy składniowe. Często zdarza się, że po wykonaniu fragmentu kodu pojawia się komunikat z zapytaniem, czy chcesz debuggować kod. Gdy wybierzesz odpowiedź twierdzącą, otwiera się debugger i możesz przejrzeć kod. Najczęściej okazuje się, że błąd jest prostym błędem składni, zgłoszonym jednak dopiero podczas wykonywania makra.
Gdy w makrze wystąpi błąd, Yisual Studio pyta, czy chcesz je debuggować. To zwykle dobry pomysł, gdyż w ten sposób możesz najłatwiej zlokalizować przyczynę błędu. W oknie debuggowania podświetlona jest błędna linia. Ponieważ w tym oknie nie możesz edytować kodu, musisz zapamiętać lub zapisać sobie jej położenie. Gdy zamkniesz okno debuggowania, zamyka się również debugger.
Używanie zmiennych
VBScript posiada jeden typ danych. Wszystkie zmienne są typu wariant, który może reprezentować zmienne logiczne, łańcuchy, daty i liczby. Z powodu braku typów danych możesz zdecydować się na użycie notacji węgierskiej, używanej także przez Microsoft w swoich przykładowych makrach i plikach nagłówkowych, lub na użycie innej notacji, dzięki której będziesz mógł zorientować się, jaki typ danych przechowujesz w swoich zmiennych.
Zmienne przed użyciem nie muszą być deklarowane. Jednak można je deklarować, używając do tego słów kluczowych Dim, Public czy Private. Na przykład, możesz stworzyć zmienną do przechowania bieżącej daty, deklarując ją instrukcją Dim Dzisiejsza-Data. Umieszczając instrukcję option Explicit na początku pliku makra, możesz nakazać, by zmienne musiały być zadeklarowane przed użyciem.
Używanie stałych
W języku VBScript można używać także stałych, definiując je za pomocą słowa kluczowego const. Ze stałych korzystamy również w przykładach makr zawartych w tym rozdziale. Na przykład, instrukcja Const Author = "John A. Programmer" definiuje stałą, która następnie jest wstawiana do ogólnego komentarza na początku pliku, stworzonego przez inne makra.
VBScript posiada także stałe wbudowane. Są one zdefiniowane w samym języku VBScript. Takie stałe jak vbOKOnly czy vbYesNo mogą być użyte na przykład do definiowania rodzaju ikony w oknie komunikatu. Inne wbudowane stałe są wykorzystywane przez obiekty języka. Zwykle nazwy stałych wbudowanych zaczynają się od liter "vb".
Używanie funkcji i procedur
YBScript pozwala na tworzenie funkcji podobnych do funkcji języka C++. Istnieją dwa rodzaje podprogramów: procedury (nie zwracające wartości) oraz funkcje (zwracające wartości). Wszystkie makra VBScript są procedurami. Procedury rozpoczynają się od słowa kluczowego Sub i kończą się słowem kluczowym End Sub:

Sub AGenericProcedure
' w tym miejscu znajduje się kod procedury
MsgBox "Ta procedura właśnie działa." End Sub

Funkcje są podobne w wyglądzie do procedur, lecz mogą zwracać wartości. Aby zwrócić wartość, po prostu przypisz j ą nazwie funkcji:

Function GetAuthor () As String
' w tym miejscu znajduje się kod funkcji
GetAuthor = InputBox ( "Jak się nazywasz?" ) End Function
Model obiektów Visual Studia
Visual Studio zawiera kilka obiektów, z których można korzystać w makrach VB-Scriptu i dodatkach w celu zautomatyzowania różnych czynności. Te obiekty zostały opisane w tabeli 37.1.
Dostęp do obiektów
Relacja pomiędzy obiektami została przedstawiona na rysunku 37.11. Zwróć uwagę, że na rysunku znajdują się dwa obiekty Applications. Jest tak, ponieważ obiektem nadrzędnym aplikacji, czyli Visual Studia, jest obiekt Application. Na rysunku występują także dwa obiekty window. Jeden z nich reprezentuje okna tekstowe, a drugi reprezentuje inne rodzaje okien.
Tabela 37.1. ObiektyVisual Studia
Obiekt
Opis
ApplicationTen obiekt reprezentuje aplikację Visual Studia i może być używany w celu dostępu do wszystkich innych obiektów.

BreakpointObiekt używany podczas debuggowania.

Breakpoints
Kolekcja wszystkich ustawionych punktów wstrzymania.

BuildProjectProjekt wraz ze wszystkimi informacjami konfiguracyjnymi potrzebnymi do zbudowania go.

Configuration
Ustawienia używane podczas budowania projektu.
Configurations
Kolekcja wszystkich obiektów konfiguracji dla projektu.
Debugger
Obiekt powiązany z procesem debuggowania, pozwalający na analizowanie działania programu.

Document
Otwarty dokument, na przykład plik zasobów.
Documents
Kolekcja wszystkich otwartych dokumentów,
do których mogą należeć obiekty Document oraz TextDocument.

Project
Kolekcja powiązanych ze sobą plików.
ProjectsKolekcja zawierająca jeden lub więcej projektów w aktywnej przestrzeni roboczej.

TextDocument
Każdy otwarty plik tekstowy, taki jak plik kodu źródłowego.

TextEditor
Edytor tekstów w VisualStudiu

TextSelectionTekst zaznaczony w otwartym pliku tekstowym lub
TextDocument.

TextWindow
Okno lub widok zawierający otwarty plik tekstowy.

Window
Okno potomne Yisual Studia zawierające dokument.

Windows
Kolekcja wszystkich otwartych obiektów Window.

.
Użycie obiektu Application
Jak widać na rysunku 37.11, obiekt Application znajduje się na samym szczycie hierarchii obiektów Visual Studia. Metod i właściwości tego obiektu możesz użyć do odwoływania się do wszystkich innych obiektów.
Obiekt Application jest jednocześnie obiektem domyślnym, co oznacza, że możesz odwoływać się do jego właściwości i metod bez jawnego odwoływania się do tego obiektu. Na przykład, aby wywołać metodę RebuildAll, możesz po prostu użyć instrukcji RebuildAll zamiast pełnej instrukcji Application.RebuildAll. W efekcie te właściwości i metody stają się rozszerzeniem języka VBScript. Niektóre właściwości obiektu Application zostały zebrane w tabeli 37.2, zaś jego metody - w tabeli 37.3.
MODEL OBIEKTÓW VISUAL STUDIA KTÓRY ILUSTRUJE RELACJE POMIĘDZY RÓŻNYMI OBIEKTAMI
Application
-> Application -> Breakpoints(Application)-> Breakpoint(Breakpoints)

-> Debugger( Application)

-> Documents(Application)

-> Document( Application)-> Window(Document)

-> TextDocument( Application)->Text Selection(TextDocument)->Text Window(Text Selection)->Windo(wText Window)

-> Projects( Application)->Project( Projects)->Configurations(Projec)->Configuration (Configurations)-> Configurations(Configuration)

-> TextEditor( Application)

-> Windows( Application)


Od Application do Window(Document) ->Okna ogólne
TextDocument( Application)->Okna tekstowe-
Od Configurations(Projec) do Configurations(Configuration) ->Kołowo(zatacza koło

























































Rozdział 37. Skrypty w Visual Studio
1077
Tabela 37.2. Niektóre z -właściwości obiektu Application
Właściwość
Opis
ActiveConfiguration
Umożliwia dostęp do aktywnej konfiguracji bieżącego projektu.
ActiveDocument
Umożliwia dostęp do aktywnego dokumentu. Jest nim albo obiektDocument, albo TextDocument.

ActiveProjectUmożliwia dostęp do aktywnego projektu.

ActiveWindow
Steruje aktywnym oknem.

Application Obiekt, który może być użyty do dostępu do wszystkich innych obiektów Visual Studia.

CurrentDirectory
Ustawia lub zwraca ścieżkę kartoteki używaną przez polecenie Open.
Debugger
Umożliwia dostęp do obiektu Debugger.
Documents
Umożliwia dostęp do kolekcji otwartych dokumentów. Errors
Zwraca wartość określającą, czy podczas ostatniego budowania projektu wystąpiły jakieś błędy. Wartość -1 oznacza, że nie budowano projektu, O oznacza brak błędów, zaś 1 oznacza, że wystąpiły jakieś błędy.

FullNarae
Zwraca pełną ścieżkę dostępu i nazwę pliku wykonywalnego
Height
Zwraca lub ustawia odległość od górnej do dolnej krawędzi głównego okna Visual Studia.

Left
Zwraca lub ustawia odległość od krawędzi ekranu do lewej krawędzi okna Visual Studia.

Path
Zwraca ścieżkę dostępu do pliku wykonywanego Visual Studia.

Projekts
Umożliwia dostęp do kolekcji projektów w załadowanej przestrzeni roboczej.

TextEditor
Umożliwia dostęp do obiektu TextEditor.
Top
Zwraca lub ustawia odległość od krawędzi ekranu do górnej krawędzi oknaVisual Studia.

Version
Zwraca łańcuch reprezentujący numer wersjiVisual Studia.
Visible
Określa, czy główne okno Visual Studia jest widoczne.
Warnings
Zwraca wartość określającą, czy podczas ostatniego budowania projektu wystąpiły jakieś ostrzeżenia. Wartość -l oznacza, że nie budowano projektu, 0 oznacza brak ostrzeżeń, zaś l oznacza, że wystąpiły jakieś ostrzeżenia.

Width
Zwraca lub ustawia odległość od lewej do prawej krawędzi głównego okna Visual Studia.

Windows
Umożliwia dostęp do kolekcji wszystkich otwartych okien.
WindowState
Zwraca lub ustawia stan okna Visual Studia. Wartość dsWindowStateMaximized powoduje maksymalizację okna, dsWindowStateMinimized powoduje minimalizację okna, zaś dsWindowStateNormal przywraca zwykły rozmiar okna.


Tabela 37.3. Niektóre z metod obiektu Application
Metoda
Opis
AddKeyBinding
Łączy kombinację klawiszy z poleceniem. Łącząc kombinację klawiszy z poleceniem powinieneś uważać, aby nie powstał konflikt z istniejącymi powiązaniami.

AddProject
Tworzy i dodaje nowy projekt do przestrzeni roboczej.
Build
Buduje projekt, używając aktywnej konfiguracji, chyba że jawnie wskażesz inną konfigurację. Przetwarzane są jedynie te pliki, które uległy zmianie.

Clean
Usuwa wszystkie pliki pośrednie i tymczasowe w aktywnej konfiguracji, chyba że jawnie wskażesz inną konfigurację.
EnableModeless
Włącza lub wyłącza istnienie niemodalnych okien w Visual Studiu. Tę metodę zwykle wywołuje się przed wyświetleniem modalnego okna dialogowego, aby zapewnić, by użytkownik nie mógł przejść gdzie indziej przed zamknięciem okna dialogowego.

ExecuteCommand
Wykonuje makro VBScriptu lub inne polecenie, na przykład polecenie w menu.

ExecuteConfiguration
Wykonuje program w bieżącej przestrzeni roboczej.
GetPackageExtension
Umożliwia dostęp do rozszerzeń obiektów Visual Studia stworzonych przez inne firmy.

PrintToOutputWindow
Wysyła tekst generowany przez makro do zakładki makro okna Output. Ta metoda jest zwykle używana z danymi, które nie są wyświetlane w oknach komunikatów.

Quit
Prosi użytkownika o zapisanie wszystkich zmian w dokumentach, a następnie zamyka dokumenty i kończy działanie Yisual Studia.
RebuildAll
Buduje projekt, używając aktywnej konfiguracji, chyba że jawnie wskażesz inną konfigurację. Przetwarzane są wszystkie pliki.


Przykładowa aplikacja
Plik YCBible.DSM dołączony do książki zawiera przykładowe makra, których możesz używać w swoich programach, ucząc się korzystać z YBScriptu. W tej sekcji opiszemy przykładowe makro CreateFunctionDescriptionFile.
Uruchamianie przykładowego makra
Makro CreateFunctionDescriptionFile jest użyteczne przy tworzeniu dokumentacji kodu źródłowego. Makro przegląda kod źródłowy, analizując nagłówki funkcji, i tworzy plik HTML z prostym opisem tych funkcji.


Aby sprawdzić jak działa to makro, otwórz w Yisual Studiu plik źródłowy C++. Sprawdź, czy jest załadowany plik makra YCBible.DSM, tak aby makro mogło zostać użyte. Ładowanie plików makr opisywaliśmy nieco wcześniej w tym rozdziale. Za pomocą polecenia Macro w menu Tools otwórz okno dialogowe Macro. Wybierz z listy makro CreateFunctionDescriptionFile, po czym kliknij przycisk Run. Jeśli makro nie jest dostępne, rozwiń listę Macro File i wybierz plik makr YCBible.
Makro tworzy nowy plik HTML zawierający informacje o funkcjach używanych w pliku kodu źródłowego. Możesz następnie załadować ten plik do przeglądarki WWW. Przykład takiego pliku HTML pokazano na rysunku 37.12.
Używając tego makra, powinieneś pamiętać o kilku rzeczach. Makro oczekuje, że wszystkie deklaracje funkcji znajdują się jedną linię powyżej otwierającego nawiasu klamrowego, tak jak w tym przykładzie:
int Stat::SetCurrentStat (int newCurrentValue) {
int oldValue = currentStat;
currentStat = newCurrentValue;
return oldValue;
}
Możesz łatwo zmodyfikować makro, dostosowując je do innego stylu kodowania. Oczywiście, jeśli nie zmienisz makra przed uruchomieniem go, otrzymasz szereg ostrzeżeń. Makro wyświetla ostrzegawczy komunikat, gdy uważa, że deklaracja funkcji zawiera błąd składniowy. Tego typu ostrzeżenia pojawiają się także przy funkcjach zadeklarowanych w kilku liniach. W przypadku ostrzeżenia makro po prostu kontynuuje działanie od następnej funkcji.
Działanie przykładowego makra
Makro CreateFunctionDescriptionFile z listingu 37.1 do tworzenia opisu funkcji C++ wykorzystuje funkcję outputDescription. Ta funkcja jest oparta na dostarczanej wraz z Visual Studiem funkcji AddFunctionDescription. Jedyna rzeczywista zmiana polega na zmianie miejsca docelowego, tak aby opis znalazł się w tabeli HTML.
Tabela HTML z dokumentacją funkcji zawiera wiersz przeznaczony na opis tej funkcji. Ten opis obecnie trzeba wpisywać ręcznie. Jeśli jednak używasz komentarzy w jednolitym stylu i umieszczasz w nich opis funkcji, możesz zmodyfikować to makro, aby umieszczało opis w pliku HTML.
Listing 37.1. Kod tworzący plik HTML z opisem funkcji zawartych w pliku źródłowym C+ +

Sub CreateFunctionDescriptionFile()
'DESCRIPTION: Ta funkcja kopiuje deklaracje funkcji
' z pliku C/C++ do pliku HTML i tworzy opisy tych funkcji
'Tworzymy plik HTML dla przechowania informacji o funkcji
CurrentSourceFileName = ActiveDocument.FullName TempString = CurrentSourceFileName Position = InStrRev(TempString,".") CurrentHTMLFileName = Left(TempString, Position) + "html"

Documents.Add "Text"
ActiveDocument.Save CurrentHTMLFileName
ActiveDocument.Language = "HTML - IE 3.0"

'Tworzymy nagłówek pliku HTML
ActiveDocument.Selection = ""
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = ""
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "" & ActiveDocument.Name _<br>& ""
ActiveDocument.Selection.NewLine ActiveDocument.Selection = "" ActiveDocument.Selection.NewLine ActiveDocument.Selection = "" ActiveDocument.Selection.NewLine

'Dokumentujemy pierwszą funkcję i pobieramy jej numer linii Documents(CurrentSourceFileName).Active = True ActiveDocument.Selection.StartOfDocument ActiveDocument.Selection.FindText "{" 'Kopiujemy deklarację funkcji
LineNumber = ActiveDocument.Selection.CurrentLine ActiveDocument.Selection.LineUp ActiveDocument.Selection.EndOfLinę dsExtend FunctionText = ActiveDocument.Selection.Text
'Kopiujemy deklarację funkcji do pliku HTML
' i tworzymy jej opis
Documents(CurrentHTMLFileName).Active = True ActiveDocument.Selection.NewLine OutputDescription FunctionText

'Przechodzimy na koniec pierwszej funkcji i przeszukujemy ' resztę dokumentu źródłowego dla następnych funkcji, ' zapewniając jednocześnie, że nie będziemy ponownie ' dokumentować pierwszej funkcji.
Documents(CurrentSourceFileName).Active = True ActiveDocument.Selection.LineDown ExecuteCommand "GoToMatchBrace" ActiveDocument.Selection.LineDown
While (ActiveDocument.Selection.FindText("{") = True _ And ActiveDocument.Selection.CurrentLine > LineNumber) 'Kopiujemy deklarację funkcji ActiveDocument.Selection.LineUp ActiveDocument.Selection.EndOfLinę dsExtend FunctionText = ActiveDocument.Selection.Text

'Kopiujemy deklarację funkcji do pliku HTML ' i tworzymy jej opis
Documents(CurrentHTMLFileName).Active = True OutputDescription FunctionText ActiveDocument.Selection.NewLine

'powracamy do pliku źródłowego i przechodzimy na ' koniec funkcji.
Documents(CurrentSourceFileName).Active = True ActiveDocument.Selection.LineDown ExecuteCommand "GoToMatchBrace" ActiveDocument.Selection.LineDown Wend

'Tworzymy koniec pliku HTML i zapisujemy go
Documents(CurrentHTMLFileName).Active = True ActiveDocument.Selection = "" ActiveDocument.Selection.NewLine ActiveDocument.Save

'Powrót End Sub

Pierwszym krokiem w tworzeniu pliku opisu jest stworzenie nowego pliku HTML. W tym celu za pomocą właściwości FullName pobieramy nazwę pliku źródłowego. Do nazwy dodajemy rozszerzenie .HTML, a następnie za pomocą metod New i Save tworzymy i zapisujemy plik.
Po stworzeniu nowego pliku HTML tworzymy jego nagłówek. Nagłówek jest standardowy, występujący w każdym pliku HTML. Jeśli na początku pliku źródłowego znajdują się jakieś komentarze, możesz zmodyfikować makro, aby umieszczało ich treść jako część pliku HTML.
Po stworzeniu pliku HTML makro powraca do pliku kodu źródłowego. Przyglądając się działaniu makra, zauważysz, że dość często przełącza się ono pomiędzy obydwoma plikami. Przełączenie pliku osiągamy poprzez zmianę aktywnego stanu dokumentu, używając poniższego kodu:

Documents(CurrentSourceFileName).Active = True

CurrentSurfaceFileName jest pełną nazwą dokumentu, jaki ma stać się aktywny. Zamiast używania pełnej nazwy możesz użyć nazw pliku, lecz to może spowodować problem, gdy masz kilka plików o tej samej nazwie. Użycie pełnej nazwy, zawierającej ścieżkę dostępu, jest najlepszym rozwiązaniem.
Makro przechodzi do pierwszej linii pliku, wywołując metodę startof Document, a następnie szuka otwierającego nawiasu klamrowego funkcji. Ponieważ jest to pierwszy nawias otwierający, makro zapamiętuje jego numer linii. Ten numer linii będzie potrzebny w celu określenia momentu, kiedy makro powinno zakończyć działanie.
Metoda FindText nie umożliwia łatwego sprawdzenia, czy został osiągnięty koniec pliku. Metoda po prostu zaczyna poszukiwanie od bieżącej pozycji w pliku i jeśli nie znajdzie łańcucha, wraca na początek pliku i ponownie zaczyna poszukiwanie. Choć na pasku stanu Visual Studia pojawia się komunikat o osiągnięciu końca pliku, jednak w żaden sposób nie jest on przekazywany do makra. Do Ciebie należy znalezienie innego sposobu wykrycia faktu przejścia przez koniec pliku.
Po ustawieniu zmiennej LineNumber w celu zapamiętania położenia pierwszej funkcji, za pomocą metody LineUp makro cofa się o jedną linię, do deklaracji funkcji. Następnie za pomocą metody EndOfLine makro przechodzi do końca linii, zaznaczając ją. Opcja dsExtend informuje VBScript, że oprócz przesunięcia kursora chcemy również zaznaczyć tekst. Zaznaczony tekst jest zapisywany w zmiennej FunctionText:

ActiveDocument.Selection.LineUp ActiveDocument.Selection.EndOfLine dsExtend FunctionText = ActiveDocument.Selection.Text

Następnie makro przełącza się do pliku HTML, dzięki czemu może dopisać do niego deklarację i opis funkcji. Sam opis jest tworzony przez funkcję OutputDescription, przedstawioną na listingu 37.2. Poniższy kod pokazuje sposób wywołania tej funkcji:

Documents(CurrentHTMLFileName).Active = True ActiveDocument.Selection.NewLine OutputDescription FunctionText

Listing 37.2. Kod tworzący opis funkcji na podstawie jej nagłówka_
________________
Sub OutputDescription(ByVal Description) 'DESCRIPTION: Tworzymy opis w HTML przekazanej funkcji ' używając zmiennej Description. To makro jest oparte ' na makrze AddFunctionDescription w przykładowych ' makrach Microsoftu.
Header = StripTabs(Trim(Description))
'Pobieramy typ zwracany przez funkcję, if Header o "" then
Reti = InStr(Header, " ") Loc = InStr(Header, "(") if Reti < Loc Then
RetTp = Left(Header, Reti)
Header = Right(Header, Len(Header) - Reti) End If

'Pobieramy nazwę funkcji. Loc = InStr(Header, "(") - l Loc2 = InStr(Header, ")") if Loc > O And Loc2 > O then
'sprawdzamy, czy jest '(' i a ')'
fcName = Left(Header, Loc)
Header = Right(Header, Len(Header) - Len(fcName))

'Czy mamy typ przechowywania dla zwracanego typu?
Trim (fcName)
If InStr(fcName," ") <> O Then
retTp = retTp + Left(fcName,InStr (fcName," ")) fcName = Right(fcName, Len(fcName) _ - InStr(fcName," "))
End If

'Pobieramy parametry funkcji. iPrm = O iPrmA = O prms = Header

'Zliczamy ilość parametrów. Do While InStr(prms, ",") <> O
iPrm = iPrm + l
prms = Right(prms, Len(prms)-InStr(prms, ",))
Loop
'Umieszczamy listę parametrów w tablicy. If iPrm > O Then ' Jeśli kilka parametrów. iPrm = iPrm + 1 iPrmA = iPrm Redim ParamArr(iPrm) Do While InStr(header, ",")<> O
ParamArr(iPrm) = Left(Header, _
InStr (Header, ",") - 1) 'Usuwamy nawias z pierwszego parametru. If InStr(ParamArr(iPrm), " (")<> O Then ParamArr(iPrm) = Right(ParamArr(iPrm), Len(ParamArr(iPrm))- _
InStr(ParamArr(iPrm)," (") Trim(ParamArr(iPrm)) End If Header = Right(Header, Len(Header) - _
InStr(Header,",")) i Prm = i Prm - 1 Loop ParamArr(iPrm) = Header
'Usuwamy końcowy nawias z ostatniego parametru. If InStr(ParamArr(iPrm), ")") <> O Then
ParamArr(iPrm) = Left(ParamArr(iPrm), _ InStr(ParamArr(iPrm), ")") - 1) Trim(ParamArr(iPrm)) End If
Else 'Być może jeden tylko parametr. Redim ParamArr(1) ' Usuwamy pierwszy nawias. Header = Right(Header, Len(Header) - 1) Trim(Header)
ParamArr(1) = StripTabs(Header) If InStr(ParamArr(1), ")") <> l Then ParamArr(l) = Left(ParamArr{l), _
InStr(ParamArr(l), ")") - 1) Trim(ParamArr(l)) iPrmA = 1 End If End If

'Umieszczamy kursor jedną linię powyżej 'zaznaczonego tekstu. ActiveDocument.Selection.LineUp ActiveDocument.Selection.LineDown ActiveDocument.Selection.StartOfLine ActiveDocument.Selection = vbLf

Deser = "" iPrmA = iPrmA - 1
Loop
ActiveDocument.Selection = "
" + Description + _ "
Nazwa funkcji" + fcName + _
"Opis" + _ "Zwracany typ" + "" + RetTp + ""

'Drukujemy listę parametrów.
Last = iPrmA
Do While iPrmA <> O
'Usuwamy znaki końca linii z argumentów. If InStr(ParamArr(iPrmA), vbLf) <> O Then
ParamArr(iPrmA) = Right{ParamArr(iPrmA), _ (Len(ParamArr(iPrmA)) - _ InStr(ParamArr(iPrmA), vbLf))) Trim(ParamArr(iPrmA)) End If
ParamArr(iPrmA) = StripTabs(ParamArr(iPrmA)) 'Jeśli mamy ponad dwa parametry, pierwszy z nich ' będzie miał dołączony nawias, więc ' go tu usuwamy, if iPrmA = Last AND Last <> 1 then
ParamArr(iPrmA) = Right(ParamArr(iPrmA), _
Len(ParamArr(iPrmA)) -1) End I f Deser = Deser + "Argument" _
+ "
" + ParamArr(iPrmA) + "
" + vbLF + "Nazwa funkcj i rozpoczyna wiersz tabeli, zaś go kończy. Język HTML może być bardzo użyteczny, zwłaszcza do tworzenia dokumentacji projektu.
Pole Opis nie zawiera żadnej informacji. Podjęliśmy taką decyzję, gdy istnieje wiele różnych stylów komentowania funkcji i jeśli korzystasz z któregoś z takich standardowych stylów, możesz zmodyfikować makro, aby dodawało komentarz do tabeli, do pola opisu funkcji.
Jako ostatnie, do tabeli są dodawane parametry funkcji. Służy do tego pętla while przechodząca przez używane parametry i, za pomocą innych funkcji manipulowania łańcuchami, umieszczająca w tablicy odpowiednie informacje.
Po stworzeniu zmiennej Deser plik HTML jest przygotowywany do zapisu tabeli, przez rozpoczęcie tabeli HTML znacznikiem
" + Description + "" + vbLF & Deser & _ "" + vbLF Else
MsgBox("Istnieje możliwość, że funkcja z "+_ "którą pracujesz"+_
" zawiera błąd składni w deklaracji."; End if End If End Sub

Po stworzeniu opisu pierwszej funkcji makro powraca do pliku źródłowego i musi w jakiś sposób przejść do następnej funkcji. Ponieważ makro szuka klamrowego nawiasu otwierającego, zaś funkcja może zawierać w sobie wiele takich nawiasów, konieczny jest skok na koniec bieżącej funkcji. Uzyskujemy to, wracając do nawiasu otwierającego a następnie używając funkcji GoToMatchBrace w celu przejścia do odpowiedniego nawiasu zamykającego, wyznaczającego koniec funkcji.
Po zakończeniu analizy pierwszej funkcji, używając pętli while, przechodzimy przez pozostałą część kodu, odczytując kolejne funkcje w celu umieszczenia ich opisu w pliku HTML. Jako części testu sprawdzającego konieczność zakończenia działania makra porównujemy, czy bieżące położenie odpowiada położeniu pierwszej funkcji. Gdy makro osiągnie ponownie pierwszą funkcję, kończy działanie.
Funkcja OutputDescription zaczyna działanie od przejrzenia otrzymanego w zmiennej Description nagłówka funkcji. Celem jest pobranie nazwy funkcji zwracanego i typu oraz stworzenie oddzielnej listy parametrów. Służy do tego parę funkcji VBScriptu operujących na łańcuchach. Funkcja Trim usuwa spacje z początku i z końca łańcucha. Funkcja instr szuka wystąpienia określonego łańcucha wewnątrz innego łańcucha, zaś funkcja Left zwraca określoną ilość znaków przez nią licząc od lewej strony łańcucha.
Po pobraniu podstawowych informacji o dokumentowanej funkcji do przechowania parametrów wykorzystujemy tablicę. Zanim to jednak możemy zrobić, makro musi zliczyć ilość parametrów funkcji, licząc po prostu ilość przecinków w jej deklaracji:

Do While InStr(prms, ",") <> O
iPrm = iPrm +1
prms = Right(prms, Len(prms) - InStr(prms, ",")) Loop

W tym kodzie, iPrm zawiera ilość parametrów. Prms jest tymczasowym łańcuchem zawierającym wszystkie parametry. Po znalezieniu przecinka łańcuch jest skracany przez usunięcie odpowiedniego podłańcucha. Funkcja Right zwraca łańcuch o zadanej długości, położony z prawej strony oryginalnego łańcucha. Ilość znaków wyznaczamy przez odjęcie położenia przecinka od całkowitej długości łańcucha.
Po wyznaczeniu ilości łańcuchów (do przechowania parametrów), przygotowujemy tablicę w celu przechowania informacji o parametrach. Wymaga to korekty rozmiaru tablicy za pomocą instrukcji ReDim. Powoduje ona dostosowanie rozmiaru tablicy, tak aby pomieściła wystarczającą ilość elementów dla wszystkich parametrów.
Po umieszczeniu w zmiennych wszystkich informacji o funkcji nazwa funkcji oraz zwracany typ są umieszczane w łańcuchu zawierającym tablicę HTML z parametrami. Ten łańcuch zostanie zapisany do pliku HTML:

Deser = "
" + fcName + _ "Opis" + _ "Zwracany typ" + _ "" + RetTp + ""

Na wypadek gdybyś nie znał HTML-a, opiszemy znaczniki stosowane w tym języku. Wszystkie znaczniki mają początek i koniec. Na przykład,
oraz dodanie nagłówka tabeli stanowiącego pełną deklarację funkcji:

ActiveDocument.Selection = "
" + vbLF + _ "" + vbLF & Deser & "
" + Description + "

" + vbLF

Do działania funkcja wykorzystuje jeszcze jedną funkcję, stripTabs. Ta funkcja także jest zawarta w pliku przykładowych makr Visual Studia i ma następującą postać:

Function StripTabs (ByVal MyStr)
Do While InStr(MyStr, vbTab) <> O
MyStr = Right(MyStr, Len(MyStr)- InStr(MyStr, vbTab)
Loop StripTabs = Trim(MyStr)
End Function

Ta funkcja wykorzystuje funkcje manipulujące łańcuchami do usunięcia wszelkich znaków tabulacji z lewej strony przekazanego łańcucha. W funkcji jest wykorzystywana wbudowana stała vbTab reprezentująca znak tabulacji.
Podsumowanie
Jak widzisz, Visual Studio jest środowiskiem programowalnym. Makra mogą być używane do uproszczenia edycji oraz do automatyzowania często używanych poleceń. W tym celu możesz albo zarejestrować szybkie makro, albo stworzyć pliki makr z kolekcją przydatnych funkcji. Te makra możesz nawet udostępnić innym osobom, tak aby mogły łatwiej pracować ze swoimi projektami.
Ponieważ wybranym dla makr językiem jest VBScript, być może powinieneś go trochę poznać. Nie powinno to jednak sprawić Ci trudności, gdyż VBScript jest podobny do Basica, stosowanego powszechnie jako język makr Microsoftu oraz bardzo popularny język programowania Internetu.

Wyszukiwarka

Podobne podstrony:
Visual Studio 05 Programowanie z Windows API w jezyku C vs25pw
01 Wprowadzenie do Visual Studio cwiczenia przygotowujace
100 sposobow na Visual Studio0vis
MATLAB cw Skrypty
syst oper skrypty 2
Skrypt Latex
skrypt rozdz 2 4

więcej podobnych podstron