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

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

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

Ответить
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

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

Сообщение wwswowsogon »

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

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

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

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

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

Возможно, хватило бы чего-то вроде фрейма, в котором можно расставлять Label'ы, открывающие соответствующие окна.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

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

Сообщение olegy123 »

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

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

Сообщение Снег Север »

Unit: Lazarus lclintf

function OpenURL(AURL: String): Boolean;
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

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

Сообщение wwswowsogon »

Снег Север писал(а):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'ов вверх. А нам нужно, чтобы это все можно было скроллить туда-сюда, и желательно иметь возможность копировать выделенный фрагмент текста.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

Сообщение Снег Север »

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

Посмотрите тогда на RichView компонент - https://wiki.freepascal.org/RichView
Вроде, там можно делать свою обработку гипертекста.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

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

Сообщение alexs »

Если вёрстка не сложная - можно ipHTMLPanel - готовые html-ки нормально отображаются.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

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

Сообщение olegy123 »

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

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

еще можно пробовать в графике SVG AggPas если скорость не важна - самый хороший вариант.
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

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

Сообщение wofs »

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

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

Под вашу задачу подойдет идеально:
    формируете ссылки на странице,
    по событию onHotSpotClick обрабатываете и открываете что угодно, хоть окна, хоть страницы.
Пример использования:
2020-03-20 22-36-48 Скриншот экрана.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

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

Сообщение wwswowsogon »

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

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

И всё же подумаю об HTMLViewer.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение Sharfik »

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;
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

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

Сообщение DYUMON »

А чем мешает htmlview ? генеришь страничку , в hrev пихаешь какие то коды для вызова соответствующих форм, в событие onclick обрабатываешь.
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

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

Сообщение wwswowsogon »

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


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

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


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

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

Сообщение wwswowsogon »

Всем спасибо за наводки, разобрался с HTMLViewer, прекрасная вещь, единственно что, как-то странно работает у него BorderStyle. ;) А вообще именно то, что нужно было. )
Ответить