Главная страница

Леонтьев Б.К. Я изучаю Microsoft Office Visio 2003 (PDF). Удк 004. 738. 5 Ббк 32. 973. 26 018. 2


Скачать 0.88 Mb.
НазваниеУдк 004. 738. 5 Ббк 32. 973. 26 018. 2
АнкорЛеонтьев Б.К. Я изучаю Microsoft Office Visio 2003 (PDF).pdf
Дата25.04.2017
Размер0.88 Mb.
Формат файлаpdf
Имя файлаЛеонтьев Б.К. Я изучаю Microsoft Office Visio 2003 (PDF).pdf
ТипДокументы
#4822
КатегорияИнформатика. Вычислительная техника
страница26 из 35
1   ...   22   23   24   25   26   27   28   29   ...   35
Event interface, через который можно отслеживать его активность и выполнять определенные действия.
Предположим, что в Microsoft Office Visio 2003 вы создаете прило жение, предназначенное для использования в интрасети предприятия и хотите запретить пользователям просмотр внешних серверов Интернет.
«Прослушивая» события, происходящие в Internet Explorer, ваше прило жение определит момент запроса пользователем внешнего URL, а затем полностью отменит этот переход. Для реализации данного механизма вам потребуется знать, какой тип события запускает Internet Explorer 6.0,
как обеспечить прием и реализовать обработку событий в своем прило жении.
Что такое события? Для уведомления своих клиентов о каком то событии СОМ объект отправляет сообщение. Это сообщение так и на зывается — событие (event), а процесс передачи сообщения называется запуском события (event firing). Но если событие запущено, а его никто не ждет, то какой в нем смысл? Очевидно, что клиентское приложение,
управляющее СОМ объектом, должно «прислушиваться» к инициализи руемым событиям. Когда клиентское приложение «хочет» получать со бытия от СОМ объекта, оно сообщает об этом СОМ объекту.
СОМ объект сможет «разговаривать» со своим клиентом, если он поддерживает один или более исходящих интерфейсов (outgoing inter face). Такие интерфейсы реализуются клиентом, и каждый из них под ключается к СОМ объекту через отдельную точку подключения (connec tion point). Любая точка подключения представлена интерфейсом
IConnectionPoint. Часть клиента, обеспечивающая исходящие интер фейсы, известна как приемник событий (event sink); СОМ объект, кото рый поддерживает данные интерфейсы, называется подключаемым объ ектом (connect able object). Для того, чтобы быть подключаемым объектом и поддерживать точки подключения, объект должен реализо вывать интерфейс
IConnectionPointContainer, через который клиенты бу дут узнавать, какие исходящие интерфейсы поддерживает сервер.
Каждый подключаемый объект реализует этот интерфейс. Кли ент, желающий получать события, может узнать через
IConnection
PointContainer, какие точки подключения поддерживает подключаемый объект. Клиент способен получить указатель на
IConnectionPoint
Container, просто вызвав Querylnterface, используя указатель на другой интерфейс. Затем клиент применяет один из двух методов данного ин терфейса для получения указателя на точку подключения.
С помощью
EnumConnectionPoints он получает список указателей на все точки подключения, которые поддерживаются этим подключае мым объектом. Другой метод,
FindConnectionPoint, позволяет клиенту спрашивать у подключаемого объекта, поддерживает ли он тот или иной интерфейс. Клиент указывает идентификатор интерфейса (IID) той точ ки подключения, которая его интересует. В случае, если подключаемый объект поддерживает такой интерфейс, он вернет указатель на интер фейс
ICormectionPoint для соответствующей точки подключения.
Использование редактора Visual Basic
269 270
Использование редактора Visual Basic

