Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.07;
Скачать: CL | DM;

Вниз

Кто-нибудь занимался интерфейсами на Дельфи?   Найти похожие ветки 

 
star ©   (2002-01-21 12:28) [26]

Вот пример из MSDN на С++, как получить IHTMLDocument2 из окна класса Internet Explorer_Server (в окно такого класса вводится текст письма в Outlook Express, такое окно создается так же IE). Я попытался переделать его на Дельфи - костьми лег, ничего не получается. В дельфи есть и IHTMLDocument2, и IHtmlWindow2 и прочее. Борланды позаботились, но как я не бился - ничего не получается. До сих пор я считал, что Дельфи ничуть не хуже С++ (а в некоторых случаях даже лучше). Теперь сомнения берут ... Может, конечно, просто знаний нехватает...
Может здесь есть знатоки обоих языков, помогут перевести?
(Просто разработана здоровенныя программа, одной из функций которой будет вытаскивание хтмл-а из IE-серверов. Она написана на дельфи, и я не в состоянии перевести ее всю на С++)

#include <mshtml.h>
#include <atlbase.h>
#include <oleacc.h>

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
TCHAR buf[100];

::GetClassName( hwnd, (LPTSTR)&buf, 100 );
if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 )
{
*(HWND*)lParam = hwnd;
return FALSE;
}
else
return TRUE;
};

//You can store the interface pointer in a member variable
//for easier access
void CDlg::OnGetDocInterface(HWND hWnd)
{
CoInitialize( NULL );

// Explicitly load MSAA so we know if it"s installed
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
if ( hInst != NULL )
{
if ( hWnd != NULL )
{
HWND hWndChild=NULL;
// Get 1st document window
::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)
&hWndChild );

if ( hWndChild )
{
CComPtr<IHTMLDocument2> spDoc;
LRESULT lRes;

UINT nMsg = ::RegisterWindowMessage(
_T("WM_HTML_GETOBJECT") );

::SendMessageTimeout( hWndChild, nMsg, 0L, 0L,
SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

LPFNOBJECTFROMLRESULT pfObjectFromLresult =
(LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst,
_T("ObjectFromLresult") );

if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr = (*pfObjectFromLresult)( lRes,
IID_IHTMLDocument, 0, (void**)&spDoc );

if ( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
spDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &spDoc.p );
// Change background color to red
spDoc->put_bgColor( CComVariant("red") );
}
}
} // else document not ready
} // else Internet Explorer is not running
::FreeLibrary( hInst );
} // else Active Accessibility is not installed
CoUninitialize();
}



Страницы: 1 вся ветка

Текущий архив: 2002.02.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
1-18789
Виктор
2002-01-24 02:13
2002.02.07
Есть ли секреты у Hint


1-18874
Satrap
2002-01-23 09:54
2002.02.07
Наивный вопрос о св-ве Tag


3-18731
der
2002-01-10 09:42
2002.02.07
Периодически возникает ошибка. Insufficient memory for this operation.


1-18843
tvictor
2002-01-22 12:13
2002.02.07
Как сделать 2х-строчный hint?


1-18895
Leshiy2
2002-01-22 16:04
2002.02.07
Можно ли стандартными средствами сделать форму прозрачной?