Перейти к содержанию
  • 0
Yarpda

Как сделать управление в TWebBrowser под Win как на мобильных платформах

Вопросы

Добрый день всем!

Стоит задача сделать информационный киоск (управлений только через тачскрин) под управлением Windows. Фактически нужно на экран вывести сайт компании, но проблема в том что управление должно быть таким же как в мобильных устройствах.

Т.е. реакция на касание как Pan (прокрутка). Если же собирать проект под винду, то при нажатии на экран и движении пальца прокрутка страницы в браузере не происходит, а происходит выделение текста на станице, а нужно максимально сделать как на мобильных платформах. Посмотрел настройки TWebBrowser и на VCL и на FMX, но ничего похоже не нашел, чтобы позволило так сделать. Если у кого-то была такая практика, или хотя бы знаете как это можно реализовать (желательно наиболее просто), прошу подсказки.

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0
54 минут назад, krapotkin сказал:

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

Я даже этого не знал. ;) Но вот реализовано это именно в TWebBrowser, чтобы его можно было встроить в свою оболочку, или может быть какой-то альтернативный браузер есть с таким функционалом?

Поделиться сообщением


Ссылка на сообщение
  • 0

я бы начал исследования с подключения Chromium и вот этой статьи в качестве отправной точки

https://chromedriver.chromium.org/mobile-emulation

Поделиться сообщением


Ссылка на сообщение
  • 0

Если 10-ая винда, то можно через TEdgeBrowser

Edge поддерживает жесты, но работает это всё только на 10-ке

Поделиться сообщением


Ссылка на сообщение
  • 0

ну если так, то просто выставить пререквизиты для программы да и все )

Поделиться сообщением


Ссылка на сообщение
  • 0
 

prerequisite

/priːˈrɛkwɪzɪt/
noun
plural noun: prerequisites
  1. a thing that is required as a prior condition for something else to happen or exist.
    "sponsorship is not a prerequisite for any of our courses"
     
    системные требования по-местному

Поделиться сообщением


Ссылка на сообщение
  • 0

Будем отталкиваться от мысли что обычные браузеры из под винды тоже через Tap не пашут.
У вас стоит инфомат. Если у вас там просто текст и кликане по элементам не требуется,  а просто листают вниз текст, то можно сохранить как картинку или pdf и положить в vertdscroll. А уже потом обрабатывать самому tap и свайпы.
Но в целом, вообще, эта работа, больше по части фронтовика, т.е. фронтенд разраба. Ему ничто не мешает сделать ветку сайта с JS кодом который запрещает выделение текста на странице, а сролл делать либо по клику какой нить круглой кнопки внизу по центру странице или обработать зажатие ЛКМ, свайп вверх или вниз и отпускание. 

Однако на моей практике при работе с терминалами и инфоматами, лучше писать именно ПО, а не грузить в браузер свою страницу. А если уж горит через веб браузер, то надо саму страницу адоптировать всё таки, так как даже всё сделать как вы хотите, то тыкать портянки текста вниз и читать никто не будет. Максимум пару экранов в сторону отлистают и всё и интереса больше нет.

Но повторюсь что ПО, exe файл куда лучше пашет. Получаете с сервера разметку текста, картинки спокойно отображаете у себя. В FMX это вообще задачка три-семь дней, если речь именно о инфомате.

Поделиться сообщением


Ссылка на сообщение
  • 0

на таких постоматах есть листание экрана кнопками такой, метод и использовать.

либо использовать компоненты типа html component library либо thtmlview если vcl и там уже реализовать что надо. 

Отредактировал haword

Поделиться сообщением


Ссылка на сообщение
  • 0
В 19.03.2021 в 10:19, Yarpda сказал:

Посмотрел настройки TWebBrowser и на VCL и на FMX, но ничего похоже не нашел, чтобы позволило так сделать. Если у кого-то была такая практика, или хотя бы знаете как это можно реализовать (желательно наиболее просто), прошу подсказки.

Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi

Цитата

CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC for Windows, Linux and MacOS

 

Поделиться сообщением


Ссылка на сообщение
  • 0
16 часов назад, qz5 сказал:

Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi

Спасибо огромное!!! То, что нужно. Там даже пример есть готового проекта KioskOSRBrowser. Там все, что нужно было! ))

Поделиться сообщением


Ссылка на сообщение
  • 0
7 часов назад, krapotkin сказал:

дык я ж с самого начала сказал про chromium? ))

Про CEF не все знают, нужно было написать про него конкретно, а не отправлять по https://chromedriver.chromium.org/mobile-emulation

