Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



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


1-18787
Dmitriy_R
2002-01-21 14:11
2002.02.07
Как проще сделать что-бы отображать число 1 в виде 01


1-18882
Gromozeka
2002-01-23 14:38
2002.02.07
Печать договора


3-18714
Pavel_s
2002-01-09 14:57
2002.02.07
DBGrid


3-18765
mursik
2002-01-12 21:42
2002.02.07
Индексы CDX




   Наверх