| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Эксперты VB, VBA, VBS и т.д. вопрос по формам Outlook
Есть некая форма Outlook-а (template - oft). Каким образом можно добраться до какого нибудь поля в этой форме и изменить в нем значение.
__________________
Best Regards |
|
|
|
|
# 2 |
|
Junior Member
Регистрация: 07.06.2004
Сообщения: 103
![]() ![]() |
Попробуй набрать в поисковике "объектная модель Outlook". Скорее всего ты получишь список объектов аутлука с их методами и свойствами(в терминах объектно-ориентированного программирования ). Сам я ни разу с аутлуком не работал поэтому не хочу придумывать.
|
|
|
|
|
# 3 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Смотрел. В том то и дело что неработает.
Код такой: Код:
{
HRESULT hr;
IUnknownPtr spUnk;
CLSID clsid;
CLSIDFromProgID(L"Outlook.Application", &clsid);
hr = GetActiveObject(clsid, NULL, (IUnknown**)&spUnk); //OK
IDispatchPtr spDisp;
hr = spUnk->QueryInterface(IID_IDispatch, (void **)&spDisp); //OK
if(FAILED(hr))
return ;
_ApplicationPtr spApp;
hr = spDisp->QueryInterface(&spApp);//OK
if(hr==S_OK)
{
IDispatchPtr spPtr = spApp->ActiveInspector()->GetCurrentItem();
_DMailItemPtr spDMailItem;
PagesPtr spPages;
FMPagesPtr spFmp;
hr = spPtr->QueryInterface(&spDMailItem); //OK
_bstr_t bstr = spDMailItem->GetBody(); //OK
bstr = spDMailItem->GetTo(); //OK
spPtr = spApp->ActiveInspector()->GetModifiedFormPages();
hr = spPtr->QueryInterface(&spPages); //OK
IPagePtr spPage;
long count = spPages->GetCount(); //OK
_variant_t var;
var.vt = VT_I2;
var.iVal = 1;
spPtr = spPages->Item(var); //OK
hr = spPtr->QueryInterface(&spPage); //E_NOINTERFACE
}
__________________
Best Regards |
|
|
|
|
# 4 |
|
Junior Member
Регистрация: 21.03.2004
Адрес: BC
Сообщения: 157
![]() ![]() ![]() ![]() |
Какой интересный VB, VBA у тебя
![]() Если у тебя есть корректный референс на этот объект - template, то ничто не должно тебе помешать просто присваивать значения свойствам этого объекта (если только не read only) или, скажем, элементам коллекций. Что нибудь в таком стиле: MyForm As New <reference to template object> MyForm.Sender="Vasya Pupkin" MyForm.Fields("Sender")="Vasya Pupkin" |
|
|
|
|
# 5 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Не, я не создаю объект. Я пытаюсь изменить свойства уже запущенного.
Не могу получить указатель на форму(Page) хотя имею указатель на коллекцию Pages Код:
spPtr = spPages->Item(var); //OK
hr = spPtr->QueryInterface(&spPage); //E_NOINTERFACE
Буду благодорен за работющий пример на любом языке. Если бы не оганичения : Office 97 и Win NT , все можно было-бы сделать достаточно просто через IAccessible ,который позволяет до любого объекта добраться
__________________
Best Regards |
|
|
|
|
# 6 |
|
Junior Member
Регистрация: 21.03.2004
Адрес: BC
Сообщения: 157
![]() ![]() ![]() ![]() |
Поройся в этом ресурсе, может быть поможет
http://www.outlookcode.com/threads.a...messageid=7530 ну и здесь, конечно, http://msdn.microsoft.com/library/de..._C11612730.asp Последний раз редактировалось BC Scout; 08.10.2004 в 00:24. |
|
|