Браузер в качестве View в десктопных проектах (WebUI)

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

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

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 03.08.2023 12:48:28

Alex2013 писал(а):Она совершенно не работает даже в CEF4Delphi

Как справедливо отмечают коллеги в соседних темах, не пощупав код, сложно сказать так это или не так и/или предложить какие-то альтернативы) гадание по скринам и экзешникам это та ещё задачка) было бы неплохо, если бы вы выделяли не целиком, но хотяб какие то проблемные узлы вашей системы на гитхаб или аналоге, для возможности щупать и думать на натуре о путях решения. Одна голова всегда хорошо, а с туловищем - лучше :mrgreen:

А что касается интеграции webui в приложение, то на данный момент я вижу три направления использования:
1. Headless mode - на экране только формы lazarus, браузер запускается и выполняет задачи в интересах Паскаля скрыто (аналогия - Selenium)
2. Оконный режим. Аналогия - IDE Lazarus, одно или несколько окон обычных форм и одно или несколько окон браузера, расположением, размером и т.п. можно элементарно управлять.
3. Браузерный режим - все внутри браузера, как в моем примере, Паскаль - скрытый консольный бэкэнд, который полностью управляет выводом и событиями (этот вариант - основная идея использования webui, на выходе получается кроссплатформенное решение не только по бэкэнду (Паскаль), но и по фронтэнду (html+js, сразу + Android и iOS без танцев с бубном в копилку при сохранении единой кодовой базы паскаля).

Все остальное - малореализуемо на практике и не имеет смысла обсуждать, проще взять какой-то другой компонент, которых, к сожалению, очень мало.
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 03.08.2023 13:52:38

Еще есть интересная идея VirtualUI (Превращает почти любое приложение в веб-интерфейс с минимальными затратами )
https://www.cybelesoft.com/thinfinity/v ... livedemos/
( В принципе что-то такое есть в свежих версиях лазаруса но там это как-то неуклюже сделано )

Зы
Как бы посмотреть исходник deploy2.zip ? (Если не там нет ничего секретного) Интересует сам запуск окна WebUI
Понятно что нужно написать что-то вроде
Код: Выделить всё
my_wind = webui_new_window;
    webui_show(my_wind, my_html);
// webui_show_browser(my_window, my_html, Chrome);
  webui_wait;

Но мне не html, a URL передать нужно ...
(разумеется можно сделать простенький скрипт-редирект, но как то это странновато смотрится )
Последний раз редактировалось Alex2013 03.08.2023 14:16:54, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 03.08.2023 14:10:21

Alex2013 писал(а):Еще есть интересная идея VirtualUI

Да, было дело, тоже смотрел её и механизмы реализации, когда занимался настройкой доступа через remote app, опять же не в контексте паскаля), ну во первых она ограничена платформой windows как источника распространения приложения, во вторых она коммерческая и не подойдёт для большинства проектов, ну и как вишенка на торте, по сути максимально приближенно к этой технологии на windows можно просто организовать удаленный доступ по rdp и скрыть все, кроме окна приложения с помощью технологии remoteapp, как я и сделал собственно в свое время)

Но как интересный способ вполне имеет место быть.

Добавлено спустя 24 минуты 50 секунд:
Alex2013 писал(а):Как бы посмотреть исходник deploy2.zip


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

Добавлено спустя 9 минут 25 секунд:
Alex2013 писал(а):разумеется можно сделать простенький скрипт-редирект, но как то это странновато смотрится

Именно так и делается пока) посмотрите потом в исходнике трюк с загрузчиком загрузки)
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 03.08.2023 14:51:33

Вообщем решил что нужно опробовать webui в самодельной тестовой программе возможно большая часть "простых вопросов" отпадет в процессе тестирования . :idea:
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 03.08.2023 14:56:35

Alex2013 писал(а):опробовать webui в самодельной тестовой программе

Отлично, тогда можете начать с моей ознакомительной статьи по вариантам использования
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 03.08.2023 16:20:19

Спасибо ! Но запустив тест я пока что немного разочаровался в идее WebUI ( я надеялся что это все-же что-то вроде использование OLE и т.п. ( то есть внешнее управление через штатное API браузера ) однако, похоже что это просто обычный запуск браузера с кучей параметров и "обратной ловлей событий" через встроенный сервер ( что интересно но немного не то что мне сейчас нужно ) )
Все что мне сейчас нужно это функционал современного браузера в качестве обычного контрола. (желательно без необходимости тащить собой браузерный-движок )
Зы
Кстати мне в голову пришла странная мысль : Если во встроенном в браузер скриптовом языке есть довольно продвинутые методы управления окнами то в принципе можно "удочерить окно браузера " из скрипта или хотя бы передать полученный скриптом хаббелл окна "наружу" ? Хм это мысль !
https://udn.realityripple.com/docs/Mozi ... _SetParent
Последний раз редактировалось Alex2013 03.08.2023 16:39:43, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 03.08.2023 16:38:50

