PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » SpiderBasic » Программа как CHM-справочник


Программа как CHM-справочник

Сообщений 1 страница 30 из 39

1

На официальном форуме выложил пример, как из html-файлов сделать программу. У нас ведь микробраузер, почему бы не использовать его как просмотрщик html-файлов. И это сработало. При этом работают перекрёстные ссылки внутри кэша без указания пути. Ранее встроенный просмотрщик андроида умел открывать ссылки на рядом лежащие файлы, теперь это запрещается и просмотрщик андроида не видит ни стили, ни картинки ни перекрёстные ссылки на другие страницы. Сначала я собирал CHM и пользовался через "CHM Reader X", сейчас попробовал тоже самое как собственная программа, ведь написание html-файлов тоже затрачиваются труды.

https://i.imgur.com/wG7Buap.png

Несколько примеров использования:

PB_User дополнительная справка для PureBasic

PB.apk - PureBasic - официальная англ. справка 6.04. С англ. фейсом и даже инструкция на англ.
скриншоты для справки PureBasic: Настройки, Поиск
PBru.apk - русская справка PureBasic

AutoIt3.apk
скриншоты : Меню, Настройки, Поиск
AutoIt3ru.apk - русская справка AutoIt3

helpPECMD.apk - интерпретатор скриптов, для LiveCD.

Обновление
Для функционала "поиск по тегам" добавлен функционал автозавершения.
Шрифт программной надстройки чуть увеличен.
Сделаны иконки в меню.

Отредактировано AZJIO (19.02.2024 01:01:30)

+1

2

Решил попробовать сделать масштабирование картинок с помощью слайдера (TrackBarGadget), но не программным языком, а скриптом встроенным в страницу. Не получается. Тут ссылки на примеры.

0

3

AZJIO написал(а):

Решил попробовать сделать масштабирование картинок с помощью слайдера (TrackBarGadget), но не программным языком, а скриптом встроенным в страницу. Не получается. Тут ссылки на примеры.

Здесь на форуме и там на родном, ты написал по разному, поэтому, не совсем понятно, что на самом деле ты хочешь сделать.

Если речь идёт о стандартном масштабировании браузера смартфона (которое кстати не работает нативно в SB), то нужно в head изменить метатэг viewport, а также изменить touch-action в двух div-элементах окна, с none на auto. Тогда будет работать стандартное браузерное масштабирование.
Если же речь идёт о чём-то другом, о масштабировании ползунком или например выставлении в настройках масштаба текста или изображения, то тут конечно другой алгоритм.

Вот пример включения стандартного сенсорного масштабирования (вставить в начало своего кода):

Код:
!document.querySelector("meta[name=viewport]").setAttribute('content', 'width=device-width, initial-scale=1.0'); // Заменим метатэг viewport на масштабируемый

!window.spider_OpenWindow = new Proxy( window.spider_OpenWindow, { // будем перехватывать OpenWindow
!  apply(target, that, args) {   // тело перехвата функции
!    var wRet = target(...args); // сразу выполняем нативную функцию OpenWindow, с возвращением результата в wRet
!    // после того, как нативная функция отработала,
!    var wObj = (args[0] == -1) ? spider.window.objects.Get(wRet) : wRet; // получим объект окна. Зависит от первого параметра OpenWindow (константа/число либо #PB_Any)
!    // Теперь, разрешим DOM-элементам окна реагировать на сенсорные действия
!    $(wObj.element).css("touch-action", "auto"); // это основной блок окна
!    $(wObj.element.firstChild).css("touch-action", "auto"); // это шапка окна
!    return wRet; // возвращаем то, что пришло из нативной функции OpenWindow
!  }
!});

Ссылка на пример "PB_User" (открывать со смартфона и пробовать масштабировать пальцами ): PB_User Scale

P.S. работоспособность проверилась только с браузера Android. Непосредственно APK лень компилировать, но Cordova это тоже по сути веб-приложение, поэтому думаю, должно работать.

Отредактировано Webarion (21.03.2024 05:38:27)

+1

4

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

Webarion написал(а):

не совсем понятно

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

Нельзя ли объекты "touch-action", "auto" задать в css? Если у меня нестабильно работает, то может на странице должен быть какой-то конкретный объект, чтобы включить масштабирование? Если я поставил в начало кода, то теоретически это должно сработать сразу для всего вебгаджета, поэтому не пойму, как оно может то работать то не работать?

