Вот, нашел что-то полезное для тебя. Re - это тот RichEdit, из которого осуществляется экспорт. Test.htm - тот HTML файл, в который осуществляется импорт. У меня поддерживаются только стили: подчеркнутый, жирный, наклонный. Если тебе нужно нечто большее, допиши. Желательно, чтобы ты опубликовал решение - вдруг кому понадобится (»вопрос КС №39527«, я там сослался на тебя).
Type TAttributes=record
Bold:boolean;
Italic:boolean;
Underlined:boolean;
end;
Procedure GetDelta(out S:string;var OldAttr:TAttributes;const NewAttr:TTextAttributes);
begin
S:='';
if((OldAttr.Bold)xor(fsBold in NewAttr.Style))then begin
if OldAttr.Bold then S:=S+'</b>' else S:=S+'<b>';
OldAttr.Bold:=fsBold in NewAttr.Style;
end;
if((OldAttr.Italic)xor(fsItalic in NewAttr.Style))then begin
if OldAttr.Italic then S:=S+'</em>' else S:=S+'<em>';
OldAttr.Italic:=fsItalic in NewAttr.Style;
end;
if((OldAttr.Underlined)xor(fsUnderline in NewAttr.Style))then begin
if OldAttr.Underlined then S:=S+'</u>' else S:=S+'<u>';
OldAttr.Underlined:=fsUnderline in NewAttr.Style;
end;
end;
var S,ReText:string;
F,I,P,Len:cardinal;
Attr:TAttributes;
begin
Button1.Enabled:=false;
F:=CreateFile('test.htm',GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE or FILE_FLAG_SEQUENTIAL_SCAN,0);
if F<>INVALID_HANDLE_VALUE then begin
S:='<HTML>'#13#10'<HEAD><TITLE>Untitled</TITLE></HEAD>'#13#10'<BODY>'#13#10;
WriteFile(F,S[1],Length(S),I,nil);
ReText:=Re.Text;Len:=Length(ReText);
ZeroMemory(@Attr,sizeof(TAttributes));
P:=1;while(P<=Len) do begin
if(ReText[P]=#13)and(ReText[P+1]=#10)then begin
S:=#13#10'<br>';
Inc(P,2);
end else begin
Re.SelStart:=P-1;
Re.SelLength:=1;
GetDelta(S,Attr,Re.SelAttributes);
S:=S+Re.Text[P];
Inc(P);
end;
WriteFile(F,S[1],Length(S),I,nil);
end;
S:=#13#10'</BODY>'#13#10'</HTML>'#13#10;
WriteFile(F,S[1],Length(S),I,nil);
CloseHandle(F);
end;
Button1.Enabled:=true;
end; |