Delphi. TRichView. Как добавить изображение и сохранить его в базе ?

3

Разрабатываю небольшой компонент – текстовый редактор DBTextEditor, для своей программы . В базе данные будут храниться в HTML формате в обычном текстовом поле. У меня MySQL, я использую TEXT поле. Изображения будут храниться рядом с EXE – в отдельной папке Pics, а в базе будут только ссылки на изображение – что избавит от раздутия таблиц при использовании BLOB полей. Компонент разрабатываю с помощью фрэйма. То есть, доступ ко всем полям и методам будет примерно таким

Выглядит фрэйм примерно таким образом

1

На фрэйме у нас TRichViewEdit – для отображения форматированного текста и TMemo для отображения HTML кода. По кнопке HTML будем переключать туда – обратно.

Базовый класс основного компонента – TPanel. Этот фрэйм размещается в главном модуле компонента примерно так…

Параллельно сделана тестовая программа. Обычное VCL приложение. Выглядит это примерно так…

2

 

В тестовой программе инициируем работу с компонентом в FormCreate – подключаем к базе данных.

Здесь описаны 2 метода

Подробнее разберем их

LoadHTMLContentFromDB

ShowHTMLContentInControls

Обработка HTML Click

Эта кнопка будет переключать HTML код на форматированное отображение и обратно. Теперь, для того, чтобы нам это переключение обработать извне – создадим событие при нажатии на кнопку в самом компоненте в модуле uVisualFrame

В тестовой же программе обработаем событие таким образом

Само сохранение контента в зависимости от того – что открыто – выглядит следующим образом

Результат

3

 

 

Теперь смотрим HTML код

4

В MySQL это выглядит примерно следующим образом

6

То есть всё корректно сохранилось.

Как и где сохранилась картинка?

5

 

Почему здесь?

В процедуре SaveHTMLFromRichView мы использовали следующий код

Что это означает?

2-й параметр – это место, где мы сохраняли картинки, а именно

Параметр

также важен – он означает возможность перезаписывать картинки с одинаковыми именами, в результате – если мы несколько раз один и тот же файл загружаем – у нас будет только одна копия.

Можно ли редактировать в HTMLMemo?

Можно, и при переключении сохранение будет происходить через базу. В результате, когда откроем визуальную часть – все изменения будут отображены.

Выводы

Все работает корректно – но в пределах локального компьютера. Если нужен только локальный вариант программы, тогда это самое то. Мне же, как я понял впоследствии, нужна подгрузка изображений и файлов из WEb – а это несколько другая история, которая будет рассмотрена в одном из следующих постов.

В принципе, можно будет развить эту идею и при желании сделать небольшой HTML редактор – с TRichView это не так-то и сложно –  как оказалось !!!

 

by Stanislav_Panteleev

Добавить комментарий