Отредактировано AZJIO (18.03.2024 12:39:48)

0

5

AZJIO написал(а):

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

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

0

6

Webarion
Исходник у них у всех одинаковый, разница только в контенте папки data. У меня сейчас идея попробовать повесить этот код на пункт меню. Если это поможет, то применить его в какой то момент при старте проги или оставить на пункте меню, чтобы принудительно помочь. Возможно придётся изучать сам код js проги, чтобы вставить его между созданием гаджета и применении страницы гаджета, или использовать функцию SetGadgetText() а перед ней применить код.

Проверил включить пунктом меню - не помогло. Вставил перед SetGadgetText(), не помогло.

Следующая идея вставить этот код в главную страницу. <- Не помогло.
Заметил после сворачивания проги причём не мгновенно развернуть, а с приличным временем, то разворачивается с поддержкой масштабирования. Совпадение уже 2 раза, а метод кода настолько редко срабатывает что скорее недождёшься пока сработает.

Отредактировано AZJIO (18.03.2024 13:34:57)

0

7

AZJIO написал(а):

Нельзя ли объекты "touch-action", "auto" задать в css?

Да, можно css встроить, тогда второй блок js-кода не нужен.

Код:
    /* CSS */
    .spiderwindow, .spiderwindow div:first-child,
    .spiderwindow-background, .spiderwindow-background div:first-child{
      touch-action: auto!important;
    }

Отредактировано Webarion (18.03.2024 13:44:02)

0

8

Webarion
там meta[name=viewport] установить атрибуты... В принципе многие мои страницы вручную созданы или по шаблону, я мог бы тупо сделать поиск и замену и вставить нужные атрибуты, то есть в

Код:
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

можно вставить

Код:
width=device-width, initial-scale=1.0

и получить

Код:
<meta content="text/html; width=device-width, initial-scale=1.0; charset=UTF-8" http-equiv="Content-Type">

Хотя возможно viewport это какой то другой метаттег
хаха, нагуглил

Код:
<meta name="viewport" content="width=device-width, initial-scale=1.0">.

вау, да там ещё инфа

user-scalable — указывает, может ли пользователь масштабировать страницу жестами. Принимает значение yes или no.

Отредактировано AZJIO (18.03.2024 14:13:11)

0

9

AZJIO написал(а):

и получить

В веб приложении, у меня это не работает. Работает только перезапись в главном HEAD viewport на:

Код:
<meta name="viewport" content="width=device-width, initial-scale=1.0">

viewport отвечает за масштабирование. А так как в SB в главном head в viewport явно указан запрет масштабирования user-scalable=no, то его и нужно перезаписать и открыть масштабирование. Думаю, бесполезно это делать с файлами из папки data, так как WebGadget, это по сути загрузка IFRAME.
Попробую сегодня позже APK собрать и потестировать.

0

10

AZJIO написал(а):

user-scalable — указывает, может ли пользователь масштабировать страницу жестами. Принимает значение yes или no.

Да, там по умолчанию ещё и на окнах запрет масштабирования - стиль touch-action: none. Это мы и пытаемся исправить.

0

11

Webarion
По сути я могу пересобрать APK с помощью APK.Tool.GUI.v3.0.2.0, там весь контент, скрипты, папка data. Можно написать скриптик, чтобы непосредственно в коде js программы поменял эти параметры. Тогда будет всё намного проще, чем пытаться кодом их ещё раз исправлять.

Пробовал в скрипте сменить none на auto, не помогло. Пробовал вместо spider_OpenWindow ловить spider_WebGadget, тоже не помогло, ещё и панель пропала. В общем любые эксперименты ни разу не выдали мне масштабирование даже случайным образом. Всё вернул как было.

При масштабировании панель может перестать отвечать на клики, если клик по координатам проверяется.

Ещё в window.css добавлял стили... тоже не работало. А во flat.css не нашёл вебгаджет.

Отредактировано AZJIO (18.03.2024 19:17:59)

0

12

Думается мне, что это какой-то глюк в Cordova. Я собрал APK, простое приложение с одной кнопкой. Тоже глючит. Причём, если кнопкой назад закрыть приложение, и пока оно ещё в памяти, снова его открыть, то масштабирование начинает работать. Если же приложение полностью выгрузить и потом снова открыть, то не работает.

