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
[14715] Re:Re:Re:[질문]CppWebBrowser로 웹 브라우저 제작해서 새창 제어
I.MagicPotato [magicptt] 3293 읽음    2002-01-18 22:59

음..더이상은 저도 모르겠네요 ^^
참고자료를 하나 드리겠습니다. HTML을 직접 고치는거죠 -_- target을...;



『C++ Builder Programer's Group-질답 게시판 (go SGCCCC)』 1484번
제  목:[참고/1477] HTML 소스 보기...                              
올린이:ultras  (박진국  )    01/01/31 23:51    읽음: 28 E[7m관련자료 있음(TL)E[0m
-----------------------------------------------------------------------------

안녕하세요.

CppWebBrowser Control.. 즉 Internet Explorer Control 은

크게 두부분으로 나뉩니다...

Connection 과 HTML Parsing 등을 담당하는 mshtml (mshtml.dll, mshtml.tlb)

그리고, 윈도우에 디스플레이(렌더링)하는 shdocvw (shdocvw.dll, shdocvw.tlb)

여기에서 기본적으로 CppWebBrowser 는 ShDocVw 이며, mshtml 은 밑에

숨어있다보니... 기본적인 메소드, 프로퍼티 등에는 HTML 소스와 관련된

내용이 나타나지 않습니다...

하지만 Document 라는 프로퍼티가 있습니다.

ShDocVw 에서 MsHtml.dll 의 HTMLDocument2 에 접근하는 것으로,

기본적으로 많이 쓰일꺼 같아 겉으로 빼논듯 합니다..

사실 기본적인 Parse 된 내용이 모두 저기에 들어 있습니다...

Visual Basic 이나 Delphi 등에서는 이 프로퍼티에 접근할때,

자동화로 처리해서 DisPatch 를 다 알아서 내부 객체로의 접근을

하더군요.. Ole Automation....

그 내부의 Document Object 는 기본적인 mshtml 의 Document Object 와

동일한 Property, Method, Event, Collection 으로 구성되어 있기 때문에

MSDN 에서 Document Object 중 'Web Workshop'에 관련된 부분을

참고 하시면 도움이 되실겁니다...

DOM (Document Object Modeling) 개념으로, 모든 Tag 가 객체화 되어 있습니다

MsXml.Dll (XML 파서) 에서도 동일 하죠...

xml 자체가 DOM 이라, Netscape, IE 모두 XML 을 지원하다 보니 HTML도

DOM 으로 파서 해서 늘어 놓습니다... (어떻게 보면 편하고 어떻게 보면 불편)

여튼, 이런 Document Object 가 있는데, C Builder 에서 이걸 어떻게 접근 하느냐..

3~4가지 방법이 있습니다....

여러 서적이나, 관련 사이트에서 Ole Automation 부분을 찾아보시면

방법이 다 나와있습니다....

그 중에 가장 간단하게 할 수 있는 방법을 알려 드리겠습니다..

비교적 많이 쓰이고(퍼포먼스(속도)를 생각 한다면 별로 입니다.)

직관적인 프로그래밍이 가능한 Ole-Variant 로의 접근을 소개해 드리죠.

Variant 가 아주 좋아서.. Ole Object 로 Variant 에 우겨 넣을 수 있습니다.
                                    ^도
Visual Basic, Delphi 등이 Variant 를 기반으로 변수를 운영하니

그들 둘에선 Ole Automation 이 말 그대로 자동으로 다 되버리죠...

여튼 C Builder 의 Variant 에도 그와 같은 기능이 있습니다.

OlePropertyGet, OlePropertySet, OleFunction 등이 있구요...

C Builder 에만 있는거기에(- -;) 다른 레퍼런스(MSDN 등)에는 없네요 - -;

C Builder 의 레퍼런스에도 아주 간략히만 나와있습니다.

여튼 위의 3 함수는 Ole Automation 을 통한 프로퍼티 접근, 함수 접근을

시각적으로 표현 한겁니다.. (내부적으로 엄청 많은 일을 하다보니 - -;

속도가 쪼까 느립니다.)

기본적으로 Document Object 에서 All 이라는 Collection 을 접근 하고자

한다면

Variant MyDocument = CppWebBrowser1->Document;

MyDocument.OlePropertyGet("all");

이렇게 하면 됩니다... 델파이, 비베보다는 거추장 하지만.

만만치 않은 시각적 자동화가 가능합니다...

OlePropertyGet : 프로퍼티에서 값을 불러낼때

OlePropertySet : 프로퍼티에 값을 써 넣을때

OleFunction() : 함수에 값을 넣고 리턴 받을때.

이렇게 기본적인 3가지가 있습니다.

클래스, 컴포넌트 에 익숙한 분이라면 쉽게 뭔지 아실겁니다.

여기에서 젤로 중요한 소스보기..

아쉽게 Document 객체에서 Ole Automation 을 이용해 따운받은 원 소스를

볼수 있는 방법은 없습니다... 다만 무식(?)하게...

Document Object (IDispatch) 를 스트림으로 다른 스트림으로 샤샥 해버리면

내용이 다 넘어 옵니다.. Document Object 라는게

실제로는 HTML 소스를 가지고 있고 mshtml 에서 그 Ole Object를 가지고

노는거죠...

여튼 그 방법 말고, Ole 를 통해선....

아까 그 MyDocument

AnsiString BodySource = MyDocument.OlePropertyGet("body").OlePropertyGet("inner
html);
입니다....Body의 Html 을 불러 옵니다...

여튼 불러오면 원본 소스랑은 조금 틀릴겁니다....

mshtml 이 이것저것 오류가 생길 수 있는 부분, 문법이 약간 어긋난 부분

태그를 열어놓고 안닫아논거 등을 모두 오류 안나게 처리한 소스입니다.

이 외에, 참고로 Collection 에 접근 하는 방법을...

기본적으로 VB 나 Delphi 에서는

Document.All(1).tagname 이라고 하면 전체 html 에서 첫번째에 위치한

tag의 tag 이름을 반환해줍니다... All 이 Collection 이죠.

이걸 C Builder 에서는 Property로 대처 합니다...

Document.OlePropertyGet("All").OleFunction("item", 1).OlePropertyGet("tagname")
;  이렇게 하면 이건 AnsiString 형식으로 전체 HTML 중 첫번째 Tag의

Tag 이름을 반환합니다..

이 외에, WebBrowser 에 접근할때는 잘 쓰이지 않지만, 온갖 OLE Object에

접근할때 OlePropertySet("...", ...) 도 많이 쓰일겁니다...

Excel, Word, 등등 Office 등이 대표적이죠...

WebBrowser 에서 쓰이는 예를 보여 드리면,

CppWebBrowser 에 어떤 내용을 넣은 후에(about:blank 혹은 http://www.???....등)

MyDocument.OlePropertyGet("body").OlePropertySet("innerhtml","hahaha");

이렇게 하면 Body 에 hahaha 라는 내용으로 html 에 쓰이게 됩니다...

그래서 웹 브라우저에는 hahaha라고 나타날겁니다...(기존의 웹 브라우저의

데이터는 없어지구요..)

이 외에 Document Object 의 각종 Property, Collection, Method 등을

잘 구현 하시면.. WebBrowser 컨트롤에 맘데로 내용 넣고 고치고 등을

하실 수 있습니다... (Java Script를 많이 다뤄보셨으면 이 말이

어떤 뜻인지 아실겁니다.... 완전 동일하죠.)

그 외에
등의 Tag 나 웹브라우저의 각종 객체(이미지, 링크 DIV, Span, Style 등등...)를 주무를 수 있습니다... 설명이 너무 길어졌습니다... 씨 빌더에서 이와 관련된 내용이 거의 없어서(- -;) 이것 저것 보면서 알아낸겁니다... 다른 님들은 저같은 고생 하시지 마시라고 글이 길어 졌습니다... 여튼, 참고 하세요.... OLE Automation 을 제외한 부분은 MSDN 에도 많이 나와있으므로 참고 하시기 바랍 니다... 그럼, 글 읽어 주셔서 감사 합니다.

+ -

관련 글 리스트
14711 Re:Re:[질문]CppWebBrowser로 웹 브라우저 제작해서 새창 제어 truestar 1288 2002/01/18
14715     Re:Re:Re:[질문]CppWebBrowser로 웹 브라우저 제작해서 새창 제어 I.MagicPotato 3293 2002/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.