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


Получение информации


Outlook сохраняет разнотипную информацию в различных файлах. Информация о контактах хранится в файле Contacts (Контакты), входящие сообщения хранятся в папке InBox и т.д. Большинство пользователей, однако, изменяет структуру папок, предлагаемьи Outlook, добавляя дополнительные подпапки к заданным по умолчанию. Например, чтобы упорядочить информацию о контактах, можно создать подпапки Business и Personal в папке Contacts (Контакты). Аналогично, в папке InBox можно создать папки Business, Personal и Junk.

Типичной задачей, которую требуется решать, является поиск желаемой инфор­мации. В последующих примерах будет рассматриваться способ доступа к контактам и входящим сообщениям в папках Contacts и InBox, соответственно.

VB6 в действии: проект Contacts (Контакты)

В качестве первого примера того, как, используя средства OLE, можно работать с Outlook, будет рассмотрено приложение Contact, форма которого приведена на рис. 14.20. В этом приложении подразумевается, что все объекты, относящиеся к контактам, хранятся в папке Contacts. Если контакты пользователя организованы по-другому, например, в отдельных подпапках в папке Contacts, следует скопировать (на время) несколько соответствующих файлов в эту папку, чтобы можно было проверить приложение. Чуть позже, в параграфе "Рекурсивный просмотр папки Contacts" будет рассмотрена рекурсивная процедура просмотра всей папки Contacts (включая подпапки).

Главная форма проекта Contacts содержит два списка. Первый список заполнен названиями компаний, которые считываются из соответствующих полей каждого контакта. В этом списке названия компаний не дублируются, несмотря на то, что типичная папка Contacts может содержать несколько контактов из одной и той же компании. Чтобы просмотреть список контактов, принадлежащих одной компании, необходимо щелкнуть на ее названии. Соответствующие контакты появятся в поле списка Contacts. Теперь при каждом щелчке на имени контакта в нижней части окна формы будет отображаться подробная информация о контакте.


Программа начинает свою работу с обращения к Outlook ( после щелчка на кнопке Start Outlook). Ниже приведен код обработчика нажатия соответствующей кнопки.



Рис. 14.20. В проекте Contacts выполняется поиск информации о контактах объекта в папке Contacts в Outlook

Программа 14.18. Обращение к Outlook

Private Sub Commandl_Click ()

On Error GoTo OutlookNotStarted

Set OLApp - CreateOb^ect ("Outlook Application")



On Error GoTo NoMAPINameSpace

Set mNameSpace - OLApp GetNamespace ("MAPI")

List1.Clear

List2.Clear

Command2.Enabled = True

Exit Sub

OutlookNotStarted:

MsgBox "Could not start Outlook"

' (Невозможно запустить Outlook)

Exit Sub

NoMAPINameSpace:

MsgBox "Could not get MAPI NameSpace"

' (Невозможно получить место нахождения MAPI)

Exit Sub

End Sub

Если обращение к Outlook было успешным, кнопка View Contact становится доступной. Если щелкнуть на этой кнопке, программа создаст семейство, содер­жащее все объекты, находящиеся в папке Contacts, и отсортирует семейство allContacts согласно названиям компаний. Повторяющиеся названия будут удалены из списка (это обеспечивается оператором If, находящимся в конце подпрограммы). Текст программы обработчика кнопки View Contact приведен ниже.

Программа 14.19. Загрузка списка контактов

Private Sub Command2_Click()

Set allContacts = _

mNameSpace.GetDefaultFolder(olFolderContacts).Items

all Contacts.Sort = "CompanyName"

On Error Resume Next

For Each mContact In allContacts

If Trim(mContact.CompanyName) <> "" Then _

List1.Addltem mContact.CompanyName

If List1.List(List1.Newlndex) =

List1.List(List1.Newlndex - 1) Then

List1.Removeltem List1.Newlndex

Next

End Sub

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

Программа 14.20. Получение списка контактов в выбранной  компании

Private Sub Listl_Click()

Dim CompanyName As String

Dim filterString As String



If List1.Listlndex = -1 Then Exit Sub

CompanyName = Listi.Text

filterString = "[CompanyName] = " " " & CompanyName & " " " "

Set thiscontact =

allContacts.Find(filterString)

If IsNull(thiscontact) Then

MsgBox "Fatal error in locating a contact.Program will exit"

' ( Фатальная ошибка при поиске контакта. Работа

' программы будет завершена)

End

End If

List2.Clear

While Not thiscontact Is Nothing

If Trim(thiscontact.FullName) <> " " Then _

List2.Addltem thiscontact.FullName

Set thiscontact = allContacts.FindNext

Wend

End Sub

Для вывода дополнительной информации о контакте потребуется еще одна программа, которая должна быть включена в обработчик события Click элемента управления List.

Программа 14.21. Вывод информации о контакте

Private Sub List2_Click()

Dim ContactName As String

Dim filterString As String

If List2.ListIndex = -1 Then Exit Sub

ContactName = List2.Text

filterString= "[FullName]= " " " & ContactName & " " " "

Set thiscontact = allContacts.Find(filterString)

If IsNull(thiscontact) Then

MsgBox "Fatal error in locating a contact. Program will exit"

 ' Фатальная ошибка при поиске контакта. Работа

 ' программы будет завершена)

End

End If

IblName.Caption = "" & thiscontact.Full Name

IblPhone.Caption = "" & thiscontact.BusinessTelephoneNumber

IblFAX.Caption = "" & thiscontact.BusinessFaxNumber

IblEMall.Caption = "" & thiscontact.EmaillAddress

End Sub

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

В проекте Messages демонстрируются приемы получения почтовых сообщений. Сообщения могут храниться в папках InBox и OutBox, а также в любых подпапках, созданных в этих папках. Программа Messages может получать сообщения только из папки InBox. Если в этой папке нет никаких сообщений, следует скопировать (на время) туда несколько входящих сообщений, чтобы проверить приложение. Чуть дальше в этой же главе будет рассмотрена процедура просмотра сообщений в папке InBox (включая вложенные подпапки) на любую глубину. Уместно напомнить, что это будет делать рекурсивная процедура.



Приложение Messages (рис. 14.21) позволяет выбирать сообщения, основываясь на информации об их отправителе или дате отправления. Критерии поиска задаются пользователем путем ввода соответствующих значений в окна, расположенные в правом верхнем углу формы. После ввода следует щелкнуть на кнопке Show Selected Messages (Показать выбранные сообщения), чтобы отобразить сообщения, отвечающие заданным критериям. Программа будет выводить только имя отправи­теля сообщения и тему. Затем, каждый раз, когда пользователь будет выбирать одно из сообщений в этом списке, щелкая на нем, подробная информация о нем будет отображаться в окнах соответствующих элементов управления в нижней части формы (включая текст сообщения). Если сообщение, содержит присоединенные файлы, их имена отображаются в окне сообщения. Запустите этот проект и поэкспериментируйте с ним. Впрочем, имеются две проблемы, о которых следует знать. Во-первых, приложение Messages может просматривать только сообщения в папке InBox. Если сообщения находятся в подпапках папки InBox, следует переместить (на время) несколько сообщений в папку InBox. Вторая проблема заключается в том, что имена отправителя читаются из папки Contacts. Если имена в папке Contacts не соответствуют именам, которые появляются в сообщениях, то нельзя будет увидеть сообщения, посланные выбранным контактом.



Рис. 14.21. В проекте Messages демонстрируется возможность чтения входящих сообщении Outlook из VB-приложений


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