0

13

Webarion написал(а):

если кнопкой назад закрыть приложение

Может закрыть окно? Сколько я не делал "закрыть приложение" оно не работало, а закрываю треугольником или круглишком и потом квадратик и крестик "Закрыть все".
Может мне добавить пункт меню "Перезапуск для масштабирования"? Только у меня окно фоном, какое событие использовал для закрыть?
BindEvent + #PB_Event_CloseWindow ?

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

Вот только не понятно нужен ли для этого твой код? Проверил нужен. Итог, твой код и некая манипуляция дают гарантированный желаемый результат.

Опять не работает, только что раз пять проверил 2 справки, всё выгрузил начал с 3-ей и перестало работать и предыдущие две тоже перестали.

Отредактировано AZJIO (18.03.2024 22:11:50)

0

14

Я сейчас тестирую, на этом простом коде:

Код:
OpenWindow(0, 100, 100, 320, 200, "Window", #PB_Window_Background )
ButtonGadget(0, 10, 200, 200, 60, "Multiline Button Multiline Button Multiline Button Multiline Button", #PB_Button_MultiLine)

; в самом конце кода
! document.querySelector("meta[name=viewport]").setAttribute('content', 'width=device-width, initial-scale=1.0');
! $('.spiderwindow, .spiderwindow div:first-child, .spiderwindow-background, .spiderwindow-background div:first-child').css("touch-action", "auto");

JavaScript заменил на равнозначный по действию. Такие же глюки. Заметил, что рабочий вариант загружается без первичной заставки. Также сравнил HTML коды рабочего и нерабочего варианта.  Они оказались идентичными.

0

15

Webarion
Тоже попробовал этот код, не понимаю зависимость, только что установленный он сработал на масштабирование. Запустил второй файл и оба перестали работать. Но я успел попробовать что после масштабирования координаты клика совпадают, то есть на какую кнопку интерфейса кликаю та и срабатывает. В этом плане если весь этот созданный интерфейс работает, было бы не плохо если бы эту фичу встроили как флажок в окне компиляции.

0

16

AZJIO написал(а):

Webarion
Тоже попробовал этот код, не понимаю зависимость, только что установленный он сработал на масштабирование. Запустил второй файл и оба перестали работать. Но я успел попробовать что после масштабирования координаты клика совпадают, то есть на какую кнопку интерфейса кликаю та и срабатывает. В этом плане если весь этот созданный интерфейс работает, было бы не плохо если бы эту фичу встроили как флажок в окне компиляции.

Когда, то работает то нет - это точно баг. И здесь непонятно, то ли Фред нашаманил, то ли в самом движке Cordova это есть. Во всяком случае, намерение отключить масштабирование у Фреда было, и он по всей видимости это сделал: Ссылка
Есть у меня рабочие идеи. В конце недели напишу.

Отредактировано Webarion (21.03.2024 05:58:32)

0

17

В общем, потестировал всякое разное. В нативе пока не работает. На родном форуме отписал, что нужно позволять включить масштабирование. Посмотрим, будет ли это в релизах.
Пока что, думаю единственный вариант, делать JavaScript обработчик. Сначала хотел по быстрому, смотрел разные PanZoom реализации, как правило всё тяжёлое и имеет много лишнего. А то, что лёгкое, не соответствует необходимым сенсорным манипуляциям и глючит.
Решил написать с нуля. Теперь уже в течении недели отпишу. Там просто нужно кропотливо тестировать математику и трансформации, расположение.

P.S. Ну и последние события тоже отвлекли.

Отредактировано Webarion (25.03.2024 17:08:13)

0

18

Webarion написал(а):

Посмотрим, будет ли это в релизах.

Всего то годик подождать.

0

19

Привет! Протестируй у себя. У меня полёт нормальный. Пробовал на SB2.40 и SB2.51, всё работает:

Код:
CloseDebugOutput()

; В начале кода
Import "cordova plugin add cordova-plugin-zoom-control-2" ; https://www.npmjs.com/package/cordova-plugin-zoom-control-2
EndImport

OpenWindow(0, 100, 100, 320, 200, "Window", #PB_Window_Background )
ButtonGadget(0, 10, 200, 200, 60, "Multiline Button Multiline Button Multiline Button Multiline Button", #PB_Button_MultiLine)

; В конце кода
!document.addEventListener('deviceready',function(){$('meta[name=viewport]').attr('content','width=device-width,initial-scale=1,user-scalable=1,maximum-scale=10');$('.spiderwindow,.spiderwindow div:first-child,.spiderwindow-background,.spiderwindow-background div:first-child').css('touch-action','auto');cordova.plugins.ZoomControl.ZoomControl('true');cordova.plugins.ZoomControl.setBuiltInZoomControls('true');cordova.plugins.ZoomControl.setDisplayZoomControls('true');cordova.plugins.ZoomControl.setUseWideViewPort('true');});

+1

20

Несжатый JavaScript:

Код:
; В конце кода
!document.addEventListener('deviceready', function(){
!  $('meta[name=viewport]').attr('content', 'width=device-width, initial-scale=1, user-scalable=1, maximum-scale=10');
!  $('.spiderwindow,.spiderwindow div:first-child,.spiderwindow-background,.spiderwindow-background div:first-child').css('touch-action','auto');
!  cordova.plugins.ZoomControl.ZoomControl('true');
!  cordova.plugins.ZoomControl.setBuiltInZoomControls('true'); 
!  cordova.plugins.ZoomControl.setDisplayZoomControls('true'); // false - отключает визуальные кнопки масштабирования
!  cordova.plugins.ZoomControl.setUseWideViewPort('true');
!});

Отредактировано Webarion (27.03.2024 09:24:50)

+1

21

Webarion
Круто, огромное спасибо.

0

22

[b]Webario
Сергей доброго! Андрей-AZJIO обсуждал с тобой эту тему, но работает только увеличение.. Уменьшение не работает (картинка не влазит в рамки устройства-ширина/высота). Может можно что-то сделать? Хотелось бы чтобы изображение при открытии было по размеру экрана устройства, после уже пальцами или движком уже можно было изменять. Ну а сейчас "картина" такая- изображение при открытии не помещается по размеру экрана устройства, а движок на уменьшение не работает. Буду благодарен если ты может найдешь выход как решить эту проблему. Заранее благодарен Александр

0

23

Александрtk написал(а):

Уменьшение не работает (картинка не влазит в рамки устройства-ширина/высота). Может можно что-то сделать? Хотелось бы чтобы изображение при открытии было по размеру экрана устройства, после уже пальцами или движком уже можно было изменять. Ну а сейчас "картина" такая- изображение при открытии не помещается по размеру экрана устройства, а движок на уменьшение не работает.

Приветствую! Движок почему-то не позволяет масштабировать страницу меньше размера, заданного стандартным. При том, что в viewport есть для этого команда minimum-scale, которая не работает.
Думаю проще поправить html и задать изображениям необходимую ширину:
Если нужна строгая ширина: <img src="myimg.jpg" width="200px"/>
Можно растянуть картинку по ширине родительского блока. Например, если у картинки родительский блок BODY, то она будет не больше ширины блока: <img src="myimg.jpg" width="100%"/>
Так же это можно сделать в CSS, задав ограничение ширины сразу для всех изображений:
img{max-width:100%}

Вот готовый тестовый пример: YanDisk

Отредактировано Webarion (04.04.2024 20:49:37)

0

24

Webarion
1. Ожидалась проблема, что при масштабировании картинка 200px будет увеличиваться без появления деталей, но вроде пересчитывается оригинал.
2. Именно 10-кратного увеличения будет недостаточно для увеличения схемы с реальным размером 5500 px. Которую даже с реального размера иногда хочется увеличить.
3. Увеличение с текстом.
Я пытался найти движок и он есть, просто всё вместе не работает, то есть над картинкой ползунок, который меняет параметры картинки width="200px" на width="500px" и т.д. и увеличивает картинку не увеличивая описание над картинкой и там можно было бы задать до 5500px или 10000px. В противном случае я предлагал сделать минискриншот размером 200px чтобы он открывал страницу с картинкой допустим 1000px как минимальный размер, на котором линии схемы не будут сливаться с фоном, то есть она начнёт быть читаемой и с этого размера начать масштабировать.
То есть по факту для текущего варианта и делать ничего не надо, кроме как знать html-код, а для предлагаемого мной варианта, ради которого можно нужно применить усилие, найти код, о котором я писал выше, и который мне не удалось скрестить, то по факту моя миссия закончилась.

У меня если не получилось то не убиваю зря время, когда нибудь придёт понимание, Не раз так было. Тем более схемы у меня лежат в отдельной папке и я их открываю в масштабируемом просмотрщике изображений. Не составляет труда свернуть одну программу и развернуть другую. В то время как наполнение справочника графикой по 3 Мб ведёт к заметному увеличению проги, десяток схем и прога с 3-х Мб превращается в 30 Мб. У меня хороший показатель цена/качество, то есть статья 2-5 кб несёт более ценную информацию. То есть размер справочника в 3Мб размером с одну схему содержит выход из всех ситуаций по аппаратуре. Поэтому у меня правильный приоритет, если не получилось ну и ладно, не ту важность она имеет. Масштабирование имело приоритет, попадались телефоны на которых мои настройки шрифта выглядели слишком мелко и каждый начинал с того что пытался масштабировать страницу на увеличение, а мне приходилось оправдываться - не работает.

Отредактировано AZJIO (05.04.2024 00:17:54)

0

25

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

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

Конечно, если бы максимум в нативном движке, можно было задать больше 10, было бы проще - быстро работает. Но к сожалению это имеет ограничения.

Для масштабирования и панорамирования только изображений, безусловно нужен JS обработчик. Как упоминал ранее, есть много разных плагинов PanZoom, но ни один из опробованных, не понравился в работе.
Мне это самому интересно, поэтому, в свободное время, может что-нибудь предложу.

0

26

AZJIO написал(а):

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

Если эти параметры есть масштабирование, не понимаю для чего ползунок? В смартфоне можно масштабировать пальцами, на PC - колесом мыши.

0

27

Неплохо себя показывает алгоритм для Hammer.js: codepen
Правда, для работы только с картинками, либа тяжеловата, 24.5 Кб. в сжатом виде. Есть недочёты. Но, по сути неплохо отвечает тому, что я вижу и понимаю сообразно вашему запросу по масштабированию картинок. ( на PC масштабирование: Shift + колесо мыши )

Отредактировано Webarion (05.04.2024 03:00:52)

0

28

Webarion написал(а):

Если эти параметры есть масштабирование, не понимаю для чего ползунок? В смартфоне можно масштабировать пальцами, на PC - колесом мыши.

Потому что я не уверен, что браузер распознает что я хочу масштабировать картинку, а не всю страницу.

Webarion написал(а):

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

Точнее нужно всё, и страницы и картинки отдельно. Просто изначально если браузер не поддерживал масштабирование, то казалось это невозможно, так как это движок не джава скрипта, а взаимодействие браузера с движком операционной системы, которая позволяет ловить жесты мыши. Поэтому если движок взаимодействия с устройством системы не связан то и джава скрипт ничего не сделает, вот так это рассматривалось. Система должна предоставить программисту события, а джава скрипт - движок внутри движка, что он может внутри колбы влиять на внешние события, ручки короки, если только колба имеет внутри себя манипулятор для управления внешними процессами.

Webarion написал(а):

Всё было бы проще, если бы была возможность лично пощупать приложение. Но, я так понимаю, это что-то закрытое, поэтому будем догадываться))

да в шапке темы 6 примеров, куда больше. Если хочется именно пощупать запретный плод )))) то вот оно ссылка1, или онлайн

0

29

AZJIO написал(а):

Если хочется именно пощупать запретный плод

Вообще не интересно копаться в любых "запретных плодах". Ермака установил и не нашёл ни одной картинки для тестов. Удалил.
Найди в сети картинку с похожим разрешением и покажи, чтобы было понятно, что тестировать. Вдруг окажется, что вам лучше всё конвертировать в SVG и работать с этим форматом.

0

30

AZJIO написал(а):

Потому что я не уверен, что браузер распознает что я хочу масштабировать картинку, а не всю страницу.

Это в JavaScript хорошо распознаётся.

AZJIO написал(а):

Точнее нужно всё, и страницы и картинки отдельно.

А зачем? Думаю, что нет необходимости увеличивать шрифт с помощью жеста щипка. Сделай так, чтобы пользователь сам задавал подходящий ему шрифт в настройках, а щипком просматривал только картинки. По сути там больше ничего не нужно.

0


Вы здесь » PureBasic - форум » SpiderBasic » Программа как CHM-справочник