Visual Basic 6. Руководство разработчика


Исходный текст приложения


Messages

В обработчике события Load (Загрузка) формы создаются две объектные пере менные — OLApp, которая указывает на приложение Outlook, и mNameSpace,

которая указывает на папки Outlook. Эти переменные объявлены в разделе декларации формы:

Dim OLApp As Application

Dim mNameSpace As NameSpace

Затем в программе объявляется переменная AllContacts, которая указывает на элементы (объекты) в папке Contacts.

Dim AllContacts As Items

Программа просматривает все объекты в семействе AllContacts и добавляет имена контактов (свойство FullName) в окно элемента управления Combo 1. Значение свойства Sorted элемента управления Combol устанавливается равным True, и программа удаляет любые повторяющиеся элементы (которые могут появиться в последовательных позициях списка). Ниже приведена программа, которая обраща­ется к Outlook и устанавливает значение объектной переменной AllContacts.

Программа 14.22.

Инициализация проекта Messages

Private Sub Form_Load()

On Error GoTo OutlookNotStarted

Set OLApp - CreateObject ("Outlook Application")



On Error GoTo NoMAPINameSpace

Set mNameSpace = OLApp.GetNamespace("MAPI")

Set AllMessages = _

mNameSpace.GetDefaultFolder(olFolderInbox).Items

Set AllContacts = _

mNameSpace.GetDefaultFolder(olFolderContacts).Items

Combo1.Clear

For Each mcontact In AllContacts

Combo1.Addltem mcontact.FullName

If Combo1.List(Combo1.NewIndex)= _

Combo1.List(Combo1.NewIndex + 1) Then _

Combo1.RemoveItern Combo1.NewIndex

Next

Combo1.ListIndex = 0

Exit Sub

OutlookNotStarted:

MsgBox "Could not start Outlook"

' (He удалось запустить Outlook)

Exit Sub

NoMAPINameSpace:

MsgBox "Could not get MAPI NameSpace"

' (He удалось получить место расположения MAPI)

Exit Sub

End Sub

Фильтрация сообщений

Пользователь может выбирать имя и (или) диапазон дат для сужения области поиска. Если флажки "From this Sender (От данного отправителя)" и "Between this dates (Между этими датами)" сброшены, то щелчок на кнопке Show Selected Messages приведет к выводу в окно элемента управления List Box информации обо всех сообщениях, находящихся в папке InBox. Если установить один или оба флажка, то программа выведет информацию только о тех сообщениях, которые соответствуют указанным критериям.


Чтобы отфильтровать сообщения, следует воспользоваться методами Find и FindNext объектной переменной AllMessages. Переменная AllMessages объявлена как переменная типа Item. Объект Item поддерживает эти два метода для получения выбранных сообщений. Синтаксис метода Find имеет вид:

Items.Find(filterstring)

где filterstring — это выражение, которое задает критерий фильтрации. Метод Find возвращает объект, тип которого зависит от типа семейства Items. Если метод Find применяется к папке InBox, то будет возвращен объект Mailltem, если же этот метод применяется к папке Contacts, то будет возвращен объект Contactltem. После того как найден первый соответствующий критерию объект, оставшиеся могут быть получены вызовом метода FindNext, причем, без указания параметров.

Параметр filterstring — это строковое выражение, в котором объединены имена полей, логические операции и константы. Чтобы получить информацию о сооб­щениях, отправленных из Site Builder Network, необходимо набрать следующую строку:

"[SenderName] = "Site Builder Network"

Чтобы получить список всех сообщений, отправленных в октябре 1998 года, следует набрать следующую строку:

"[SentOn] >= ""10/01/98"" And [SentOn] <=""10/31/98""

(Последовательно набранные двойные кавычки указывают на внедренные двойные кавычки, которые вставлены в строку с помощью выражения Chr(34).)

Количество объединяемых критериев поиска зависит только от запросов поль­зователя. Имена полей для каждого типа объекта могут быть найдены в Object Browser. Выбрав желаемый объект (например, Mailltem или Contactltem), можно просмотреть список его свойств на Панели Members.

В проекте Messages при построении строки-фильтра используются значения различных элементов управления формы. Сначала проверяются значения введенных дат, а затем формируется строка фильтра:

If chkCompany.Value And Combo1.ListIndex >= 0

Then ContactName = Combo1.Text

filterString = "[SenderName] = """ & ContactName S """"



End If

If chkDate.Value Then

If filterString = "" Then

filterString = "[SentOn] >"""&_

DateFrom.Text & """ And [SentOn] <"""&_

DateTo.Text & """"

Else

filterString = filterString & " and _

[SentOn] > """ & DateFrom.Text & """ _

And [SentOn] < """ & DateTo.Text & """"

End If

End If

If filterString = "" Then

filterString = "[SentOn] > ""01/01/1980"""

End If

