|
자꾸 귀찮게 해서 죄송합니다.
"mshtml_tlb.h" 파일과 "wbProxy.h" 이 없구요. TRobot 클래스 본체가 없어서 다시 문의 드립니다.
유영인 [Chris] 님이 쓰신 글 :
: #pragma link "SHDocVw_OCX" 를 #include 위에 쓰시면 됩니다.
:
: 성공 하시길.. ^^;
:
:
: gongnim 님이 쓰신 글 :
: : 근데 필요한 헤더파일이 없는거 같은데요.
: : 헤더도 올려주시면 감사하겠습니다.
: : 그리고, 답변해주셔서 감사합니다.
: :
: : 유영인 [Chris] 님이 쓰신 글 :
: : : 원래는 HTML Direct Link를 위한 소스이지만, 아래쯤에 gongnim님이 원하시는 부분이 있는것 같아보이네요.
: : :
: : :
: : : #include "SHDocVw_OCX.h"
: : :
: : : class webBrowser
: : : {
: : : IHTMLDocument2Ptr docPtr;
: : :
: : : TCppWebBrowser *wb;
: : :
: : : bool complete;
: : :
: : : public:
: : : __fastcall webBrowser( TCppWebBrowser *p );
: : :
: : : void __fastcall DocComplete( LPDISPATCH lpDisp, TVariant *URL );
: : : void __fastcall Navigate( BSTR url ) { wb->Navigate( url ); }
: : : void __fastcall BeforeNavigate() { docPtr.Reset(); }
: : : bool __fastcall isComplete() { return complete; }
: : :
: : : IHTMLElementPtr __fastcall
: : : GetHTMLElement( IHTMLFormElementPtr const &formElements, LPCSTR
: : : );
: : : IHTMLInputElementPtr __fastcall
: : : GetInputElement( IHTMLFormElementPtr const &formElements,
: : : LPCSTR );
: : : IHTMLSelectElementPtr __fastcall
: : : GetSelectElement( IHTMLFormElementPtr const &formElements,
: : : LPCSTR );
: : : IHTMLTextAreaElementPtr __fastcall
: : : GetTextElement( IHTMLFormElementPtr const &formElements, LPCSTR
: : : );
: : : IHTMLFormElementPtr __fastcall GetFormElement();
: : : HTMLInputFileElementPtr __fastcall
: : : GetFileElement( IHTMLFormElementPtr const &formElements, LPCSTR
: : : );
: : : };
: : :
: : :
: : : // file wbProxy.cpp
: : : #include <vcl.h>
: : : #include "mshtml_tlb.h"
: : : #pragma hdrstop
: : :
: : : #include "wbProxy.h"
: : :
: : : __fastcall webBrowser::webBrowser( TCppWebBrowser *p ) : wb( p ),
: : : complete( false )
: : : {
: : : }
: : :
: : :
: : : void __fastcall webBrowser::DocComplete( LPDISPATCH lpDisp, TVariant
: : : *URL )
: : : {
: : : IUnknownPtr unkDisp = IWebBrowser2Ptr( wb->ControlInterface, true );
: : : IUnknownPtr unkDoc = lpDisp;// wb->Document;
: : : if ( unkDisp == true && (IUnknown*)unkDisp == unkDoc ) {// entire
: : : document finished
: : : complete = true;
: : : IDispatchPtr disp( wb->ControlInterface->get_Document(), false );
: : : docPtr = disp;
: : : } else
: : : complete = false;
: : : }
: : :
: : :
: : : IHTMLElementPtr __fastcall
: : : webBrowser::GetHTMLElement( IHTMLFormElementPtr const &formElements,
: : : LPCSTR name )
: : : {
: : : if ( formElements ) {
: : : // get the item from the collection
: : : IDispatchPtr disp;
: : : formElements->item( name, TNoParam(), &disp );
: : : if ( disp ) {
: : : // get the input element
: : : IHTMLElementPtr inputElem = disp;
: : : return inputElem;
: : : }
: : : }
: : : return IHTMLElementPtr();
: : : }
: : :
: : : IHTMLInputElementPtr __fastcall
: : : webBrowser::GetInputElement( IHTMLFormElementPtr const &formElements,
: : : LPCSTR name )
: : : {
: : : if ( formElements ) {
: : : // get the item from the collection
: : : IDispatchPtr disp;
: : : formElements->item( name, TNoParam(), &disp );
: : : if ( disp ) {
: : : // get the input element
: : : IHTMLInputElementPtr inputElem = disp;
: : : return inputElem;
: : : }
: : : }
: : : return IHTMLInputElementPtr();
: : : }
: : :
: : : IHTMLSelectElementPtr __fastcall
: : : webBrowser::GetSelectElement( IHTMLFormElementPtr const
: : : &formElements, LPCSTR name )
: : : {
: : : if ( formElements ) {
: : : // get the item from the collection
: : : IDispatchPtr disp;
: : : formElements->item( name, TNoParam(), &disp );
: : : if ( disp ) {
: : : // get the input element
: : : IHTMLSelectElementPtr inputElem = disp;
: : : return inputElem;
: : : }
: : : }
: : : return IHTMLSelectElementPtr();
: : : }
: : :
: : : IHTMLTextAreaElementPtr __fastcall
: : : webBrowser::GetTextElement( IHTMLFormElementPtr const &formElements,
: : : LPCSTR name )
: : : {
: : : if ( formElements ) {
: : : // get the item from the collection
: : : IDispatchPtr disp;
: : : formElements->item( name, TNoParam(), &disp );
: : : if ( disp ) {
: : : // get the input element
: : : IHTMLTextAreaElementPtr inputElem = disp;
: : : return inputElem;
: : : }
: : : }
: : : return IHTMLTextAreaElementPtr();
: : : }
: : :
: : : HTMLInputFileElementPtr __fastcall
: : : webBrowser::GetFileElement( IHTMLFormElementPtr const &formElements,
: : : LPCSTR name )
: : : {
: : : if ( formElements ) {
: : : // get the item from the collection
: : : IDispatchPtr disp;
: : : formElements->item( name, TNoParam(), &disp );
: : : if ( disp ) {
: : : // get the input element
: : : HTMLInputFileElementPtr inputElem = disp;
: : : return inputElem;
: : : }
: : : }
: : : return HTMLInputFileElementPtr();
: : : }
: : :
: : : IHTMLFormElementPtr __fastcall webBrowser::GetFormElement()
: : : {
: : : // get the forms collection
: : : if ( docPtr ) {
: : : IHTMLElementCollectionPtr elemColl = docPtr->get_forms();
: : : if ( elemColl ) {
: : : // get the first form in the collection
: : : IDispatchPtr formColl;
: : : elemColl->item( TNoParam(), 0, &formColl );
: : : if ( formColl ) {
: : : // get the collection of all input elements
: : : IHTMLFormElementPtr formElements = formColl;
: : : return formElements;
: : : }
: : : }
: : : }
: : : return IHTMLFormElementPtr();
: : : }
: : :
: : : // here is a function that is the event handler
: : : void __fastcall TRobot::browserDocumentComplete(TObject *Sender,
: : : LPDISPATCH pDisp, TVariant *URL)
: : : {
: : : // can touch the document ?
: : : wb.DocComplete( pDisp, URL );
: : : if ( wb.isComplete() ) {
: : : StartBtn->Enabled= true;
: : :
: : : for ( int i = 0; i < Speed->Position; i++ ) {
: : : Application->ProcessMessages();
: : : Sleep( 500 );
: : : }
: : : switch ( curPage ) {
: : : case none:
: : : curPage = frontPage;
: : : SubmitFrontPage();
: : : break;
: : : case frontPage:
: : : curPage = toPage;
: : : SubmitToPage();
: : : break;
: : : case toPage:
: : : curPage = coverPage;
: : : SubmitCoverPage();
: : : break;
: : : case coverPage:
: : : curPage = docsPage;
: : : SubmitDocsPage();
: : : break;
: : : case docsPage:
: : : curPage = submitPage;
: : : SubmitSubmitPage();
: : : break;
: : : case submitPage:
: : : curPage = none;
: : : Rewind();
: : : break;
: : : }
: : : }
: : : }
: : :
: : : void __fastcall TRobot::SubmitToPage()
: : : {
: : : try {
: : : // obtain and set "f_tofaxnum"
: : : IHTMLFormElementPtr formElement = wb.GetFormElement();
: : :
: : : if ( formElement ) {
: : : IHTMLInputElementPtr element = wb.GetInputElement( formElement,
: : : "f_tofaxnum" );
: : : if ( element ) {
: : : element->set_value( WideString( faxNo->Text ) );
: : : }
: : : element = wb.GetInputElement( formElement, "f_toname" );
: : : if ( element ) {
: : : element->set_value( WideString( "Robot" ) );
: : : }
: : : element = wb.GetInputElement( formElement, "f_tocompany" );
: : : if ( element ) {
: : : element->set_value( WideString( "Robot Company" ) );
: : : }
: : : IHTMLSelectElementPtr selEl = wb.GetSelectElement( formElement,
: : : "f_quality" );
: : : if ( selEl ) {
: : : selEl->set_selectedIndex( 1 );
: : : }
: : : formElement->submit();
: : : }
: : : }
: : : catch( ... ) {
: : : ShowMessage( "Error. Please, restart" );
: : : }
: : : }
: : :
: : :
: : : gongnim 님이 쓰신 글 :
: : : : Programming Internet Explorer 5 책이 절판이 되버려서 책을 살수가 없네요. TT
: : : : 그래서, 패패루님께 or 다른 님들께 요청합니다.
: : : : 어떻게 하면 Explorer의 엘리먼트를 구할 수 있는지, 참고자료나 샘플이 있으면 구해주세요.
: : : : 혼자서 맨땅에 헤딩할려니 답답하군요.
: : : : 그럼이만....
: : : :
: : : : --- Change World ---
|