C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37603] Re:로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때...
만복대.산수유 [origin] 2064 읽음    2004-10-13 17:24
세즈 님이 쓰신 글 :
: 인터넷 브라우져를 올려놓고
: Navigate 함수를 사용하여 페이지를 띄우고
: 그 띄운 결과에서 소스값을 받아서 데이터 처리를 하려고 합니다.
: 띄운 결과에서 소스값이 나올려면 페이지가 다 뜬뒤에 소스를 받아서 연산처리를 거쳐 특정 값을 줘야만 하는데...
: 이노무 것이 페이지가 다 뜨지도 않았는데 소스를 받으려고 하고 연산처리까지 빈 값으로 해버리더군요.
: 이같은경우 wait 이라든지 다른 뭔가가 방법이 있을듯 한데요.
: 혹시 이러한 문제를 해결하는 방법을 아시는분 계신가요???
:
:
:
:
: Memo1->Text = "";       //Memo1 Data Clear!!!
: CppWebBrowser1->Navigate(url);
:
: //요기 사이에 뭔가 들어가던가 해야될듯한데...
:
: if(Memo1->Text.SubString(1,5)=="data=")
:         {
:                 NewNode->SubItems->Add(Get_nlevel(Memo1->Text.SubString(7,8)));
:                 //ShowMessage("nlevel");
:                 NewNode->SubItems->Add(Get_ntemp(Memo1->Text.SubString(7,8)));
:                 //ShowMessage("ntemp");
:
:
: void __fastcall TDeviceForm::CppWebBrowser1DocumentComplete(
:       TObject *Sender, LPDISPATCH pDisp, Variant *URL)
: {
:         Edit1->Text = CppWebBrowser1->LocationURL;
:         IDispatch *Document;
:         //err
:         Document = CppWebBrowser1->Document;
:         IHTMLElement *HTMLElement;
:         IHTMLDocument2 *pHTMLDocument;
:         HRESULT hr;
:
:         WideString HTML;
:         WideString Text;
:         hr = Document->QueryInterface(IID_IHTMLDocument2,(void**)&pHTMLDocument );
:         if ( hr == S_OK )
:         {
:                 hr = pHTMLDocument->get_body(&HTMLElement);
:                 if ( hr == S_OK )
:                 {
:                         HTMLElement->get_innerHTML(&HTML);
:                         HTMLElement->get_innerText(&Text);
:                         HTMLElement->Release();
:                 }
:                 pHTMLDocument->Release();
:         }
:         Memo1->Lines->Clear();
:         Memo1->Lines->Add(HTML);
: }

그러니까, 프레임으로 나누어진 문서의 경우 각 프레임마다 OnDocumentComplete 이벤트가 발생합니다.
각 프레임마다 OnDocumentComplete 이벤트가 발생하는데 pDisp의 값은 각 프레임의 IDispatch입니다.
다만, 마지막으로 OnDocumentComplete가 발생하는 프레임의 경우, pDisp의 값이 해당 프레임의 IDispatch가 아니고 TCppWebBrowser의 IDispatch가 됩니다.
프레임이 없는 경우는 한 번 발생하는데 pDisp의 값은 TCppWebBrowser의 IDispatch가 됩니다.

따라서, 이 두 IDispatch 포인터 값을 비교하면 됩니다.

빌더의 도움말에 나와있는 아래 예제를 참고하세요.

This example shows how to detect when a document is completely loaded, even if it includes multiple frames. Only the final OnDocumentComplete event passes the same Dispatch interface as the OnNavigateComplete event handler.

_di_IDispatch CurDispatch = NULL; // save the interface globally  ;전역 변수로 선언/정의

void __fastcall TForm1::CppWebBrowser1NavigateComplete2(TObject *Sender, const _di_IDispatch pDisp, OleVariant &URL)
{
  if (!CurDispatch)
    CurDispatch = pDisp; // save for comparison ; OnDocumentComplete 이벤트 핸들러에서 비교하기 위함
}
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender, const _di_IDispatch pDisp, OleVariant &URL)
{
  if (pDisp == CurDispatch)
  {
   //님의 코드에서  : CppWebBrowser1->Navigate(url); 다음에 이어지는 내용을 이곳으로 이동.
    Beep(); // the document is loaded, not just a frame ;문서 전체가 로드됐음
    CurDispatch = NULL; //clear the global variable ; 다음 번 Navigate를 위해 초기화
  }
}

+ -

관련 글 리스트
37596 [긴급! 도와주세요!집에가고싶어요!]Wait???로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... 세즈 1042 2004/10/13
37626     제가 쓰는 방법 - 로딩이 끝난후 처리 방법 ^^ 아르스 1221 2004/10/14
37625     Re:[긴급! 도와주세요!집에가고싶어요!]Wait???로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... 멀더 1253 2004/10/14
37603     Re:로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... 만복대.산수유 2064 2004/10/13
37599     722 2004/10/13
37601         Re:Re:[긴급! 도와주세요!집에가고싶어요!]Wait???로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... civilian 1125 2004/10/13
37600         Re:Re:[긴급! 도와주세요!집에가고싶어요!]Wait???로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... 세즈 940 2004/10/13
37602             Re:Re:Re:[긴급! 도와주세요!집에가고싶어요!]Wait???로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... 방태윤 870 2004/10/13
37607                 Re4 :[긴급! 도와주세요!집에가고싶어요!]Wait???로딩타임 문제!!!Navigate(인터넷주소); 를 쓸때... 세즈 1018 2004/10/13
37611                     winbase.h 방태윤 2161 2004/10/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.