Здравствуйте, zitz, Вы писали:
Z>Здравствуйте, c-smile, Вы писали:
Z>>>Допустим для HTMLayoutClipboardCopy можно послать ему Ctrl + C — хоть это и через задний проход, но всёже лучше чем ничего
Z>>>А вот с HTMLayoutSelectionExist что делать? Я делаю кастомное меню в котором пункт IDM_COPY задисейблен если ничего не выбрано
Z>>>Плюс как мне получить HTMLayoutGetSelectedHTML? Меня не устраивает по ряду причин то что копируется в буфер по дефолту, по этому я делаю свой обработчик чтобы исправить этот тект
CS>>Вот пример behavior:htmlarea на <div class="selectable">.
CS>>Там объявлены:
CS>>
CS>> custom menu — <menu.context #for-htmlarea>
CS>> getSelectedText() — функция возвращает plain text из selection
CS>> 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 и вообще много чего на эту тему.