Я разбил эту статью на 2 части. Одна из них – научимся в принципе сохранять не текстовые элементы (item) в HTML, другая – сохраним ранее созданный контрол TAudioPanel как тег audio. Наша задача получить такой результат
Сохраняем не текстовые элементы в HTML
Пусть у нас есть некоторый контрол, добавленный в TRichView
Наша задача сделать так…
Я не сразу пришел к простому решению, но Вам покажу его сразу, так как оно очевидное, и не стоит на этом терять много времени. Итак, что нам понадобится?
Событие OnSaveItemToFile. В справке написано (completely change HTML code for certain items using OnSaveItemToFile event;). Вот какой пример дается в самой справке.
Example 2: saving pictures as ‘<PIC>’ (in text files, HTML and RTF)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
procedure TMyForm.MyRichViewSaveItemToFile( Sender: TCustomRichView; const Path: String; RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; var DoDefault: Boolean); begin if (RVData.GetItemStyle(ItemNo)=rvsPicture) then begin if SaveFormat=rvsfHTML then OutStr := '<PIC>' else OutStr := '<PIC>'; if Unicode then OutStr := RVU_GetRawUnicode(OutStr); DoDefault := False; end; end; |
Что у нас в данном отрезке кода? В параметр OutStr мы выводим необходимую нам строку, если элемент является картинкой и сохраняемый формат является HTML.
Также интересно заглянуть на страницу констант.
Действуя по аналогии, в нашей программе мы можем объявить вот такое событие
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
procedure TMainForm.MySaveItemToFile(Sender: TCustomRichView; const Path: String; RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; var DoDefault: Boolean); var ControlNo:integer; i:integer; begin if (RVData.GetItemStyle(ItemNo)=rvsComponent) then begin if (SaveFormat=rvsfHTML) then OutStr := '<b>I Love you so much!!! Here will be some HTML Text</b>'; DoDefault := False; end; end; |
Вставляем тег audio
Я думаю Вы уже догадались как вставить тег аудио, чтобы получить вот такой результат
Это можно сделать, например так…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
procedure TMainForm.MySaveItemToFile(Sender: TCustomRichView; const Path: String; RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; var DoDefault: Boolean); var ControlNo:integer; i:integer; FilePath:string; begin if (RVData.GetItemStyle(ItemNo)=rvsComponent) then begin if (SaveFormat=rvsfHTML) then FilePath:='C:\Users\YellowFriend\Desktop\01.Moment musicaux No.1 in b-moll, Op.16 - Andantino.mp3'; OutStr := '<div style="text-align: center;">'+ '<audio src="'+FilePath+'" width="200" controls></audio>'+ '</div>'; // '<b>I Love you so much!!! Here will be some HTML Text</b>'; DoDefault := False; end; end; |
И присвоить событие например в OnCreate
1 2 3 4 5 6 7 8 |
procedure TMainForm.FormCreate(Sender: TObject); begin RichViewEdit1.OnSaveItemToFile:=MySaveItemToFile; end; |
Сам обработчик сохранения в HTML выглядит следующим образом
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
procedure TMainForm.bSaveHTMLClick(Sender: TObject); var HtmlFileName:string; begin if SaveDialog.Execute then begin HtmlFileName:=SaveDialog.FileName; //RichViewEdit1.SaveHTML(HtmlFileName,'MyTitle','',[]); RichViewEdit1.SaveHTMLEx(HtmlFileName,'','','','','',[]); end; end; |
Вот в принципе и всё !!! Ничего такого сложного.