Когда клиент выяснил, какие точки подключения поддерживает данный подключаемый объект, он устанавливает с ним соединение.
Клиент извещает подключаемый объект о том, какой приемник событий ему следует использовать для всех событий. Кроме того, благодаря этому соединению подключаемый объект узнает о том, что клиент «намерен»
прекратить прием событий от него. Клиент может подключиться к объ екту с помощью метода интерфейса
IConnectionPoint. Вам в основном предстоит работать с первыми двумя интерфейсами.
Соединение с определенной точкой подключения подключаемого объекта клиент устанавливает по методу
Advise. В сущности клиент «го ворит» объекту: «Вот приемник событий, который я реализовал для дан ной точки подключения. Пожалуйста, отправляй ему все события». Кли ент должен передать своему приемнику событий указатель на интерфейс
Unknown. Подключаемый объект использует этот указатель для запроса к клиенту об интерфейсе приемника событий, поддерживаемом данной точкой подключения. Кроме того, для получения событий приемник со бытий должен реализовывать
IDispatch или сам интерфейс приемника событий (в Internet Explorer 6.0 для приема событий вы, как правило, бу дете применять метод
IDispatch).
При каждом запуске события подключаемый объект вызывает
IDispatch::Invoke (если вы реализуете сам интерфейс приемника собы тий, подключаемый объект может напрямую вызывать методы приемни ка событий).
Этот метод возвращает «cookie», который должен быть использо ван при разрыве соединения. Когда клиент хочет разорвать связь с под ключаемым объектом, он вызывает метод
Unadvise и передает «cookie»,
который он получил при вызове
Advise.
Несколько слов о других методах.
GetConnection PointContainer
позволяет получить указатель на интерфейс
IConnectionPointContainer
для подключаемого объекта данной точки подключения.
GetConnec
tionlnterface возвращает IID исходящего интерфейса, управляемого кон кретной точкой подключения. Данный метод позволяет клиенту преоб разовывать указатель на интерфейс
IConnectionPoint в IID. Этот IID
определяет точный интерфейс, на который указывает интерфейс
IConnectionPoint.
Прием событий
Существует несколько способов приема событий — в зависимости от инструмента разработки, применяемого для создания приложения в
Microsoft Office Visio 2003.
Прием событий в Microsoft Office Visio 2003, созданном с помо щью Visual Basic, будет существенно отличаться от приема событий в приложении, написанном на C++ (и, естественно, будет осуществляться гораздо проще). Даже при использовании Active Template Library (ATL),
Microsoft Foundation Classes (MFC) или обычного C++ способы приема событий будут различны.
Прием событий в Microsoft Office Visio 2003
Убедитесь, что вы установили ссылку на
shdocvw.dll в своем проек те Microsoft Office Visio 2003. В случае, если вы не сделали этого, Visual
Basic не сможет довести такую ссылку до Internet Explorer. Далее, просто создайте экземпляр этого сервера, применяя зарезервированное слово
New или метод CreateObject.
Когда вы создаете экземпляр сервера, Visual Basic автоматически инициализирует приемник событий и управляет им — все очень просто.
Вам не придется беспокоиться о получении указателя на контейнер то чек подключения (connection point container), а затем — о поиске необхо димой точки подключения. Visual Basic сделает это за вас. Понятно, что введя код создания сервера, нужно вставить вызовы методов, которые будут обрабатывать запускаемые этим сервером события. Вы можете оп ределить, какие события поддерживаются объектом, заглянув в окно
Procedures/Events.
Каждый раз, когда Internet Explorer 6.0 запускает событие, в текс товое окно помещается описание этого события. Создать такой код не сложно. Сначала с использованием зарезервированного слова
WithEvents
задается величина переменной, представляющей экземпляр Internet
Explorer. Затем создаются функции обработчики событий (event handler function) для всех событий, которые вас интересуют. Этот пример под держивает только некоторое подмножество событий. Вы можете по сво ему усмотрению добавлять функции обработчики событий для любых других событий.
Глава 11.
«Профи»
Управление событиями в «комбобоксе»
Две проблемы могут приключиться, когда смущенный юзер пол зает по комбобоксу при помощи мышки вверх и вниз, а затем нажатием на
Enter делает свой юзерский выбор. Во первых, нажатие на серую стре лочку вызывает два события:
Change и Click. Во вторых, нажатие на Enter
Использование редактора Visual Basic
271 272
Использование редактора Visual Basic
перемещает фокус к следующему элементу формы, тогда как нажатие на кнопку мыши не вызывает подобного эффекта (то есть фокус остается на комбобоксе). Поэтому, если ваш код помещен в секцию события
Change,
то на стрелочки вверх/вниз (клавиатурой) вызовет это событие, чего вы,
естественно, не хотите. Напротив, если вы помещаете свой код только в секцию события
Lost Focus и юзер щелкает мышью на своем выборе, то фокус не уйдет из комбобокса, а юзер будет созерцать текст, который он выбрал своей мышью, и думать, почему это ничего не происходит. Ниже приведенное решение «фильтрует базар» событий
Click, генерирующих ся нажатиями на стрелочки клавиатуры, и вынуждает контрол потерять фокус.В секции
Declarations формы введите следующее:

В
VB надо поменять тип флага на integer.
Dim bNoise as Boolean

True означает, что происходит «шум», на который не следует реагировать.

Этот код введите в секции события
Form_Load:
bNoise = False

