|
만해님의 알켜주신 방법으로는 완전한 브라우징이 되지않아
인터넷을 뒤져 나름데로 구성해 보았읍니다. -- 만해님에게
다시 감사를 드립니다.
TCooWebBrowser를 초기화하는데 의외로 많은 시간이 소요됩니다.
따라서, 필요한 경우(도움말을 호출할 때만)에 초기화하여 실행
하도록 해야 될 것 같읍니다.
#include "SHDocVw_OCX.h" //-- 헤더(H)에 요놈이 포함되어야 합니다.
#pragma link "SHDocVw_OCX" //-- 요놈은 소스(CPP)에 넣어야 합니다.
우선 클라스를 선언합니다. 물론 헤더(H)에 넣어야겠지요...^_^
class TMyBrowser : public TForm{
__published: // IDE-managed Components
TCppWebBrowser *Body;
TButton *DanOK;
void __fastcall DanOKClick(TObject *Sender);
private: // User declarations
public: // User declarations
TStringList *HelpHTML; //-- HTML 스트링을 저장할 장소입니다.
__fastcall TMyBrowser(TComponent* Owner);
void __fastcall Execute(void); //-- 실행하도록 하는 함수.
void __fastcall Clear(void); //-- 브라우져의 내용을 지우는 함수.
void __fastcall AddLine(String aData); //-- 브라우져에 줄 하나를 추가하는 함수.
void __fastcall AddFile(String aFile); //-- 외부의 화일을 읽어드리는 함수.
};
그리고, 소스(CPP)를 다음과 같이 구성합니다.
__fastcall TMyBrowser::TMyBrowser(TComponent* Owner):TForm(Owner){
HelpHTML=new TStringList();
Body->Navigate(WideString("about:blank")); //브라우져를 폼이 만들어질 때 초기화 해
야 합니다. 그렇지 않으면 원하는 데로 브라우징이
되지 않읍니다.
}
//-------------------------------------------------------------------------------------------
void __fastcall TMyBrowser::Clear(void){
//브라우져를 지울 때 기본적인 html 문자열을 집어 넣읍니다.
HelpHTML->Clear();
HelpHTML->Add("");
HelpHTML->Add(""); //-- 브라우져의 오른쪽
마우스를 비활성 시킵니다.
}
//-------------------------------------------------------------------------------------------
void __fastcall TMyBrowser::AddLine(String aData){HelpHTML->Add(aData);}
//-- HTML로 된 한 줄의 문자열을 추가합니다.
//-------------------------------------------------------------------------------------------
void __fastcall TMyBrowser::AddFile(String aFile){ //-- 원하는 화일로 부터 HTML 문자열들을 읽
어 추가합니다.
TStringList *dFile=new TStringList();
dFile->LoadFromFile(aFile);
HelpHTML->AddStrings(dFile);
delete dFile;
}
//-------------------------------------------------------------------------------------------
void __fastcall TMyBrowser::Execute(void){ //-- 실제 브라우징을 실행합니다.
Show();
TMemoryStream *dMemS = new TMemoryStream();
HelpHTML->SaveToStream(dMemS);
dMemS->Seek(0,0);
IPersistStreamInit *dPerS;
TStreamAdapter *dAdaS = new TStreamAdapter(dMemS,soReference);
if(SUCCEEDED(Body->Document->QueryInterface(IID_IPersistStreamInit,
(void **)&dPerS))) dPerS->Load(*dAdaS);
delete dMemS;
}
//-------------------------------------------------------------------------------------------
void __fastcall TMyBrowser::DanOKClick(TObject *Sender) {Close();} //-- 버튼을 눌러종료합니다.
//-------------------------------------------------------------------------------------------
위의 내용을 정리하여 클라스를 생성하고, 주 소스에 다음을 추가합니다.
class TMain : public TForm{
__published: // IDE-managed Components
<...>
void __fastcall Help1Click(TObject *Sender);
void __fastcall Help2Click(TObject *Sender);
private: // User declarations
<...>
public: // User declarations
<...>
TMyBrowser *MyBrowser; //-- 요놈을 추가합니다. 요놈을 추가했다고,
초기화 하지는 않으니까 문제 없읍니다.
<...>
};
void __fastcall TMain::Help1Click(TObject *Sender) {
if(!MyBrowser) MyBrowser=new TMyBrowser(this); // 초기화 되었는지 확인하고 되어있지
않으면, 초기화함.
String dPath=ExtractFilePath(APPeName);
MyBrowser->Clear();
MyBrowser->Caption="Help 1";
MyBrowser->AddFile(dPath+"HelpQStr.cmg");
MyBrowser->AddLine(""");
MyBrowser->Execute();
}
void __fastcall TMain::Help2Click(TObject *Sender) {
if(!MyBrowser) MyBrowser=new TMyBrowser(this);
String dPath=ExtractFilePath(APPeName);
MyBrowser->Clear();
MyBrowser->Caption="Help 2";
MyBrowser->AddLine("연습용");
MyBrowser->AddFile(dPath+"HelpQStr.cmg");
MyBrowser->AddLine("</body></html>");
MyBrowser->Execute();
}
.끝.
붙임말 : 도움이 되시기를 바랍니다.
|