WebCompiler等电子书制作类软件的原理? (200分)

  • 主题发起人 主题发起人 avant
  • 开始时间 开始时间
A

avant

Unregistered / Unconfirmed
GUEST, unregistred user!
譬如 WebCompiler 能做出exe文件,确实很方便。那电子书是怎么编译出来的?它们用的外壳应该是
固定的,修改其资源文件?呵呵。一时好奇,大家说说。
 
是不是我说得不够明白啊?帮帮忙啦[:D]
 
IdFTP是什么??我对这问题很感受兴趣,或许能帮得上忙
 
添加到文件尾, 图标的位置是固定的, 也可更换
 
我目前正在写一个类似的组件包,
可以在Delphi的 IDE环境中用几个组件就可以写出电子书,
还可以具有简单的交互功能,支持Web页压缩,
网页可以保存在窗体上,或程序资源中,也可以附加在程序文件末尾
也可以单独存放(网页可以全部放在.zip文件中)
完全可以替代chm,
目前还没有完成文件包含的功能,
全文检索尚未开发

下面是各组件编译到程序中后所占的空间(未使用可执行程序压缩工具)

虚拟WEB应用程序组件的尺寸

一个空的应用程序
Size: 359,424

添加VclZip解压库,选择KPSMALL
Size: 440,320

添加Zlib压缩及解压库
Size: 425,472

添加标准的WebBrowser
Size: 404,992

添加WebBrowserEx116
Size: 448,000

综上所述,各个模块占用的空间大致为
VclZip223: 80,896
FastZlib: 66,048
WebBrowser: 45,568
WebEx116: 88,576

应用程序最大体积增加
80,896 + 66,048 + 88,576 = 235,520
实际增加
554,496 - 359,424 = 195,072

如果在Delphi5中会占用更少的空间
 
如果做这样的东西当然用C或汇编才能小一点,楼上的太大了,
 
大多数WebCompiler的Stub程序都是用Delphi写的,并进行了压缩
eBook的外壳是用VC++写的,压缩后的大小可能只有213,504,
但原始尺寸为 532,480也不小了
 
呵呵。有做过这个的来了。老李呀,我就是想知道怎么生成的exe,怎么在那个标准的exe(是不是你叫做Stub的?)
加入特定电子书的资源?
 
他是附在后面,不是放在资源中的
 
我的exe是
自己编译出来的,在项目中加入一个.rc文件,编译时便可以把资源加入程序中了
我的组件支持4中读取数据源的方法
1.从窗体资源中读取
2.从程序资源中读取
3.从程序后面附加的数据中读取
4.从磁盘文件中读取
目前我的组件包版本才到0.5,尚有一些功能没有完成
至于动态修改资源,可以用VC++或者其他的资源修改工具,都可以做到的

下面是我的一个.rc的原文件,把一个.zip文件加入到资源中RCData组中
{ demo.rc }
//资源名称 资源类型 文件名
dmps 10 demo.zip
 
嘻嘻,追加文件到程序尾部还是很简单的,读出来更加简单!

LiChaoHui:你的东西是不可能超过CHM的,CHM的关键字检索算法就是你的最大障碍!
看看大富翁的CHM离线资料,200多兆,搜索关键字的速度实在无法匹及!

CHM还有微软的IE支持,是一套完整的解决方案!
 
本人制作的阅读器就用过文件追加到尾部的方法,贴出代码!

// 版权所有:雅龙工作室——司马华鹏
//------------------------------------------------------------------------------
//从程序中提取附加文件
function LoadFile(const Sourcefile,Targetfile :string):boolean;
var
Source:TFilestream;
Target:TMemorystream;
Myfilesize:integer;
begin
try
Target:=TMemoryStream.create;
Source:=TFileStream.create(Sourcefile,fmOpenread or fmSharedenynone);
try
Source.Seek(-sizeof(myfilesize),sofromend);
Source.Readbuffer(myfilesize,sizeof(myfilesize));//读出资源大小
Source.Seek(-myfilesize,sofromend);//定位到资源位置
Target.Copyfrom(Source,myfilesize-sizeof(myfilesize));//取出资源
Target.Position:=0;
Target.SaveToFile(Targetfile);
finally
target.free;
source.free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;

//------------------------------------------------------------------------------
//把文件加入程序尾部
Function AddFileTo(const SourceFile,TargetFile:string):Boolean;
var
Target:TFileStream;
Source:TFileStream;
MyFileSize:integer;
fMode:Word;
begin
Result:=False;

try
if FileExists(TargetFile) = false then
fMode := (fmCreate or fmOpenReadWrite)
else
fMode := fmOpenReadWrite;

Source:=TfileStream.Create(SourceFile,fmOpenRead);
Target:=TFileStream.Create(TargetFile,fMode);
try
Target.Seek(0,soFromEnd); //往尾部添加资源
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize); //计算资源大小,并写入辅程尾部
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
finally
Target.Free;
Source.Free;
end;
except
on e:exception do begin
Alert(E.Message);
Exit;
end;
end;

Result:=True;
end;
 
你不觉得.chm的界面震得很难看吗?
全文检索并不难,高的速度却不容易,
这一方面,我只要实现功能,并不需要极高的检索速度,
因为我的组件是面向少量数据的
 
谢谢爱元元他哥哥。
呵呵,原来在exe尾部随便加东西不影响文件的有效性。那么,还有没有别的地方也能“塞”数据啊?
记得有一个软件,能把各种文件藏到gif里面,估计也是放到那个特殊位置了。看来文件格式很有学问
的:)前些天搜到jingtao的文章(和上面的代码差不多),很受启发。

LiChaoHui:相信很多人用电子书软件,是觉得chm的阅读器不好看。能不能研究一下chm的文件格式,
自己做个CHM阅读器?这样,充分利用了CHM的强大功能和效率,又达到了美观。自己做的电子书软件
读的都是尾巴上加的chm,并且还能打开外部的chm,岂不是很爽?

 
我所写的阅读器是基于.zip文件的,
将网页数据打包到.zip文件中,将扩展名改为.zbk
可以用特定的浏览器打开数据,界面可以请界面高手做的美观大方一些,
同时也可以将此文件附加到程序尾部,
在程序中作为帮助系统来使用,完全可以替代.chm的功能,
并且还可以在程序中自定义帮助浏览窗口,

此软件的全文检索功能正在实现中,
此软件将作为共享软件,
如果需要与我合作(
包括写Demo程序,如果演示程序被采用,
则免费获得一个注册用户
英文帮助,和英文版,需要英语六级以上
),
如果有意,请与我联系:
Email: li_violetcn@yahoo.com.cn
or lichaohui@old.371.net
 
老李一门心思做广告,算了,结账[:D]
 
明年,微软就会发布MS Help 2.0格式的Runtime了,到时候,chm就会慢慢退到现在hlp的地步:)
 
后退
顶部