Re[7]: HTMLayout text-wrap:unrestricted
От: c-smile Канада http://terrainformatica.com
Дата: 26.01.15 19:25
Оценка:
Здравствуйте, zitz, Вы писали:

Z>Здравствуйте, c-smile, Вы писали:


Z>>>Допустим для HTMLayoutClipboardCopy можно послать ему Ctrl + C — хоть это и через задний проход, но всёже лучше чем ничего

Z>>>А вот с HTMLayoutSelectionExist что делать? Я делаю кастомное меню в котором пункт IDM_COPY задисейблен если ничего не выбрано
Z>>>Плюс как мне получить HTMLayoutGetSelectedHTML? Меня не устраивает по ряду причин то что копируется в буфер по дефолту, по этому я делаю свой обработчик чтобы исправить этот тект

CS>>Вот пример behavior:htmlarea на <div class="selectable">.

CS>>Там объявлены:
CS>>

    CS>>
  1. custom menu — <menu.context #for-htmlarea>
    CS>>
  2. getSelectedText() — функция возвращает plain text из selection
    CS>>
  3. getSelectedHTML() — функция возвращает HTML из selection
    CS>>
CS>>Эти две функции можно вызывать снаружи из C++

Z>Ситуация следующая — я подгружаю внешний файл, мне нужно в нем копирование — во всем документе "body{ behavior:htmlarea; }", нужно получать выбранный текст и выбранный хтмл.

Z>В данном примере я должен div.selectable заменить на body?
Z>Если включить копирование я могу с помощью SetCss "body{ behavior:htmlarea; }", то как мне вставить <script type="text/tiscript">?
Z>Для HTMLayoutClipboardCopy слать ему Ctrl + C напрямую? WM_COPY поймет?

Рекомендую следующее:

Грузить в Sciter по умолчанию следующий документ:

<html> 
  <head>
    <style>
      html { padding:0; margin:0; }
    </style>
    <script>
      const frame = $(frame);
      // API for native code:
      function getSelectedText() {
        // assumes that body has behavior:htmlarea
        var docInFrame = frame[0];
        return docInFrame.$(body).selection.text;
      }
      function getSelectedHTML() {
        var docInFrame = frame[0];
        return docInFrame.$(body).selection.html;
      }
      ... 
    </script>
  </head>
  <body>
    <frame src="docurl" content-style="cssurl">
      loading ...
    </frame>
  </body>
</html>

Где
content-style="some.css"
это URL того css который будет применен поверх того что есть в документе, то что ты пытаешься сейчас append в master css как раз и должно быть в этом CSS.

Примерно так сделано в sciter help viewer.

Этот вот CSS: {scitersdk}/doc/styles/content.css грузится во frame для каждого документа:

<frame #content src="" src="content/preface.htm" content-style="styles/content.css"/>


См. {scitersdk}/doc/main.htm

CS>>А можно всю твою обработку содержимого selection прямо в скрипте и делать.


Z>Я понимаю что каноничное использование — это взять движок Sciter/HTMLayout и писать на нем приложения. Но я использую его не так. Для меня Sciter/HTMLayout — это то с помощью чего я могу описывать некоторые части интерфейса программы в html.

Z>У меня своё меню, там свои функции (и копирование — не центровая), у них свои обработчики, свой стиль меню + на это всё накладывается локализация через свои обертки.
Z>У меня есть пару окон которые выводят html — в одном случае я сам делаю ему html, во втором он получат внешний хтмл.
Z>На HTMLayout все работает, но бага с word-wrap и со скачущим выделением. На Sciter не работает Selection, LoadFile, печать, проблемы со сроллином и фоном таблиц, зато работает word-wrap и выделение не пляшет...

Да, "взять движок Sciter/HTMLayout и писать на нем приложения" это primary use case. H/W accelerated rendering и high-dpi handling и всё такое.
По поводу "У меня своё меню..." и всё такое — нет проблем, просто нужно соотв. API написать по типу того что я привел выше.
Т.е. грузить в Sciter некий API layer + примитивную UI обработку, а уже в нем content твой грузить.

Z>Меня еще в HTMLayout давно интересовал вопрос — почему так мало внимания уделяется API для Selection? Этоже прекрасная вещь! Банальный поиск текста приходится делать через хайлайт, а не через селект... А теперь оно вообще убрано...


В Sciter selection именно тот что должен быть и функционально полный. В HTMLayout такого нет подавно.

Просто тебе несколько нужно перестроить ментальную модель:

1. Не я определяю конкретный API, это невозможно по определению — сколько людей столько и вариантов,
2. ты себе определяешь себе API который тебе нужен.

scripting это такая же декларация как и CSS по большлму счету. Только определят способ реакции на примитивные события, а не способ рисования.

Например в script можно добавить поддержу bgcolor и вообще много чего на эту тему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.