Компонент для псевдобраузера

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Компонент для псевдобраузера

Сообщение wwswowsogon » 18.03.2020 01:01:39

Всем доброго времени суток!

Подскажите, пожалуйста, какой компонент можно/лучше использовать для следующей довольно тривиальной задачи.

В процессе работы приложения будет генерироваться/выгружаться из БД некий набор данных, в основном в виде текста, возможно, иногда с простыми таблицами. Кроме того, крайне желательно, чтобы в тексте иногда встречались ссылки. Наверное, хорошо пошло бы что-то вроде HtmlPanel, но есть одно "но". Крайне желательно, чтобы ссылками открывались обычные виндовые окна этого же приложения.

Не знаю, понятно ли объяснил.

Если есть идеи - буду весьма признателен.

Возможно, хватило бы чего-то вроде фрейма, в котором можно расставлять Label'ы, открывающие соответствующие окна.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Компонент для псевдобраузера

Сообщение olegy123 » 18.03.2020 01:25:37

Таблица со ссылками?
Берешь обычную таблицу(DBGrid), обрабатываешь клик(OnCellClick) или/и двойной-клик(OnDblClick) по ячейке. где по данным открываешь данный URL.
Сами данные могут быть представлены как названиями, прямыми ссылками или даже хэштегами.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Компонент для псевдобраузера

Сообщение Снег Север » 18.03.2020 09:25:05

Unit: Lazarus lclintf

function OpenURL(AURL: String): Boolean;
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Компонент для псевдобраузера

Сообщение wwswowsogon » 18.03.2020 20:37:06

Снег Север писал(а):Unit: Lazarus lclintf

function OpenURL(AURL: String): Boolean;


Если я правильно понимаю, эта штука открывает web-страницу по hhtp. У меня несколько иная задача: нужно, чтобы по ссылке открывался не URL, а окно моей же программы, типа

Код: Выделить всё
Form1.Show;


olegy123 писал(а):Таблица со ссылками?
Берешь обычную таблицу(DBGrid), обрабатываешь клик(OnCellClick) или/и двойной-клик(OnDblClick) по ячейке. где по данным открываешь данный URL.
Сами данные могут быть представлены как названиями, прямыми ссылками или даже хэштегами.


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

Вообще, то, что должно получиться в итоге, очень похоже на простейшую HTML-страницу, мб даже без таблиц стилей, но - нужны открывающиеся по ссылкам окна.

Не сочтите за наркоманию :)

P. S. Нечто очень похожее есть в меню Lazarus'a - О проекте Lazarus - Благодарности, но там, подозреваю, просто движение по таймеру нескольких Label'ов вверх. А нам нужно, чтобы это все можно было скроллить туда-сюда, и желательно иметь возможность копировать выделенный фрагмент текста.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Компонент для псевдобраузера

Сообщение Снег Север » 19.03.2020 07:50:36

wwswowsogon писал(а):нужно, чтобы по ссылке открывался не URL, а окно моей же программы

Посмотрите тогда на RichView компонент - https://wiki.freepascal.org/RichView
Вроде, там можно делать свою обработку гипертекста.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Компонент для псевдобраузера

Сообщение alexs » 19.03.2020 14:46:36

Если вёрстка не сложная - можно ipHTMLPanel - готовые html-ки нормально отображаются.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Компонент для псевдобраузера

Сообщение olegy123 » 19.03.2020 15:31:57

wwswowsogon писал(а):Вообще, то, что должно получиться в итоге, очень похоже на простейшую HTML-страницу, мб даже без таблиц стилей, но - нужны открывающиеся по ссылкам окна.

Снег Север верно глаголит о RichView, в основе имеет RichText формат (RTF ), но это сторонний компонент со своими механизмами в работе, он ориентирован скорее на HTML.
Есть RichMemo - стандартный windows RTF подобный WordPad

еще можно пробовать в графике SVG AggPas если скорость не важна - самый хороший вариант.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Компонент для псевдобраузера

Сообщение wofs » 20.03.2020 22:39:59

wwswowsogon писал(а):В процессе работы приложения будет генерироваться/выгружаться из БД некий набор данных, в основном в виде текста, возможно, иногда с простыми таблицами. Кроме того, крайне желательно, чтобы в тексте иногда встречались ссылки. Наверное, хорошо пошло бы что-то вроде HtmlPanel, но есть одно "но". Крайне желательно, чтобы ссылками открывались обычные виндовые окна этого же приложения.