Alex2013 писал(а):похоже что это просто обычный запуск браузера с кучей параметров и "обратной ловлей событий" через встроенный сервер


Всё именно так, соль взаимодействия - в пропихивании в браузер из паскаля данных, в том числе инструкций js и возврат в Паскаль событий и данных по установленным хукам. Механизм взаимодействия не локальный межпроцессный (по pid), а сетевой (через сокеты), поэтому не зависит от операционной системы, реализован с помощью websockets, что даёт возможность установки постоянного двухстороннего канала связи, а не просто запрос ответ без сохранения состояния (прощайте куки)

Добавлено спустя 49 минут 7 секунд:
Alex2013 писал(а):функционал современного браузера в качестве обычного контрола

Тогда я однозначно рекомендовал бы использовать WebView4Delphi если программа только под Винду будет и CEF4DELPHI для кроссплатформенного.
Все остальное, включая объемы движка и т.п. это от лукавого, это рабочие современные поддерживаемые механизмы, надо брать :!:
В случае webview2 движок тащить не надо (там где есть эдж, только рантайм), ну вы сами писали, для кроссплатформенного увы....но это оправданная цена.

Добавлено спустя 9 минут 44 секунды:
Но опять же, если полностью осознать концепцию вашего, допустим, лесхоза, как по сути оболочки над веб сайтами и отойти от навязанной delphi программистам модели форма -> компонент -> обработчик и перейти к современному масштабируемому мышлению паттернов проектирования приложений с обязательным разделением представления и бизнес логики, то webui идеально вписывается в эту схему, зона страха остаётся только на стороне html + css + js, как незнакомой среды, но это только так кажется...

Добавлено спустя 7 минут 53 секунды:
Я уже писал это, напишу ещё раз, по итогу, все уйдет в веб/браузеры, называйте это как хотите.
Движение в этом направлении - fresnel для lazarus, это нативная визуальная веб разработка в IDE + pas2js + webasm. Но пока это будущее, а мы с вами тут. Ищем вчерашний день :mrgreen:

Текущая рабочая production ready имитация fresnel это связка webui + qooxdoo (или webview + extjs ce или ещё что-то, сути вопроса это не меняет), где в минусах визуальная разработка форм и отсутствие паскалевских оберток для визуальных компонентов, а в плюсах то, что оно стабильно работает, поддерживается и отлично выглядит здесь и сейчас.
Есть TMS, но это коммерция...
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 03.08.2023 18:36:38

В не слишком ветхозаветные времена (вроде еще в 20-м году работал ) был еще один способ захвата браузера
Код: Выделить всё
uses
Windows, Comobj...
...
procedure TForm1.Button2Click(Sender: TObject);
var
browser: olevariant;
begin
browser := CreateOleObject('InternetExplorer.Application');
windows.setparent(browser.hwnd, panel1.handle);
browser.toolbar:=false;
browser.fullscreen:=true;
browser.Resizable:=false;
browser.visible:=true;
Browser.Navigate('http://www.lazarus.freepascal.org/');
end;

Сейчас упорно ругается в CreateOleObject .

Добавлено спустя 34 минуты 4 секунды:
Изображение
Оболом! :idea:

Добавлено спустя 3 минуты 26 секунд:
Добавил код "Для получения внятной ошибки". :wink:
Код: Выделить всё

function IsOLEObjectInstalled(Name: String): boolean;
var
  ClassID: TCLSID;
  Rez : HRESULT;
begin
  // Ищем CLSID OLE-объекта
  Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);

  if Rez = S_OK then  // Объект найден
    Result := true
  else
    Result := false;
end;

function GetOleObject(name:string):variant;
begin
  result:=null;
  if IsOLEObjectInstalled(name) then begin
     try
        result:=GetActiveOleObject(name); // пытаемся найти  запущенный объект
        exit;
     except
        result := CreateOleObject(name);
     end;
  end else begin
    raise Exception.Create('Интерфейс '+name+' не обнаружен в системе');
    Abort;
  end;
end;

Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 03.08.2023 20:41:21

Alex2013 писал(а):Оболом