Этот код введите в событии
KeyDown комбобокса:
Private Sub cbTest_KeyDown(KeyCode As _ Integer,
Shift As Integer)

В случае, если юзер использует стрелки для езды по списку комбобокса — игнорировать события
Click
If KeyCode = vbKeyDown Or KeyCode _ = vbKeyUp
Then bNoise = True
End Sub

Этот код вводится в событие Click комбобокса:
Private Sub cbTest_Click()
If bNoise Then
Ignore Noise events
(up or down arrow)
bNoise = False
Else

Увести фокус с контрола
SendKeys "{TAB}", True
End If
End Sub
Теперь вам остается написать код, содержащий реакцию на выбор юзера, и занести его в секцию события
LostFocus комбика.
Комментирование и раскомментирование блоков кода
VB позволяет вам разом закомментировать целый блок кода, а за тем также быстро раскомментировать его. Это очень полезно при отлад ке, когда вам не нужно исполнять целый ряд операторов, и в то же время вы не можете их удалить вот так вот просто за здорово живешь. Между тем, пара кнопок
Comment/Uncomment присутствует только в меню Edit,
который надо специально вызывать. Для того, чтобы быстро вызвать ме ню
Edit, кликните правой кнопкой мыши на любом меню в VB, и выбе рите затем команду
Edit.
Значения по умолчанию для необязательных параметров
В случае, если вы когда либо программили на VB4, то вы возмож но пользовались мощным инструментом под названием
Необязательные
параметры (Optional parameters).
VB 6.3 пошел еще дальше: теперь эти параметры могут быть любо го типа (не только
Variants), и могут появляться в процедурах Property.
Вы можете теперь задавать для них значение по умолчанию.
Property Get Value _
(Optional index As Long = 1)
End Property
Вы можете теперь делать это без бывшего ранее обязательным (и очень медленным) тестом
IsMissing:
Property Get Value _
(Optional index As Long)
If IsMissing(index) Then index = 1
End Property
Центрирование формы на экране
Все знают о коде, позволяющем вам центрировать форму на экра не вне зависимости от графического разрешения. Теперь вы можете до стичь того же результата, всего лишь присвоив значение
vbStartUpScreen
(=2) новому свойству StartUpPosition формы. Вы даже можете отцентри ровать форму относительно ее родительского окна, присвоив значение
vbStartUpOwner (=1). Присвоение можно сделать в окне Property соответ ствующей формы. Когда вы центрируете форму внутри родительского окна, не забудьте добавить второй аргумент в методе
Show.
Form2.Show vbModal, Me
Использование редактора Visual Basic
273 274
Использование редактора Visual Basic