Обратите внимание на обилие кавычек в выражениях. Два символа двойных кавычек необходимы для вставки символа кавычки в строку. Если значение пере­менной ContactName равно "Sybex" то выражение:

"[SenderName] = """ & ContactName & """"

приведет к появлению следующей строки:

[SenderName] = "Sybex"

Переменная

filterstring

формируется медленно, в соответствии со значениями, введенными пользователем в окне формы. Если пользователь определяет имя, то оно присваивается свойству SenderName. Если пользователь определяет даты, то они присваиваются соответственно свойству SentOn.

Затем переменная filterstring

передается методу Find объекта AllMessages. Программа просматривает в цикле отфильтрованные сообщения, вызывая метод FindNext. После каждой итерации в окне элемента управления ListBox отображается отправитель очередного сообщения и тема. В это же самое время выбранные сообщения присоединяются к семейству Selectee/Messages:

Set thismessage = AllMessages.Find(filterString)

If thismessage Is Nothing Then

MsgBox "No messages sent in the specified interval"

' (В указанном интервале сообщений не было)

Else

List1.Clear

While Not thismessage Is Nothing

List1.AddItem thismessage.SenderName & _

Chr(9) & thismessage.Subject

SelectedMessages.Add thismessage

Set thismessage = AllMessages.FindNext



Wend

End If

Остальная часть программы проста. Если выполнить щелчок на объекте, нахо­дящемся в окне элемента управления ListBox, программа повторно вызывает из семейства SelectedMessages выбранный объект и отображает его основные поля в окне соответствующего элемента управления Label в нижней части экрана и, собственно, текст сообщения - в окне элемента управления TextBox (при этом его свойству Locked должно быть присвоено значение True, чтобы предотвратить редактирование сообщения). Ниже приведен текст программы обработчика собы­тия Click элемента управления ListBox.

Программа 14.23. Просмотр объекта

Message

Private Sub List1_Click()

Dim thismessage As Object

Dim MessageAttachments As Attachments

selectedEntry = Listl.Listlndex + 1

If selectedEntry < 1 Then Exit Sub

Set thismessage = SelectedMessages.Item(selectedEntry)

lblSender.Caption = " " & thismessage.SenderName

lblSent.Caption = " " & thismessage.SentOn

lblRecvd.Caption = " " & thismessage.ReceivedTime

txtBody.Text = " " & thismessage.Body

Set MessageAttachments = thismessage.Attachments

If MessageAttachments.Count = 0 Then

Command4.Enabled = False

Else

Command4.Enabled = True

End If

End Sub

Откройте проект Messages в Visual Basic, чтобы исследовать текст программы и ознакомиться с тем, как программа объединяет объекты папки Contacts и исполь­зует их для получения информации о E-mail-объектах из папки InBox. Теперь можно изменять программу с целью добавления большего количества критериев выбора или обеспечения возможности работы с различными папками (например, папкой OutBox или подпапками в папке InBox).

Предупреждение

В проекте Messages для отображения имен возможных отправителей почтового сооб­щения используется свойство контактов FullName. Если имена, использованные в папке Contacts, не соответствуют именам отправителей во входящих сообщениях, то программа не будет выбирать все сообщения, которые ожидались. Имеется много методов установления соответствия контактов и сообщений, но они требуют дополнительных затрат. Например, можно использовать адрес электронной почты каждого контакта, поскольку это общий признак, имеющийся у документа, находящегося как в папке Contacts, так и папке InBox. Но контакт может иметь несколько адресов электронной почты, поэтому следует удостовериться, что поиск выполняется по всем адресам электронной почты выбранного контакта.



VB6 в действии: проект AutoMssg

Приложение AutoMssg демонстрирует процесс создания сообщения электронной почты с помощью VB-приложения и рассылки его с помощью Outlook. Кроме того, в нем демонстрируется альтернативный способ получения информации о контактах и организации хранения этой информации. Сначала приложение оты­скивает только названия компаний и отображает их в списке Companies. Пользователь может выбрать компанию и просмотреть ее контакты, используя список Contacts. Чтобы добавить новые имена в список получателей, пользователь должен выполнить двойной щелчок в окне списка Contacts. Список получателей отсортирован, но допускает повторяющиеся пункты. Это связано с тем, что человека с фамилией, например, Смит, можно обнаружить почти в каждой второй компании, поэтому удаление повторяющихся элементов на основании информации о фамилиях полу­чателей — не самая удачная идея Вывод дополнительной информации, делающей каждый пункт списка уникальным, привел бы к загромождению экрана. Поэтому в данном проекте используется сортируемый элемент управления ListBox, в котором содержатся повторяющиеся имена, а пользователю предоставлена возможность выбора.

Программа проекта AutoMssg достаточно проста и здесь не приводится. Можно открыть проект в Visual Basic и ознакомиться с тем, как выполняется обработка сообщения.


Содержание раздела