Видимо из-за этого вот
https://techcommunity.microsoft.com/t5/ ... le-id/3331
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 04.08.2023 04:28:47

delphius писал(а):Все остальное, включая объемы движка и т.п. это от лукавого, это рабочие современные поддерживаемые механизмы, надо брать
В случае webview2 движок тащить не надо (там где есть эдж, только рантайм), ну вы сами писали, для кроссплатформенного увы....но это оправданная цена.


Не совсем... Лучше всего использовать "браузер напрямую" ( что собственно WebUi и делает ) (Браузеры есть всюду и они хочешь не хочешь обновляются в первую очередь )

delphius писал(а):Но опять же, если полностью осознать концепцию вашего, допустим, лесхоза, как по сути оболочки над веб сайтами и отойти от навязанной delphi программистам модели форма -> компонент -> обработчик и перейти к современному масштабируемому мышлению паттернов проектирования приложений с обязательным разделением представления и бизнес логики, то webui идеально вписывается в эту схему, зона страха остаётся только на стороне html + css + js, как незнакомой среды, но это только так кажется...


"Лесхоз" просто отработка идеи ( у меня изначально было две версии "с браузером" и "без браузера" пока победила "без браузера")
Как не смешно но для большинства задач работы с веб-данными браузер не нужен и даже "противопоказан" .
Проблема только в интерфейсе, а он как раз нужен далеко невсегда . Раньше я тоже считал что веб-интрефйс это такая "панацея" но его суть "терминальном доступе " к реальному ПО . Да это может быть полезно "но единое пространство состояний" по сути банально размазывает "бизнес логику" приложения "по облаку" .

К примеру во что я сейчас уперся? А уперся я, в то, что красивый веб-интерфейс банально не справляется с банальным функционалом удобного пуска пакета ( и еще с много чем еще , но пока исправляю хотя бы это ) при работе в локальном режиме, а красивая веб-оболочка летит к чертям из за проблем с запуском в окне.

Разумеется это преодолимо, однако, проблемы возникли из за чрезмерного упора в веб-интерфейс и системного пренебрежения удобством "консольного бекэнда" . Более то что я пытаюсь написать это оболочка запущенная поверх оболочки ( и в перспективе умеющая частично обходить веб-морду ) . Да можно убрать "слабое звено" и написать аналог "NMKD Stable Diffusion GUI" но это означает потерять доступ к множеству удобных расширений. А все почему ? Потому что народ решил плюнуть на удобства конфигурации, мониторинга и даже на скорость и потребяемые ресурсы . Да "современное железо тянет" но почти половина ресурсов идет лесом, а часть "расширенных интерфейсов" настолько причудлива в форме веб-интерфейса, что это откровенно ужасает .
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Снег Север » 04.08.2023 08:05:54

"Преимущество" консольного приложения над интерфейсным - это "преимущество" каменного топора над магазинной винтовкой. Да, топору не нужны патроны, он не отказывает от пыли, грязи, влаги, его можно изготовить и починить в любых условиях. И... всё. Достаточно одного боевого столкновнения отряда с топорами и отряда с винтовками (практика применения) и всё становится на места.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 04.08.2023 08:22:05

Alex2013 писал(а):Лучше всего использовать "браузер напрямую" ( что собственно WebUi и делает )

Тоже не совсем, он использует легковесный dll, который находит доступный браузер, запускает его, настраивает канал websocket и остальную магию межьязыкового взаимодействия) а вот такой объём минимален, поскольку само взаимодействие очень сильно ограничено, был бы полноценный доступ к бпаузерному апи из паскаля, он бы уже весил... Но это конечно не полностью тащить за собой полный движок браузера, здесь абсолютно согласен.

Добавлено спустя 12 минут 23 секунды:
Снег Север писал(а):"Преимущество" консольного приложения над интерфейсным -

Речь в данном контексте не про консольное приложение как способ взаимодействия пользователя с программой, а о разделении бизнес логики и представления (интерфейса). Современные IDE с наборами визуальных компонентов (и Lazarus в их числе) это отличный способ быстро сделать что-то визуально очень красивое и удобное, но в дальнейшем, при развитии, масштабировании и сопровождении кода, начинаются проблемы.
Разумеется, это касается не всех, но система к этому располагает by design, а отсутствие поощрения к разделению логики и представления и готовых шаблонов, типа mvvm, только усугубляет. Ну ведь удобно же в обработчике нажатия кнопки написать всю логику))) очень удобно) *сарказм*
Но это мое имхо.

