![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток участникам форума!
Я написала простой и незамысловатый html-редактор, взяв за основу компоненты SynEdit и SynUniHighlighter. Редактор работает, но мне хочется еще добавить окно предварительного просмотра написанной в редакторе веб-страницы как отдельную форму. Собственно, вопрос: как организовать передачу всего содержимого SynEdit в компонент TWebBrowser для отображения? Просмотрела пару книг - по TWebBrowser информации мало, в инете не больше (хотя надо еще FAQ посмотреть). Не знаю, как это реализовать. Помогите, пожалуйста. И будет ли вообще такой способ работать, если компоненты находятся на разных формах? Благодарю заранее за ответы! |
|
#2
|
|||
|
|||
|
Перед вызовом окна предпросмотра сохраняйте содержимое HTML во временный файл на диске, после чего загружайте его в TWebBrowser. При закрытии окна предпросмотра временный html-файл удаляйте. Так даже в некоторых коммерческих редакторах реализуется предпросмотр...
|
|
#3
|
|||
|
|||
|
А не будет ли большой наглостью с моей стороны спросить, как именно выполняется "тихое" сохранение/удаление файла и как указывается папка назначения?))
|
|
#4
|
|||
|
|||
|
У меня нет компонента TSynEdit, поэтому не знаю, какие у него методы ответственны за сохранение содержимого в файл, поэтому покажу один из способов на примере обычного TMemo.
Создайте в разделе Public главной формы переменную, в которой будет храниться путь к временному файлу: Код:
.....
public
{ Public declarations }
TmpFilePath: string;
end;
.....При создании формы (в обработчике события OnCreate) напишите, например, так: Код:
procedure TForm1.FormCreate(Sender: TObject);
const
TEMP_EV = '%TEMP%';
var
TempDir: PChar;
begin
GetMem(TempDir, MAX_PATH);
try
ExpandEnvironmentStrings(@TEMP_EV[1], TempDir, MAX_PATH);
TmpFilePath := StrPas(TempDir) + '\~$tmpfile.htm';
finally
FreeMem(TempDir, MAX_PATH);
end;
end;Когда вызывается предварительный просмотр, например, при щелчке на соответствующую кнопку, сохраняем содержимое Memo (SynEdit) по адресу, записанному в переменной TmpFilePath, вызываем метод Navigate объекта TWebBrowser на второй форме, после чего показываем саму эту вторую форму Form2. Код:
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.SaveToFile(TmpFilePath); Form2.WebBrowser1.Navigate(TmpFilePath); Form2.Show; end; А в модуле второй формы прописываем реакцию на событие OnClose формы. Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FileExists(Form1.TmpFilePath) then
DeleteFile(Form1.TmpFilePath);
end;Ну, и соответственно, оба модуля должны добавить друг друга в раздел uses. |
|
#5
|
|||
|
|||
|
Nyctos Kasignete, благодарю!
![]() |