Поделиться сообщением


Ссылка на сообщение
  • 0
15 часов назад, krapotkin сказал:

дык я ж с самого начала сказал про chromium? ))

Просто в начале у меня была надежда, что удастся это реализовать на стандартных компонентах, поэтому сразу не стал проверять. А  когда уже убедился, что это нормально сделать на стандартных почти не реально (если не вносить изменения в код страницы и не писать 1000 строк кода), то я уже стал смотреть в сторону других предложений. В любом случае тоже спасибо! ))

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Вадим Смоленский
      В FireMonkey приходится перехватывать сообщения Windows, чтобы обеспечить корректное сворачивание и разворачивание окон. Это здесь уже обсуждалось. Я в итоге сделал у себя так:
      var TheFormIsMinimized: Boolean = False; TheFormWasMaximized: Boolean = False; function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; begin if (Msg = WM_SHOWWINDOW) and (LParam = SW_PARENTCLOSING) and (not TheFormIsMinimized) then begin TheFormIsMinimized := True; TheFormWasMaximized := (MainForm.WindowState=TWindowState.wsMaximized); SendMessage(FormToHWND(MainForm), WM_SYSCOMMAND, SC_MINIMIZE, 0); MainFormp.WindowState := TWindowState.wsMinimized; end else if (Msg = WM_SHOWWINDOW) and (LParam = SW_PARENTOPENING) and (TheFormIsMinimized) then begin TheFormIsMinimized := False; SendMessage(FormToHWND(MainForm), WM_SYSCOMMAND, SC_RESTORE, 0); if TheFormWasMaximized then begin SendMessage(FormToHWND(MainForm),WM_SYSCOMMAND,SC_MAXIMIZE,0); LookUp.WindowState:=TWindowState.wsMaximized; end else begin SendMessage(FormToHWND(MainForm),WM_SYSCOMMAND,SC_RESTORE,0); LookUp.WindowState:=TWindowState.wsNormal; end; end else Result:=CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; Это работает — но восстановленное из трея окно находится не в фокусе. Пользователь должен дополнительно щелкнуть по нему мышкой. Вставка оператора SetFocus(FormToHWND(MainForm)) непосредственно сюда же ничего не дает — равно как и операторов SendMessage(FormToHWND(MainForm),WM_ACTIVATE,WA_ACTIVE,0),   Winapi.Windows.SetActiveWindow(FormToHwnd(MainForm)) или SetForegroundWindow(FormToHWND(MainForm)). Мне приходится запускать из этого места специальный таймер — и уже в обработчике таймера, после некоторой задержки, вызывать SetFocus(FormToHWND(MainForm)). Но и это работает не всегда. Например, если окно было развернуто на весь экран, а свернуто было щелчком по кнопке «Свернуть все окна», то после его разворачивания опять фокуса нет (насколько могу судить, в этом случае не запускается таймер). Нет ли более изящного и надежного способа наладить фокус?
    • От Delpher-X
      Итак, я пробовал использовать компоненты AppTethering для передачи данных между VCL-приложением работающим под Windows и мобильным FMX-приложением и потерпел неудачу, так как выяснилось что потоки данных данные компоненты на деле не передают. И у меня возник вопрос: а нет ли каких других компонентов в современной Embarcadero Studio, которые бы позволяли передавать как строковые данные, так и файлы между приложениями? Особенно меня интересуют все же файлы. 
    • От Delpher-X
      Есть код для копирования файлов:
      procedure TForm1.Timer2Timer(Sender: TObject); var FileIndex, FileName : String; I : Integer; begin randomize; FileIndex := IntToStr(random(5000)); for I := 0 to ListBox1.Items.Count-1 do begin FileIndex := IntToStr(StrToInt(FileIndex) + 1); FileName := FileIndex + Exp; TFile.Copy(ListBox1.Items[I], FileName); end; Timer2.Enabled := False; end; Когда я его запускаю, все работает, однако постоянно выскакивает сообщение об ошибке: specified file already exists, то есть копируемый файл уже существует. То есть, программа пытается каждый файл скопировать дважды. Вопрос: почему? С чем это связано и как от этого избавиться? 
    • От Вадим Смоленский
      Отчего-то, если задать TMediaPlayer.FileName с расширением "mp4", то уже при запуске приложение валится с сообщением "Unsupported media file". Причем в секции initialization юнита FMX.Media.Win присутствует и при запуске отрабатывает такой оператор:
      TMediaCodecManager.RegisterMediaCodecClass('.mp4', SVMP4Files, TMediaType.Video, TWindowsMediaCodec);
      Запускаю под Windows. Файлы *.avi проигрываются без проблем
    • От Вадим Смоленский
      Проблема обозначена в заголовке. Подробнее: при дефолтных установках TFDConnection.ResourceOption  (включенных EscapeExpand, MacroCreate, MacroExpand, ParamCreate, ParamExpand) функция Locate возвращает False. При отключении этих параметров Locate падает с сообщением "Unrecognized token {"
      Вынужден вместо Locate использовать Filter, очень сильно проигрывая в скорости. Хотелось бы все-таки понять, в чем тут дело.
       
    • От Вадим Смоленский
      Наверное, детский вопрос задам, и все-таки. Вдруг обнаружил, что в моем проекте никакие блоки try...except не срабатывают. Видимо, дело в каких-то настройках — но в каких именно? Иду в Options => Debugger Options => Embarcadero Debuggers => Native OS Exceptions, пробую там менять установки, толку никакого. Более того — пытаюсь искусственно спровоцировать падение делением на ноль — и вообще никакого падения не происходит, деление на ноль дает ноль! Такая же примерно ерунда с попыткой устроить переполнение.
      Ткните меня в причину носом кто-нибудь, пожалуйста.
      UPD  Через два дня хаотичных экспериментов с настройками всё прочихалось, и exceptions благополучно работают. В чем было дело, так и не понял.
    • От Вадим Смоленский
      У одного из тестировщиков, под Windows, моя сборка регулярно падает с такой ошибкой:
      Cannot create rendering target for 'TCanvas2D2'
      В свое время я и сам с этим сталкивался. У себя поборол уменьшением размеров всех TBitmap ниже некоторого предела. Померили максимальный размер TBitmap на компьютере тестировщика функцией TCanvasManager.DefaultCanvas.GetAttribute(TCanvasAttribute.MaxBitmapSize), получилось 8192. На моем компьютере столько же — однако у него падает, а у меня нет. Причем падает не при отрисовке изображения, а уже потом, при каких-то случайных действиях, с отрисовкой не связанных. Всякий раз непредсказуемо. Но он заметил, что если на форму выведено больше крупных изображений, то падает быстрее.
      Как это трактовать и что с этим делать?
    • От Сергей Сергеев
      Обнаружил глюк, как исправить - не нашел, по вот этому обсуждению на Embe - похоже он с 15 года..
      https://forums.embarcadero.com/thread.jspa?threadID=116534
      Выглядит так, взял из примера WebBrowser, прописал в дизайне адрес, к примеру Яндекс,
      и запускаю на Ифоне 5 - нажимаю Гоу, при клике на любой ссылке ( например на большой надписи Яндекс в центре), вдруг откдуда не возьмись - появляется клава - английская,
       
       
       
      которая Done, ничего никуда не вводит, и не прячется от слова Никак ( с экрана)
      дальше - тапаем в поле ввода поиска, вылазит похоже еще одна, уже похоже ФМХ клава - со словом Готово, которая работает..
      переключается и по готово - прячется.
       
       
       
       
      но после того как Готово спряталась - эта ( от Сафари чтоли ) остается, по Доне не скрывается, и при кликах по ссылкам - прячется и опять вылазит..
       
      сделал то что написано в обсуждении, но это прячется только второй ( Доне)ТулБар - клавы две так и висят..
      Ничего по теме не нашел, похоже глюк старый, и возможно уже решенный..
      пс.  клавиатуры не две все таки, два тул бара, повесил на он хайд, он Шоу обработчики, происходит следующее, по Готово - прячется клава и сразу опять показывается уже без "готово" - с "доне".. она же сразу показывается при клике по ссылке..
       
    • От Вадим Смоленский
      Узнал, что в UWP API включены средства для получения уникального идентификатора компьютера. Это юнит Windows.System.Profile, класс HardwareIdentification, метод getPackageSpecificToken. Существуют ли способы обратиться к этим средствам из Delphi?
      Вообще, я привык считать, что такая идентификация компьютера в принципе невозможна, в отличие от мобильных устройств. Но прогресс, как известно, не остановить.
    • От Вадим Смоленский
      Для задач, связанных с вводом японского текста, мне нужно научиться перехватывать системное сообщение WM_IME_NOTIFY. Насколько могу судить, в FireMonkey эти вещи делаются (если вообще делаются) принципиально иначе, нежели в VCL. Конкретного ничего не нагуглил. Не поможет ли кто?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...