500分---RTF文件的显示和合并(200分)

  • 主题发起人 主题发起人 caowei
  • 开始时间 开始时间
C

caowei

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi里面的RichEdit只能显示RTF文件里面的文字,不能显示图片。
有没有能够显示完整的RTF的控件(RxLib太大了.....)?
另外,怎么用程序把两个RTF合并?
 
分析两个 RTF 的文件头,将第二个 RTF 的文件头中的格式部分加入第一个RTF 文件头,
然后将第二个 RTF 文件正文加入第一个 RTF 文件正文
 
每个rtf文件都是一个文本文件,显示时由rtf阅读器格式化。
文件开始处是{/rtf,它作为rtf文件的标志是必不可少的,rtf阅读器根据它来判断一个
文件是否为rtf格式。然后是文件头和正文,文件头包括字体表、文件表、颜色表等几个
数据结构,正文中的字体、表格的风格就是根据文件头的信息来格式化的。每个表用一
对大括号括起来,当中包含了很多用字符“/”开始的命令。例如,某个颜色表如下:

{/colortbl;/red0/green0/blue0;/red0/green0/blue255;/red0/green255/blue255;
/red0/green255/blue0;/red255/green0/blue255;/red255/green0/blue0;
/red255/green255/blue0;/red255/green255/blue255;/red0/green0/blue128;
/red0/green128/blue128;/red0/green128/blue0;/red128/green0/blue128;
/red128/green0/blue0;/red128/green128/blue0;/red128/green128/blue128;
/red192/green192/blue192;}

开始时用/colortbl标明大括号内是颜色表,接着是/red0/green0/blue0,
登记了一种颜色,这种颜色的红绿蓝分量都为0。其它表依此类推。文件头
之后是正文,正文由版面格式化命令、文字和各种特殊命令组成。其中只有
特殊命令用大括号括起来,而版面格式化命令和文字是“开放式”的,从而
把文字和命令分离。文件结束时有一个“}”,和第一个“{”对应。在整个
文件中,“}”和“{”必须一一对应。这种格式是rtf阅读器和转换器算法
的基础。
 
我也非常想知道答案.
另外,楼主所说的两个RTF合并是什么意思?是两个RTF文件吗?
 
:“rtf格式作为一个标准应该是统一的,但在某种情况下进行扩展是必
要的。最明显的例子是微软的word,它有自己独有的rtf命令。如果想使自己的软
件在技术上占有优势,也可以通过创造新的rtf命令来实现。例如,如果你希望在
软件中支持dhtml,则可在rtf中嵌入{/dhtml或{/java之类的命令。由于rtf阅
读器有过滤不认识命令的功能,所以这样做不会影响rtf文件的通用性。 ”
最好的办法就是自己扩展,如{/cakkconvert命令。这样可以在Save,Load时
都可进行转换。
你的意思好象是只能针对某一种规定图片数据进行转换;有两种方法:采用
'{/Object',或比较图片数据。用Object快,但编程麻烦。
下面的方法是图片数据比较,有点笨。
先设一个变量DPict: string,值是图片在rtf中的数据。可以将该图片保存
成rtf后提取。然后将文件原样保存(不作变换)为rtf格式,在rtf文件中进行字符
串替换。(在TConversion的ConvertWriteStream方法中不能进行,因为图片数据
可能被截断).
 
Delphi Form 的文件内容可以以文本的方式浏览,
在 Delphi 5 中更可以将窗体文件保存成纯文本的格式,
这种方式会有帮助吗?
有趣的现象是 Acdsee 可以浏览 Delphi 的窗体文件中的图象。

在 MS SQL Server 中保存图片或是其他 Graphic 类型的数据时,
如果在一定尺寸内,亦可不使用 WriteText 方法,而是在程序中
直接将需要保存的数据流转换成字符串的形式(0xFFEE00FFAA....),
使用 SQL 语句直接写入,我曾经在程序中这么做过。其实这也可以
看作是一种文件的读写。

实在不行,亦可将文本和图象分段保存,读取时分段读取,
例如保存好的文件的前半部分是 Rtf 原来的内容,后半部分是图象的
内容,或者颠倒。如果前半部分是 Rtf,后面是图象,那么你需要了解
Rtf 文件的格式,知道前半部分在何处结束;如果需要保存的图象都是
TBitmap 类型的,那么处理起来就会方便得多—— Bitmap 的头信息中
有尺寸信息,使用 TBitmap 读取时,它会仅仅读取需要读取的信息,
而 Stream 的 Position 会停留在正确的位置,如果是其他类型的就不能
保证这一点,如 TJpegImage。

使用自定义的文件格式将会更有助于解决问题,只要文件的格式设计合理,
您可以保存任何需要保存的数据。

 
用RxLib中的RxRichEdit可以解决rtf文件的图片显示问题。
 
import ActiveX Control
Microsoft Rich Text Box
TRichTextBox用这个应该可以显示图片。
 
to realLearning
是不是必须先装VB?
 
不需要安装vb,和他没有什么关系。
 
to realLearning
找不到
why?
 
在上面的menu可以找到Component -> Import ActiveX
然後add Microsoft Rich Text Box....
 
为何rtf文件在RxRichEdit1.text中显示为一个单一空字符的长度,
 
-->>>怎么用程序把两个RTF合并?
曾经见过相关的文章。。。
 
后退
顶部