Access中以文件流方式存储的RTF文件如何导出为HTML文件,或者Richedit中的rtf文件如何导出为html文件呢
相反html文件如何导出为rtf文件呢
相反html文件如何导出为rtf文件呢
解决方案 »
- Delphi代码换成VB代码 急急
- 调用DLL出现严重问题,请教各位~~在线等待答案,,立即结帖!!
- 控件自定义属性的问题?急急!!!!
- 怎样改变canvas.textout或者其他的文本输出的x方向和y方向?
- 在线高分求助,答对100分!!!TwinSkinForm组件怎么添加
- DELPHI +SQL SERVER2000 模糊查询与数据库备份的问题
- 好心人,请给个easygrid控件,如可使用,全分相送
- 在DELPHI里用quick report打印表格的时候为什么打印页之间会嵌入空页?
- 我想在formclose里使用messagebox的cancel该如何实现?
- 我做的MDI父窗口最大化的时候把windows桌面的状态栏也给覆盖了,我该怎样设置不让它覆盖呢?
- dll中引出的登陆,密码业正出错!高分指教!
- 高手看这里:三层结构,客户端如何实现软件自动升级功能?
var loop,loop2:integer; // Counter
s,s2:string; // Strings, zur Bearbeitung
fett,kursiv,us,bullet:boolean; // welche Attribute hatte das letzte Zeichen?
Aktcolor:tColor; // aktuelle Farbe
aktSize:integer; // aktuelle Schriftgr鲞e
AktLine:Integer; // welche Zeile bearbeiten wir
Align:TAlignment; // wie ist die Ausrichtung
ReihenFolge:TList; // in welche Reihenfolge werden die Tags bearbeitet
// 1= fett
// 2 = kursiv
// 3 = unterstrichen
// 4 = Color
// 5 = Size
// 6 = li function CalculateSize(pt:integer):integer;
// Umrechung der Schriftgr鲞e in Pixel in ein HTML-Format
// Die Einteilung ist v鰈lig willk黵lich und wurde von mir so gew鋒lt.
// Wer etwas anderes will, kann das hier 鋘dern
begin
case pt of
0..7: result:=1;
8..10: result:=2;
11..13: result:=3;
14..16: result:=4;
17..20: result:=5;
21..24: result:=6;
else result:=7;
end;
end; // CalculateSize;begin
Source.Visible:=false;
Source.Width:=32000; Dest.Lines.Clear;
ReihenFolge:=TList.Create; // der Header
s:=
'<html><head><title>'+OpenDialog.FileName+'</title><meta name="generator" content="Johannes'' rtf2html-Konverter"></head>'+
'<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">'; fett:=false;
kursiv:=false;
us:=false;
bullet:=false; // wieviele Zeichen insgesamt
Source.SelectAll;
loop2:=Source.SelLength; // die Daten des ersten Zeichens herausfinden
Source.SelLength:=1;
AktColor:=Source.SelAttributes.Color;
AktSize:=CalculateSize(Source.SelAttributes.Size);
Align:=Source.Paragraph.Alignment; // erstmal eine v鰈lig willk黵liche Reihenfolge festlegen
ReihenFolge.Add(Pointer(1));
ReihenFolge.Add(Pointer(2));
ReihenFolge.Add(Pointer(3));
ReihenFolge.Add(Pointer(4));
ReihenFolge.Add(Pointer(5));
ReihenFolge.Add(Pointer(6)); AktLine:=0;
s:=s+'<font size="'+IntToStr(aktsize)+'" color="#'+IntToHex(GetRValue(AktColor),2)+IntToHex(GetGValue(AktColor),2)+IntToHex(GetBValue(AktColor),2)+'">'; // Der erste Paragraph
case Align of
taLeftJustify:s:=s+'<p align="left">';
taRightJustify:s:=s+'<p align="right">';
taCenter:s:=s+'<p align="center">';
end; for loop:=0 to loop2 do
begin
// immer das n鋍hste zeichen
Source.SelStart:=loop;
Source.SelLength:=1; // jetzt wird geschaut, ob sich etwas getan hat
with Source.SelAttributes do
begin // Testen, ob wir eine neue Zeile erreicht haben, wenn ja,
// dann entweder neuer Paragraph oder <br>
if AktLine <> SendMessage (Source.Handle, EM_LINEFROMCHAR,
Source.SelStart, 0) then
begin
// wenn wir in einer Aufz鋒lung sind, dann wird durch eine neue
// Zeile diese immer abgeschlossen
if bullet then
begin
s:=s+'</li>';
bullet:=false; ReihenFolge.Move(ReihenFolge.IndexOf(Pointer(6)),ReihenFolge.Count-1);
// wenn in der neuen Zeile nicht wieder eine Aufz鋒lung ist,
// dann erstellen wir eine neue Zeile
if Source.Paragraph.Numbering <> nsBullet then
begin
// Bevor wir in die neue Zeile wechseln, schlie遝n wir alle offenen Tags
for loop2:=0 to ReihenFolge.Count-1 do
case Integer(Reihenfolge[loop2]) of
1: if fett then s:=s+'</b>';
2: if kursiv then s:=s+'</i>';
3: if us then s:=s+'</u>';
4: s:=s+'</font>';
end; // case
fett:=false;
kursiv:=false;
us:=false; s:=s+'<br>';
end;
end
else
begin
if Trim(Source.Lines[AktLine])='' then
// wenn die n鋍hste Zeile leer ist, dann f黦en wir einen neuen Paragraphen
// ein, sonst nur ein <br>
begin
// Alle offenen Tags werden geschlosssen
for loop2:=0 to ReihenFolge.Count-1 do
case Integer(Reihenfolge[loop2]) of
1: if fett then s:=s+'</b>';
2: if kursiv then s:=s+'</i>';
3: if us then s:=s+'</u>';
4: s:=s+'</font>';
end; // case
fett:=false;
kursiv:=false;
us:=false;
s:=s+'</p>';
Align:=Source.Paragraph.Alignment;
case Align of
taLeftJustify:s:=s+'<p align="left">';
taRightJustify:s:=s+'<p align="right">';
taCenter:s:=s+'<p align="center">';
end;
end else s:=s+'<br>'; end; // keine Aufz鋒lung
AktLine:=SendMessage (Source.Handle, EM_LINEFROMCHAR,
Source.SelStart, 0);
end; // neue Zeile for loop2:=0 to ReihenFolge.Count-1 do
case Integer(ReihenFolge[loop2]) of 1: if fsBold in Style then
begin
if not fett then
begin
s:=s+'<b>';
fett:=true;
ReihenFolge.Move(loop2,0);
end;
end else begin
if fett then
begin
s:=s+'</b>';
fett:=false;
ReihenFolge.Move(loop2,ReihenFolge.Count-1);
end;
end; 2: if fsItalic in Style then
begin
if not kursiv then
begin
s:=s+'<i>';
kursiv:=true;
ReihenFolge.Move(loop2,0);
end;
end else begin
if kursiv then
begin
s:=s+'</i>';
kursiv:=false;
ReihenFolge.Move(loop2,ReihenFolge.Count-1);
end;
end; 3: if fsUnderline in Style then
begin
if not us then
begin
s:=s+'<u>';
us:=true;
ReihenFolge.Move(loop2,0);
end;
end else begin
if us then
begin
s:=s+'</u>';
us:=false;
ReihenFolge.Move(loop2,ReihenFolge.Count-1);
end;
end;
begin
aktcolor:=color;
s:=s+'</font><font size="'+IntToStr(aktsize)+'" color="#'+IntToHex(GetRValue(AktColor),2)+IntToHex(GetGValue(AktColor),2)+IntToHex(GetBValue(AktColor),2)+'">';
ReihenFolge.Move(loop2,0);
end; 5: if CalculateSize(Size)<>aktSize then
begin
aktsize:=CalculateSize(size);
s:=s+'</font><font size="'+IntToStr(aktsize)+'">';
ReihenFolge.Move(loop2,0);
end; 6: if Source.Paragraph.Numbering =nsBullet then
begin
if not bullet then
begin
s:=s+'<li>';
bullet:=true;
ReihenFolge.Move(loop2,0);
end;
end else begin
if bullet then
begin
s:=s+'</li>';
bullet:=false;
ReihenFolge.Move(loop2,ReihenFolge.Count-1);
end;
end; end; // case end; // with selattributes do
// jetzt wird erst mal alles ges鋟bert, was in der HTM-Datei nicht so nett
// aussehen w黵de
if source.SelText='"' then
s:=s+'"'
else
if source.SelText='<' then
s:=s+'<'
else
if source.SelText='>' then
s:=s+'>'
else
if source.SelText='? then
s:=s+'ä'
else
if source.SelText='? then
s:=s+'Ä'
else
if source.SelText='? then
s:=s+'ö'
else
if source.SelText='? then
s:=s+'Ö'
else
if source.SelText='? then
s:=s+'ü'
else
if source.SelText='? then
s:=s+'Ü'
else
if source.SelText='? then
s:=s+'ß'
else
s:=s+Source.SelText;
end; // jedes zeichen // Zum Abschlu?schlie遝n wir die ganzen Tags nochmal
for loop2:=0 to ReihenFolge.Count-1 do
case Integer(Reihenfolge[loop2]) of
1: if fett then s:=s+'</b>';
2: if kursiv then s:=s+'</i>';
3: if us then s:=s+'</u>';
4: s:=s+'</font>';
6: s:=s+'</li>';
end; // case // der letzte Paragraph wird geschlossen
s:=s+'</p>'; // jetzt leerzeichen raus
for loop:=100 downto 2 do
begin
s2:='';
for loop2:=1 to loop do
s2:=s2+' ';
s:=StringReplace(s,s2,'<!--'+IntToStr(loop)+'-->',[rfReplaceAll,rfIgnoreCase]);
end;
for loop:=100 downto 2 do
begin
s2:='';
for loop2:=1 to loop do
s2:=s2+' ';
s:=StringReplace(s,'<!--'+IntToStr(loop)+'-->',s2,[rfReplaceAll,rfIgnoreCase]);
end; // jetzt sind wir fertig
s:=s+'<p align="center"> Erstellt mit rtf2html - © 2001 by Johannes Tränkle - für Delphi-source.de</p></body></html>';
Dest.Lines.Add(s);
Reihenfolge.free; Source.Width:=630;
Source.Visible:=true;
end;
你將流讀到 Source 這個Memo中, 就可轉了!
或者不用Memo, 改成你自己想要的