想用D7做个电子书,这个电子书类似于chm文档,我想把很多htm文件合成到一个exe里,工具栏上有“前进”“后退”“刷新”“查找”“更改字体”“更换背景”等功能按钮,记录文件关闭时位置,下次打开直接定位到关闭之前的位置。
问题是:不知可否实现?如何编程实现将很多htm文件合成到一个exe里?需要用到那些控件?其它的功能如何实现?请高手不吝指教。

解决方案 »

  1.   

    》》问题是:不知可否实现?如何编程实现将很多htm文件合成到一个exe里?可以实现。最简单的方法是,把htm作为资源编译到exe中即可;相关的方法在历史贴中找;》》需要用到那些控件?其它的功能如何实现不用太多复杂的控件,用TWebBrowser即可;程序运行后,把exe的资源,用TMemoryStrem读取出来,然后另存为一个临时的html文件,再用TWebBrowser打开显示即可;
      

  2.   

    楼上的方法对纯文本的htm文件可以,
    如果htm文件有很多图片就不行了吧?
    其实也行,就是把图片也编译到资源文件里 : )
      

  3.   

    又有两个问题:
    1.TWebBrowser可以实现定位到htm中的某一行吗?因为我想退出时记忆上次阅读的位置,再一次打开的时候,直接定位。
    2.因为我想只生成一个exe文件和一个设置文件,能不能不生成临时的htm文件,而直接再TWebBrowser中显示出来?就是类似于CHM或者专门生成exe电子书的那种。
      

  4.   

    微软的另一种html文件格式,
    扩展名是什么.mht的那种文件不知道行不行
    //======================
    MHT叫“web单一文件”。顾名思义,就是把网页中包含得图片,CSS文件以及HTML文件全部放到一个MHT文件里面。而且浏览器可以直接读取得
      

  5.   

    呵呵,是不是MS的不确定,反正是IE另存为一种整合格式的网页文件,好像别的浏览器,没有这种功能的
      

  6.   

    我发现使用TWebBrowser的时候,它访问internet,而我不想让它访问internet,请教如何去避免?
      

  7.   

    首先先感谢楼上的各位,有了一些思路
    以下引用:
    《《《《《《《《《《《
    do2008:程序运行后,把exe的资源,用TMemoryStrem读取出来,然后另存为一个临时的html文件,再用TWebBrowser打开显示即可;
    》》》》》》》》》》》
    有个问题:我不想生成任何临时html文件,全在内存中处理可以实现吗?还可以用TWebBrowser打开显示吗?
      

  8.   

    happyggy说的详细些,好吗?如何编程实现?
      

  9.   

    http://community.csdn.net/Expert/topic/5113/5113036.xml?temp=.3807794
      

  10.   

    很感谢happyggy,还得再请教一下:
    帖子我看了,但是我复制到程序中,有出错提示:
    [Error] Unit1.pas(95): Undeclared identifier: 'IPersistStreamInit'
    [Error] Unit1.pas(137): Undeclared identifier: 'IStream'
    请教如何定义IPersistStreamInit、IStream?以下引用那段代码:
    //get html 源码
    function GetHTMLCode(WB: IWebbrowser2; ACode: TStrings): Boolean;
    var
      ps: IPersistStreamInit;
      s: string;
      ss: TStringStream;
      sa: IStream;
    begin
      ps := WB.document as IPersistStreamInit;
      s := '';
      ss := TStringStream.Create(s);
      try
        sa := TStreamAdapter.Create(ss, soReference) as IStream;
        Result := Succeeded(ps.Save(sa, Bool(True)));
        if Result then ACode.Add(ss.Datastring);
      finally
        ss.Free;
      end;
    end;//webbrowser 载入html源码
    procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
    var
      sl: TStringList;
      ms: TMemoryStream;
    begin
      if Assigned(WebBrowser.Document) then
      begin
        sl := TStringList.Create;
        try
          ms := TMemoryStream.Create;
          try
            sl.Text := HTMLCode;
            sl.SaveToStream(ms);
            ms.Seek(0, 0);
            (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
          finally
            ms.Free;
          end;
        finally
          sl.Free;
        end;
      end;
    end;
      

  11.   

    uses 
       ActiveX;
    //引用这个单元就可以了
      

  12.   

    谢谢楼上各位高手,特别感谢happyggy一直的关注和帮助,这个帖子结了,以后有问题将另开新贴。