Не все шаблоны созданы одинаково
В отличие от других продуктов Office 2003, шаблоны Word 2003 со держат
business application engine, который хранится отдельно от доку ментов, использующих этот
engine. Основанные на шаблонах книги
Excel и презентации PowerPoint хранят в себе шаблоны, на основе кото рых они созданы.
На практике, все документы Word состоят из 2 х VBA проектов:
первый проект создан на базе основного (оригинального, хранящегося в
Word) шаблона (все документы Word основаны на шаблонах), а второй проект принадлежит самому документу Word. С другой стороны, книги
Excel и презентации PowerPoint, созданные на шаблонах, содержат толь ко один VBA проект. Каждый файл содержит свою собственную копию проекта оригинального шаблона. Изменения, производимые в этом шаблоне, не затрагивают основной шаблон, хранящийся в приложении.
Настройка меню в VB
Вот несколько предложений по настройке
IDE в Visual Basic 6.3.
Добавить закладки в панель инструментов можно, кликнув правой кнопкой мыши на кнопке
General и выбрав Add Tab.
Вы можете также перемещать и удалять закладки, и перемещать иконы контролов с одной закладки на другую, используя обычный метод drag and drop.
Вытащить кнопку любого пункта меню на тулбар можно, кликнув правой кнопкой на любом тулбаре и выбрав пункт
Customize. Перейдите на закладку
Commands, выберите нужный пункт меню в правом окошке и перетащите его на тулбар. Первыми кандидатами на добавление являют ся пункты
Project References, Project Properties и Tools Add Procedure.
Как создать совершенно новый тулбар на вкладке
Toolbars диало гового окна
Customize. После того, как вы определили содержимое буду щего тулбара, для добавления кнопок на этот тулбар используйте опи санную абзацем выше процедуру. Когда у вас на экране активизировано диалоговое окно
Customize, кликните правой кнопкой на любой кнопке тулбара и вы сможете поменять рисунок кнопки, создать разделитель,
спрятать/показать текст и т.д.
Как спрятать все окошки проекта
Когда вы работаете с несколькими проектами сразу, можно запу таться в нагромождении окошек из разных проектов. Однако, вы можете временно спрятать все окошки, относящиеся к данному проекту, щелк нув по пиктограмме проекта в окошке
Project Explorer так, чтобы все вет ви, торчащие из него, исчезли. Тогда же свернутся и все окна, относящи еся к данному проекту. Эту возможность можно отменить, щелкнув на соответствующем квадратике на закладке
General в меню Tools Options.
Использование OBJECT BROWSER для нахождения недокументированных возможностей
В случае, если кликнуть правой кнопкой мыши в правом окошке
Object Browser'а (там, где нарисованы члены классов), то выскочит кон текстное меню с командой
Show Hidden Members. В случае, если щелк нуть на этой команде, то отныне Object Browser будет показывать все hid den свойства и методы (а также и классы) любой библиотеки, и вы можете использовать это для более детального исследования библиотек объектов.
Например, в библиотеке VBA есть hidden класс под названием
_HiddenModule, в который входят многие известные функции VBA
плюс три недокументированные:
ObjPtr, StrPtr и VarPtr. ObjPtr возвра щает адрес
private area экземпляра объекта, StrPtr возвращает адрес первого символа в строке,
VarPtr возвращает адрес переменной или де скриптора строки (
string descriptor, если имеем случай переменной типа
string).
Адрес переменной
В Visual Basic 6.3 есть встроенная функция
VarPtr.
Runtime library в VB4 включает эту функцию, но перед использова нием ее нужно сначала объявить:
#If Win16 Then
Declare Function VarPtr Lib "VB40016.DLL"
(variable As Any) As Long
#Else
Declare Function VarPtr Lib "VB40032.DLL"
(variable As Any) As Long
#End If
Эта функция полезна при передаче пользовательских типов (
Type
structure) во внешнюю процедуру API, и в этом типе какое либо из полей является адресом другой переменной или записи.
Когда BENCHMARK (измерения скорости работы программы) длятся сутками
Обычно, программисты на Visual Basic 6.3 измеряют скорость вы полнения кода при помощи
Timer функции. Однако, если ваша про грамма должна завершиться на следующий день, то вы должны учесть,
что значение, возвращаемое функцией
Timer, ресетится в полночь. В слу
Использование редактора Visual Basic
275 276
Использование редактора Visual Basic
чае, если же вас устроит значение с точностью до одной секунды, вы мо жете упростить ваш код с помощью функции
Now.
Dim startTime As Date
StartTime = Now
' the code to be benchmarked
' ...
Print "elapsedSeconds = " & Format$
((Now — startTime) * 86400, "#####")
Вам понадобится функция
Format$ для округления результата до целого.
APP.PATH может возвращать UNC пути
Visual Basic 6.3 может возвращать UNC путь, типа
\\server\pro
grams\..., в зависимости от обстоятельств, от того как запущена програм ма и запущена она из Visual Basic 6.3 IDE или скомпилирована в EXE
файл. Эта особенность может сильно испортить вам жизнь, если вы используете
App.Path для установки текущего каталога при старте про граммы.
ChDrive App.Path
ChDir App.Path
Поскольку
ChDrive на умеет обрабатывать UNC пути, этот код может вызвать фатальную ошибку времени выполнения, но может быть защищен использованием
On Error Resume Next. Однако это не защитит вас от всех невзгод, могущих произойти. Наилучшее решение состоит в том, чтобы предоставить юзеру самому ввести каталог во время исполне ния программы, затем записать полученный путь в регистр или INI
файл.
«Ускорьте» ваш код использованием CHOOSE
Вы можете использовать
Choose там, где можно заменить массив или построить таблицы результатов, на стадии компиляции (
compile
time), вместо того, чтобы делать это на стадии выполнения (run time). На пример, если вам надо знать значения факториалов чисел от 1 до 10, по пробуйте следующий пример (
Choose производит выбор факториала из набора имеющихся значений вместо того, чтобы высчитывать фактори ал каждый раз заново):
Function Factorial(number As Integer) _
As Long
Factorial = Choose(number, 1, 2, 6, _
24, 120, 720, 5040, 40320, _
362880, 3628800)
End Function
«ARRAY» — отныне это ошибочное имя для переменных
В случае, если вы часто используете имя
1   ...   22   23   24   25   26   27   28   29   ...   35


написать администратору сайта