IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Эксперты VB, VBA, VBS и т.д. вопрос по формам Outlook (https://www.imho.ws/showthread.php?t=70286)

alexey_ma 06.10.2004 13:57

Эксперты VB, VBA, VBS и т.д. вопрос по формам Outlook
 
Есть некая форма Outlook-а (template - oft). Каким образом можно добраться до какого нибудь поля в этой форме и изменить в нем значение.

msustudent 06.10.2004 14:27

Попробуй набрать в поисковике "объектная модель Outlook". Скорее всего ты получишь список объектов аутлука с их методами и свойствами(в терминах объектно-ориентированного программирования ). Сам я ни разу с аутлуком не работал поэтому не хочу придумывать.

alexey_ma 06.10.2004 14:38

Смотрел. В том то и дело что неработает.
Код такой:
Код:

{
    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
       
}


BC Scout 07.10.2004 00:54

Какой интересный VB, VBA у тебя :confused:

Если у тебя есть корректный референс на этот объект - template, то ничто не должно тебе помешать просто присваивать значения свойствам этого объекта (если только не read only) или, скажем, элементам коллекций.

Что нибудь в таком стиле:

MyForm As New <reference to template object>

MyForm.Sender="Vasya Pupkin"
MyForm.Fields("Sender")="Vasya Pupkin"

alexey_ma 07.10.2004 09:55

Не, я не создаю объект. Я пытаюсь изменить свойства уже запущенного.
Не могу получить указатель на форму(Page) хотя имею указатель на коллекцию Pages
Код:

        spPtr = spPages->Item(var); //OK
        hr = spPtr->QueryInterface(&spPage); //E_NOINTERFACE

А про VB написал потому что такие вещи обычно делаются наVB, VBA.
Буду благодорен за работющий пример на любом языке.

Если бы не оганичения : Office 97 и Win NT , все можно было-бы сделать достаточно просто через IAccessible ,который позволяет до любого объекта добраться

BC Scout 08.10.2004 00:19

Поройся в этом ресурсе, может быть поможет
http://www.outlookcode.com/threads.a...messageid=7530

ну и здесь, конечно,
http://msdn.microsoft.com/library/de..._C11612730.asp

alexey_ma 10.10.2004 18:09

Спасибо.
Первый ресурс очень интерсный. Может чего нибудь найду.
А у MS смотрел. То что я делаю соответствует примерам(конечно в переводе с VB на VC), да только к сожалению не работает.


Часовой пояс GMT +4, время: 16:10.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.