用TWebBrowser嘛!
procedure TForm1.FormCreate(Sender: TObject);
var
Path:String;
begin
Path:=ExtractFilePath(Application.ExeName)+'index.htm';
WebBrowser1.Navigate(WideString(Path));
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Path:String;
begin
Path:=ExtractFilePath(Application.ExeName)+'index.htm';
WebBrowser1.Navigate(WideString(Path));
end;
我的要求是,这些html代码要嵌入到我的exe文件之中发布,而不是作为一个外部文件而在运行时读取。
你如果需要的话,我可以把该控件和实现方法告诉你。
开发期间,将html文件作为资源读入到dfm之中,运行时,将这个资源提取出来,送给WebBrowser对象。但是,具体如何实现呢?
我觉得目前主要的难点是两点:
首先,如何将一个html文件做成资源,合并到dfm或dcu之中?Delphi和VC的资源编辑器,好像只能处理位图、字符串等。这个问题,还是麻烦hyper2k,请把那个什么控件和实现方法给我,好吗?
还有,如何在运行时,让WebBrowser控件打开这个资源?因为,该控件按常规,是打开url或者磁盘文件的。如何用资源来代替文件?
很简单,先把Html文件作为一个资源编译进入可执行文件即可。
具体步骤:
1.建立一个资源描述文件:resource.rc;//用文本编辑器编辑就可以了
内容为:htmlfile RT_RCDATA Filename.html //请相应更改文件名
2.在命令行下用brcc32 resource.rc生成resource.res文件
3.在Project文件中用{$ resource.res}添加资源。
4.重新生成html文件代码:
var
htmlres:tresourcestream;
begin
htmlres:=TResourceStream.Create(hinstance,'SourceCode','RT_RCDATA');//Load
htmlres.SaveToFile(path+OUTFILENAME); //输入文件,建立临时文件
htmlres.Free;
end;
明白了吗?
实际上,这是建立一个临时文件,然后再Navigate这个临时文件即可。
程序退出的时候,删除临时文件即可。
我在form中嵌入一个WebBrowser之后,编译没有问题。但是一旦执行,就出来一个报错对话框,说什么未执行CoInitialize。一开始我是一头雾水。测试着开一个空的Project,放一个WebBrowser,就没这个错了,功能很正常呀?
于是查msdn,到是查到了。说是程序调用ole功能之前,必须先调用这个函数。于是死马当活马医,直接在Application.CreateForm之前,直接调用这个函数。编译不通过,说该函数未定义。于是再参照msdn的申明,写成delphi的格式,终于通过,WebBrowser也正常了。后来参照msdn的建议,改为CoInitializeEx,具体是这样的:
function CoInitializeEx(pvReserved:Longint;dwCoInit:Longword):HRESULT;
stdcall;external 'ole32.dll' name 'CoInitializeEx';所以,哪位能告诉我,为什么一般的程序不用调用该函数,而我这个却需要?CoInitializeEx的本质是什么?