Компонент для псевдобраузера
Модератор: Модераторы
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Компонент для псевдобраузера
Всем доброго времени суток!
Подскажите, пожалуйста, какой компонент можно/лучше использовать для следующей довольно тривиальной задачи.
В процессе работы приложения будет генерироваться/выгружаться из БД некий набор данных, в основном в виде текста, возможно, иногда с простыми таблицами. Кроме того, крайне желательно, чтобы в тексте иногда встречались ссылки. Наверное, хорошо пошло бы что-то вроде HtmlPanel, но есть одно "но". Крайне желательно, чтобы ссылками открывались обычные виндовые окна этого же приложения.
Не знаю, понятно ли объяснил.
Если есть идеи - буду весьма признателен.
Возможно, хватило бы чего-то вроде фрейма, в котором можно расставлять Label'ы, открывающие соответствующие окна.
Подскажите, пожалуйста, какой компонент можно/лучше использовать для следующей довольно тривиальной задачи.
В процессе работы приложения будет генерироваться/выгружаться из БД некий набор данных, в основном в виде текста, возможно, иногда с простыми таблицами. Кроме того, крайне желательно, чтобы в тексте иногда встречались ссылки. Наверное, хорошо пошло бы что-то вроде HtmlPanel, но есть одно "но". Крайне желательно, чтобы ссылками открывались обычные виндовые окна этого же приложения.
Не знаю, понятно ли объяснил.
Если есть идеи - буду весьма признателен.
Возможно, хватило бы чего-то вроде фрейма, в котором можно расставлять Label'ы, открывающие соответствующие окна.
Re: Компонент для псевдобраузера
Таблица со ссылками?
Берешь обычную таблицу(DBGrid), обрабатываешь клик(OnCellClick) или/и двойной-клик(OnDblClick) по ячейке. где по данным открываешь данный URL.
Сами данные могут быть представлены как названиями, прямыми ссылками или даже хэштегами.
Берешь обычную таблицу(DBGrid), обрабатываешь клик(OnCellClick) или/и двойной-клик(OnDblClick) по ячейке. где по данным открываешь данный URL.
Сами данные могут быть представлены как названиями, прямыми ссылками или даже хэштегами.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Re: Компонент для псевдобраузера
Unit: Lazarus lclintf
function OpenURL(AURL: String): Boolean;
function OpenURL(AURL: String): Boolean;
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Re: Компонент для псевдобраузера
Снег Север писал(а):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: Компонент для псевдобраузера
Если вёрстка не сложная - можно ipHTMLPanel - готовые html-ки нормально отображаются.
Re: Компонент для псевдобраузера
wwswowsogon писал(а):Вообще, то, что должно получиться в итоге, очень похоже на простейшую HTML-страницу, мб даже без таблиц стилей, но - нужны открывающиеся по ссылкам окна.
Снег Север верно глаголит о RichView, в основе имеет RichText формат (RTF ), но это сторонний компонент со своими механизмами в работе, он ориентирован скорее на HTML.
Есть RichMemo - стандартный windows RTF подобный WordPad
еще можно пробовать в графике SVG AggPas если скорость не важна - самый хороший вариант.
- wofs
- постоялец
- Сообщения: 379
- Зарегистрирован: 05.10.2009 10:16:55
- Откуда: Астрахань
- Контактная информация:
Re: Компонент для псевдобраузера
wwswowsogon писал(а):В процессе работы приложения будет генерироваться/выгружаться из БД некий набор данных, в основном в виде текста, возможно, иногда с простыми таблицами. Кроме того, крайне желательно, чтобы в тексте иногда встречались ссылки. Наверное, хорошо пошло бы что-то вроде HtmlPanel, но есть одно "но". Крайне желательно, чтобы ссылками открывались обычные виндовые окна этого же приложения.
В одной из утилит использовал: https://github.com/BerndGabriel/HtmlViewer.git
Умеет таблички, css, и много чего еще. Страницы я загружаю fphttpclient, обрабатываю и скармливаю результат ей в виде html+css.
Можно повесить обработку кликов на событие onHotSpotClick.
wwswowsogon писал(а):Вообще, то, что должно получиться в итоге, очень похоже на простейшую HTML-страницу, мб даже без таблиц стилей, но - нужны открывающиеся по ссылкам окна.
Под вашу задачу подойдет идеально:
- формируете ссылки на странице,
по событию onHotSpotClick обрабатываете и открываете что угодно, хоть окна, хоть страницы.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Re: Компонент для псевдобраузера
wofs, да, выглядит шикарно! Возьму на заметку.
Пока решил остановиться на ScrollBox'e с создаваемыми внутри него динамически Label'ами и, при необходимости, таблицами. Несколько настораживает, что он очень медленно прокручивается мышью. Если я правильно понял, за скорость прокрутки отвечает параметр VertScrollBar -> Increment, но почему-то изменение его не дает никакой реакции по скорости прокрутки. И ещё проблемка - копирование текста изнутри Box'a в буфер обмена. Думаю, запилить печатную форму из него, которая будет выгружаться в HTML.
И всё же подумаю об HTMLViewer.
Пока решил остановиться на ScrollBox'e с создаваемыми внутри него динамически Label'ами и, при необходимости, таблицами. Несколько настораживает, что он очень медленно прокручивается мышью. Если я правильно понял, за скорость прокрутки отвечает параметр VertScrollBar -> Increment, но почему-то изменение его не дает никакой реакции по скорости прокрутки. И ещё проблемка - копирование текста изнутри Box'a в буфер обмена. Думаю, запилить печатную форму из него, которая будет выгружаться в HTML.
И всё же подумаю об HTMLViewer.
Re: Компонент для псевдобраузера
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;Re: Компонент для псевдобраузера
А чем мешает htmlview ? генеришь страничку , в hrev пихаешь какие то коды для вызова соответствующих форм, в событие onclick обрабатываешь.
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Re: Компонент для псевдобраузера
Sharfik писал(а):Scrolbox это трата времени на костыли.
Верю мнению профессионалов.
DYUMON писал(а):А чем мешает htmlview ?
Буду разбираться. Несколько пугает использование нестандартных компонентов, поскольку иногда вылезают самые неожиданные и труднорешаемые проблемы.
Я помню свою работу с GLScene.
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Re: Компонент для псевдобраузера
Всем спасибо за наводки, разобрался с HTMLViewer, прекрасная вещь, единственно что, как-то странно работает у него BorderStyle.
А вообще именно то, что нужно было. )