Добавлено спустя 26 минут 28 секунд:
Alex2013 писал(а):Да можно убрать "слабое звено" и написать аналог "NMKD Stable Diffusion GUI"

А почему именно NMKD, а не, например,
AUTOMATIC1111 или Invoke AI CLI? :roll:
Или даже API
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение WAYFARER » 04.08.2023 10:09:10

Снег Север писал(а):"Преимущество" консольного приложения над интерфейсным - это "преимущество" каменного топора над магазинной винтовкой. Да, топору не нужны патроны, он не отказывает от пыли, грязи, влаги, его можно изготовить и починить в любых условиях. И... всё. Достаточно одного боевого столкновнения отряда с топорами и отряда с винтовками (практика применения) и всё становится на места.


Далеко не всегда. Всё зависит от решаемой задачи.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 04.08.2023 13:09:15

Снег Север писал(а):"Преимущество" консольного приложения над интерфейсным - это "преимущество" каменного топора над магазинной винтовкой. Да, топору не нужны патроны, он не отказывает от пыли, грязи, влаги, его можно изготовить и починить в любых условиях. И... всё. Достаточно одного боевого столкновения отряда с топорами и отряда с винтовками (практика применения) и всё становится на места.

Совершенно верно, тем более что это даже не консольная программа, а куча батников слепленная непойми как и зачем . Как там ? "На верхних палубах играет оркестр .... " (с)Нау "Титаник"
delphius писал(а):А почему именно NMKD, а не, например,
AUTOMATIC1111 или Invoke AI CLI?
Или даже API

1 NMKD это насколько я понял нормальное GUI над API.
2 Invoke AI "сдыхает" на моем железе (16 гигов ОЗУ 4 гига видео) и имеет проблемы с версией питона .
3 API штука хорошая но там нет наработанных расширений которые придется писать с нуля или адаптировать .
4 AUTOMATIC1111 не "лучший выбор" но по сути стандарт и я как раз и пытаюсь "соединить коня и трепетную лань".
(см Скрин с "рыбой" viewtopic.php?p=166359#p166359 но там просто статическая картинка загружается )
Сейчас продвинулся чуть дальше... (Но реальный веб-интерфейс AUTOMATIC1111 в той версии тоже увы не запускается )
Изображение
А вчера еще я проверил работу "автоматики 1111" в "псевдо браузере" на движке WebView2 вот там почти все (включая расширения) работает. (Впрочем это "почти" касается и обычного браузера )
Зы
В принципе утилита "оболочка для оболочки" задумываться как некий универсальный "пускатель" проектов подобных "Автоматике 1111" коих сейчас развилось "как собак нерезаных". ( возможно дальше туда будут добавлены плагины для прямой работы с API и прочими ресурсами )

Добавлено спустя 41 минуту 52 секунды:
WAYFARER писал(а):Далеко не всегда. Всё зависит от решаемой задачи.

Тут не поспоришь, однако, это касается нормальной консольной программы, а не кучи батиков запускающих другие батники запускающих слоб связную кучу скриптов на питоне которые поддерживают API веб-интерфейс и его расширения .
( Все вместе смотрится как анти-научно-фантастический ТинкерТех( Особо доставляет висящая в отдельном окне и "живущая своей жизнью" консоль), разумеется моя "оболочка для оболочки" это еще один уровень "патентованного психоза"(тм) но она хоть "со стороны" будет смотреться как обычная программа класса "запустил - работает " . :idea: )

Добавлено спустя 15 минут 58 секунд:
Кстати кто знает как к "захваченной консоле" можно прикрутить нормальный консольный ввод данных ?
(В этом проекте это не очень надо (а останавливать "дерево процессов" я умею и так ) но чисто "шоб було" )

Добавлено спустя 6 часов 57 минут 34 секунды:
WebView2 прикрутил ... ( Пакет WebView4Delphi писали определенно довольно мягко говоря "странные люди" похоже думающие что никто ничего кроме их примеров собирать с его помощью не будет )
Изображение
Сейчас буду тестить непосредственно Автоматику 1111

Добавлено спустя 2 часа 3 минуты 2 секунды:
Вроде работает!
Изображение
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 07.08.2023 23:40:15

Alex2013 писал(а):Как бы посмотреть исходник deploy2.zip ? (Если не там нет ничего секретного) Интересует сам запуск окна WebUI

Выложил полный исходник примера
delphius
постоялец
 
Сообщения: 129
Зарегистрирован: 18.03.2020 13:40:11

Пред.След.

Вернуться в Сторонние средства

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

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

Рейтинг@Mail.ru