В одной из утилит использовал: https://github.com/BerndGabriel/HtmlViewer.git
Умеет таблички, css, и много чего еще. Страницы я загружаю fphttpclient, обрабатываю и скармливаю результат ей в виде html+css.
Можно повесить обработку кликов на событие onHotSpotClick.
wwswowsogon писал(а):Вообще, то, что должно получиться в итоге, очень похоже на простейшую HTML-страницу, мб даже без таблиц стилей, но - нужны открывающиеся по ссылкам окна.

Под вашу задачу подойдет идеально:
    формируете ссылки на странице,
    по событию onHotSpotClick обрабатываете и открываете что угодно, хоть окна, хоть страницы.
Пример использования:
2020-03-20 22-36-48 Скриншот экрана.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Компонент для псевдобраузера

Сообщение wwswowsogon » 30.03.2020 22:01:35

wofs, да, выглядит шикарно! Возьму на заметку.

Пока решил остановиться на ScrollBox'e с создаваемыми внутри него динамически Label'ами и, при необходимости, таблицами. Несколько настораживает, что он очень медленно прокручивается мышью. Если я правильно понял, за скорость прокрутки отвечает параметр VertScrollBar -> Increment, но почему-то изменение его не дает никакой реакции по скорости прокрутки. И ещё проблемка - копирование текста изнутри Box'a в буфер обмена. Думаю, запилить печатную форму из него, которая будет выгружаться в HTML.

И всё же подумаю об HTMLViewer.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Компонент для псевдобраузера

Сообщение Sharfik » 30.03.2020 23:48:42

wwswowsogon писал(а):wofs, да, выглядит шикарно! Возьму на заметку.

Пока решил остановиться на ScrollBox'e с создаваемыми внутри него динамически Label'ами и, при необходимости, таблицами. Несколько настораживает, что он очень медленно прокручивается мышью. Если я правильно понял, за скорость прокрутки отвечает параметр VertScrollBar -> Increment, но почему-то изменение его не дает никакой реакции по скорости прокрутки. И ещё проблемка - копирование текста изнутри Box'a в буфер обмена. Думаю, запилить печатную форму из него, которая будет выгружаться в HTML.

И всё же подумаю об HTMLViewer.

Scrolbox это трата времени на костыли. Или ipHTMLPanel или HTMLViewer или какой нибудь репортер для БД, чтобы сразу печатать. У ipHTMLPanel только один недостаток - понимает простейший HTML.

Код: Выделить всё

procedure TFHelp.IpHtmlPanel1HotClick(Sender: TObject);
var
  NodeA : TIpHtmlNodeA;
  NewFilename : String;
begin
  if IpHtmlPanel1.HotNode is TIpHtmlNodeA then
  begin
      NodeA := TIpHtmlNodeA(IpHtmlPanel1.HotNode);
      NewFilename := NodeA.HRef;
      if UTF8Pos(ASSI_CMDPREF,NewFilename,1)=1 then
      begin
           UTF8Delete(NewFilename,1,UTF8Length(ASSI_CMDPREF));
           ThisApplication.Command(NewFilename);
         end
      else begin
              OpenBrowser(NewFilename);
         end;
   end;
end;
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Компонент для псевдобраузера

Сообщение DYUMON » 31.03.2020 06:57:09

А чем мешает htmlview ? генеришь страничку , в hrev пихаешь какие то коды для вызова соответствующих форм, в событие onclick обрабатываешь.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: Компонент для псевдобраузера

Сообщение wwswowsogon » 31.03.2020 10:19:42

Sharfik писал(а):Scrolbox это трата времени на костыли.


Верю мнению профессионалов. :)

DYUMON писал(а):А чем мешает htmlview ?


Буду разбираться. Несколько пугает использование нестандартных компонентов, поскольку иногда вылезают самые неожиданные и труднорешаемые проблемы.
Я помню свою работу с GLScene. :)
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Компонент для псевдобраузера

Сообщение wwswowsogon » 14.05.2020 11:03:02

Всем спасибо за наводки, разобрался с HTMLViewer, прекрасная вещь, единственно что, как-то странно работает у него BorderStyle. ;) А вообще именно то, что нужно было. )
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru