Знакомлюсь со Sciter, вопросы
От: Аноним  
Дата: 26.09.11 03:05
Оценка:
Внезапно открыл для себя htmlayout/sciter, первое впечатление от возможностей очень положительные, а вот по документации не очень, или ее мало совсем, или я просто не знаю где смотреть. Так что буду непонятные места тут уточнять, если можно.

Пока все тестирую в Sciter.exe, файлы в utf-8. Релизная оболочка на Delphi, хотелось бы обойтись минимумом нативного кода (загрузчик файлов из архива, сохранение результатов, поддержка окна) и побольше запихать в скрипты, вообще всю логику желательно.

1) Почему не получаю onKey?
<html>
<head>
  <META http-equiv="Content-Type" content="text/html; charset=utf-8">

    <script type="text/tiscript">
    var MyVar=1;

    function MyFunc(i)
      {
        stdout.println("MyFunc("+i+")");
      }

    $(#mydiv).onClick=::MyFunc(MyVar++);
    $(#mydiv).onKey=::MyFunc(MyVar--);
  </script>

</head>
<body>
  <div #mydiv>content</div>
</body>
</html>


2) Можно ли просто как-то так написать? Или все обработчики устанавливаются только в <script> блоке?
  <div #mydiv onClick="MyFunc(MyVar++)">content</div>


3) Как установить/прочитать свой атрибут элементу? Что-то вроде
<script type="text/tiscript">
  stdout.println($(#mydiv).myattrib);
</script>
...
<div #mydiv myattrib="something"></div>


4) Сейчас не сильно припекает, но на будущее. Хочу в конечном варианте сделать фиксированный размер окна 800x600 например и встроить возможность переключения в полноэкранный режим (возможно уже не 800x600, а 1024x600, в зависимости от aspect ratio десктопа) через DirectDraw, флипы делать не буду, только primary. Могут ли проблемы какие вылезти? Основной html как-то так набросал
<html>
<head>
  <META http-equiv="Content-Type" content="text/html; charset=utf-8">

  <style>
    * {
        margin: 0;
        padding: 0;
      }
    body {
        background-color: #000;
        horizontal-align: center;
        vertical-align: middle;
      }
    #screen {
        width: 640px;
        height: 480px;
        overflow: hidden;
      }
  </style>

</head>
<body>
  <iframe #screen src="content.html">
</body>
</html>

Глупый вопрос, но как убрать скроллы с iframe, если страница контента больше, overflow: hidden не помогает? Или это уже нужно контент менять, в body поставить overflow:hidden?
Re: Знакомлюсь со Sciter, вопросы
От: c-smile Канада http://terrainformatica.com
Дата: 26.09.11 05:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пока все тестирую в Sciter.exe, файлы в utf-8. Релизная оболочка на Delphi, хотелось бы обойтись минимумом нативного кода (загрузчик файлов из архива, сохранение результатов, поддержка окна) и побольше запихать в скрипты, вообще всю логику желательно.


Кстати sciter умеет грузить stuff из zip архивов.

Если написать так:
view.load(".../something.zip");

то загрузится zip и будет сделана попытка загрузить один из этих файлов:
"index.htm", "index.html", "main.htm", "main.html" из его корня.

Или явно так
  view.load(".../something.zip#my.htm");


А>1) Почему не получаю onKey?


Потому что твой элемент не focusable ни разу. Он не получает фокус соотв. key events ему не диспатчятся.
Для того чтобы элемент был focusable у него должен быть описан или атрибут tabindex или метод onFocus.

Про назначение обработчиков событий ...

Самый кошерный способ это написать свой behavior:

class MyWidget: Behavior {
  function onFocus(evt) { return false; }
  function onKey(evt) { ... }
}


Назначить этот behavior элементу можно

a) либо через CSS:

widget.my {
  prototype: MyWidget; // или
  prototype: MyWidget url(my-widgets.tis); // с загрузкой файла скрипта
}


либо б) из кода:

$(widget.my).prototype = MyWidget;


А>2) Можно ли просто как-то так написать? Или все обработчики устанавливаются только в <script> блоке?

А>
А>  <div #mydiv onClick="MyFunc(MyVar++)">content</div>
А>


By default — нет. Но ты можешь себе нарисовать вот такое:


<html>
  <head>
    <script type="text/tiscript">
    
      function alert(msg) { view.msgbox(#alert,msg); } //view.msgbox(#alert,msg);
    
      self.onControlEvent = function(evt) 
      {
        if( evt.type == Event.BUTTON_CLICK )
        {
          var aOnClick = evt.target.attributes["onclick"];
          return aOnClick && evt.target.eval(aOnClick);
        }
      }
    </script>
  </head>
<body>
  <button onclick='alert(this.text + " world!")'>Hello</button>
  <button onclick='alert(this.text + " world!")'>Hi</button>
</body>
</html>


Обработчик self.onControlEvent будет обрабатывать все необработанные clicks и проверять/исполнять @onclick

А>3) Как установить/прочитать свой атрибут элементу? Что-то вроде

А>
А><script type="text/tiscript">
А>  stdout.println($(#mydiv).myattrib);
А></script>
А>...
А><div #mydiv myattrib="something"></div>
А>


Читаем одним из этих способов:
var a = elem.attributes["attr"];
var a = elem.@["attr"];
var a = elem.attributes#attr;
var a = elem.@#attr;


Пишем соотв.:

elem.attributes["attr"] = "val";
elem.@["attr"] = "val";
elem.attributes#attr = "val";
elem.@#attr = "val";



А>4) Сейчас не сильно припекает, но на будущее. Хочу в конечном варианте сделать фиксированный размер окна 800x600 например и встроить возможность переключения в полноэкранный режим (возможно уже не 800x600, а 1024x600, в зависимости от aspect ratio десктопа) через DirectDraw, флипы делать не буду, только primary. Могут ли проблемы какие вылезти? Основной html как-то так набросал


За стили своего окна Sciter сам по себе не отвечает. Приложение создает окно само.
Соотв. стили окна типа resizeable дело сугубо твое.

Спросить размеры при загруженном фасаде (html документ) можно используя:

EXTERN_C UINT SCAPI     SciterGetMinWidth(HWND hWndSciter);
EXTERN_C UINT SCAPI     SciterGetMinHeight(HWND hWndSciter, UINT width);


При этом требуемые размеры задаются так (у документа-фасада):

html 
{
      width: 640px;
      height: 480px;
      overflow: hidden;
}


А>Глупый вопрос, но как убрать скроллы с iframe, если страница контента больше, overflow: hidden не помогает? Или это уже нужно контент менять, в body поставить overflow:hidden?


Не ясно зачем там iframe. (Кстати лучше иcпользовать <frame> ...) Но это так...

У тебя scrollbars на самом деле появляются не на frame а на html node основного документа (facade doc).
См. стиль выше за для как их убрать.

Кстати рекомендую задавать размеры в dip units (device independent pixels):

html 
{
      width: 640dip;
      height: 480dip;
      overflow: hidden;
}


В этом случае на 120dpi размеры будут расчитываться соответсвенно.
Re[2]: Знакомлюсь со Sciter, вопросы
От: Аноним  
Дата: 26.09.11 06:26
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Кстати sciter умеет грузить stuff из zip архивов.


Да, возможность хорошая, узелок на память сделал. Просто именно в том что я делаю есть пожелание добавлять патчи, плюс возможность хоть какой-то защиты данных от совсем уж дурака, ну хотя бы пароль на архив, если о zip'е говорить. Пока я у себя так сделал, есть единая функция LoadFile, есть функции CreateLoader, которые создают загрузчики (файлы на диске, файлы в архиве на диске, файлы в архиве в ресурсах exe) и ставят их в очередь. Когда программе нужен файл, она дергает LoadFile, та пробегает по загрузчикам, и отдает первый соответствующий. В такой схеме я могу указать базовый архив и несколько архивов-патчей, а в режиме разработки просто на папку с данными. Я не разбирался особо, но так понимаю что zip в sciter зашит глубоко и намертво, то есть сделать такую схему загрузчиков не получиться. Или все не так? Если бы была такая встроенная система очереди загрузчиков, с поддержкой zip, то было бы вообще здорово. Там и кода-то три-четыре сотни строк, может сделаете как-нибудь? Очень удобная штука, на самом деле, гибко и прозрачно.

CS>то загрузится zip и будет сделана попытка загрузить один из этих файлов:

CS>"index.htm", "index.html", "main.htm", "main.html" из его корня.

Этого не знал, спасибо за подсказку.

CS>Самый кошерный способ это написать свой behavior:


Получилось, спасибо.

CS>By default — нет. Но ты можешь себе нарисовать вот такое:


Тут я, наверное, еще по-браузерному мыслю. Нужно мне просто подстроиться под sciter, всяко условия и особенности сред разные.

CS>За стили своего окна Sciter сам по себе не отвечает. Приложение создает окно само.

CS>Соотв. стили окна типа resizeable дело сугубо твое.

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

CS>Не ясно зачем там iframe. (Кстати лучше иcпользовать <frame> ...) Но это так...


Не знал что можно frame просто так положить. Отметил.

CS>В этом случае на 120dpi размеры будут расчитываться соответсвенно.


Тут опять специфика. Проект — игрушка, с возможным заходом в презентации/обучалки, или наоборот, пока не до конца ясно. Предполагается фиксированная графика, то есть размеры основных элементов худо-бедно известны. Одной из причин использования DirectDraw и есть желание развернуть контент на весь экран, но без особых изменений видимой структуры документа. Кстати, можно ли как-то в Sciter использовать transform: scale или что-то подобное? Одной строчкой стиля и onResize на body хочется растягивать #screen до размеров окна, но с сохранением aspect ratio, и желательно с красивой интерполяцией
Тут, кстати, возникает вопрос о шрифтах, есть ли возможность засунуть если не битмап шрифты, это вообще здорово было бы, хотя не знаю насколько тяжело в плане производительности будет для Sciter рендерить простыню текста из argb глифов, то что-то вроде cufon'а? Хочется иметь гарантированный стиль отображения текста. Желательно так вообще на любой машине, с разными настройками DPI, разными темами, разными шрифтами, иметь максимально одинаковый результат рендера. И если и менять шрифт на больший/меньший, то только внутренними средствами. Хотя это все скорее пожелание, чем требование проекта.
Re[3]: Знакомлюсь со Sciter, вопросы
От: c-smile Канада http://terrainformatica.com
Дата: 26.09.11 06:45
Оценка:
Здравствуйте, Аноним, Вы писали:

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


CS>>Кстати sciter умеет грузить stuff из zip архивов.


А>Да, возможность хорошая, узелок на память сделал. Просто именно в том что я делаю есть пожелание добавлять патчи, плюс возможность хоть какой-то защиты данных от совсем уж дурака, ну хотя бы пароль на архив, если о zip'е говорить. Пока я у себя так сделал, есть единая функция LoadFile, есть функции CreateLoader, которые создают загрузчики (файлы на диске, файлы в архиве на диске, файлы в архиве в ресурсах exe) и ставят их в очередь. Когда программе нужен файл, она дергает LoadFile, та пробегает по загрузчикам, и отдает первый соответствующий. В такой схеме я могу указать базовый архив и несколько архивов-патчей, а в режиме разработки просто на папку с данными. Я не разбирался особо, но так понимаю что zip в sciter зашит глубоко и намертво, то есть сделать такую схему загрузчиков не получиться. Или все не так? Если бы была такая встроенная система очереди загрузчиков, с поддержкой zip, то было бы вообще здорово. Там и кода-то три-четыре сотни строк, может сделаете как-нибудь? Очень удобная штука, на самом деле, гибко и прозрачно.


zip вообще-то и так не сильно тривиален (вменямая адресация в URL имеется ввиду).
Поэтому думается придется тебе свой обработчик SC_LOAD_DATA писать.

CS>>By default — нет. Но ты можешь себе нарисовать вот такое:


А>Тут я, наверное, еще по-браузерному мыслю. Нужно мне просто подстроиться под sciter, всяко условия и особенности сред разные.


Да как-то особо никому не нужна была эта в общем-то спорная фича. Посчитал что если можно навесить со стороны то тому кто надо — сделает.

CS>>За стили своего окна Sciter сам по себе не отвечает. Приложение создает окно само.

CS>>Соотв. стили окна типа resizeable дело сугубо твое.

А>Вот чем Sciter из меня скупую мужскую слезу выдавил, так это вменяемой встраиваемостью. Безо всяких безумных прослоек с сотнями интерфейсов, просто и ясно.


Хотелось бы еще проще на самом деле. Ибо я сам в свое время наелся всяких вселенских принципах воплощенных в абстрактных интерфейсах.

CS>>Не ясно зачем там iframe. (Кстати лучше иcпользовать <frame> ...) Но это так...


А>Не знал что можно frame просто так положить. Отметил.


<frame> и <frameset> можно использовать как любые другие блочные элементы.
Например если нужен splitter то пишем
<frameset cols="200px,*">
<div>left</div>
<frame #right></frame>
<frameset>

CS>>В этом случае на 120dpi размеры будут расчитываться соответсвенно.


А>Тут опять специфика. Проект — игрушка, с возможным заходом в презентации/обучалки, или наоборот, пока не до конца ясно. Предполагается фиксированная графика, то есть размеры основных элементов худо-бедно известны. Одной из причин использования DirectDraw и есть желание развернуть контент на весь экран, но без особых изменений видимой структуры документа. Кстати, можно ли как-то в Sciter использовать transform: scale или что-то подобное? Одной строчкой стиля и onResize на body хочется растягивать #screen до размеров окна, но с сохранением aspect ratio, и желательно с красивой интерполяцией

А>Тут, кстати, возникает вопрос о шрифтах, есть ли возможность засунуть если не битмап шрифты, это вообще здорово было бы, хотя не знаю насколько тяжело в плане производительности будет для Sciter рендерить простыню текста из argb глифов, то что-то вроде cufon'а? Хочется иметь гарантированный стиль отображения текста. Желательно так вообще на любой машине, с разными настройками DPI, разными темами, разными шрифтами, иметь максимально одинаковый результат рендера. И если и менять шрифт на больший/меньший, то только внутренними средствами. Хотя это все скорее пожелание, чем требование проекта.

sciter v.2 на подходе. Используется Direct2D/Write — т.е. в конце концов DirectX.
transform: scale там боддерживатеся из коробки.
Можешь глянуть на preview:
http://www.terrainformatica.com/2011/04/sciter-v-2-preview-gradients/
http://www.terrainformatica.com/2011/03/sciter-v-2-technology-preview/
(ссылка на демо в документах)
Re[4]: Знакомлюсь со Sciter, вопросы
От: Аноним  
Дата: 26.09.11 07:49
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>>>Кстати sciter умеет грузить stuff из zip архивов.


CS>zip вообще-то и так не сильно тривиален (вменямая адресация в URL имеется ввиду).

CS>Поэтому думается придется тебе свой обработчик SC_LOAD_DATA писать.

Уже, только zip сам не хочу поддерживать, неудобный формат. Может тогда можно zlib сделать доступным в api? У меня свой формат архива, удобный, шустрый, но через aplib, там сжатие хуже, особенно если сравнивать с результатом 7zip/kzip. А так бы сделал работу с форматом архива и загрузчиками у себя в приложении-хосте, а проверку crc/распаковку блока памяти дергать уже из Sciter. Если есть zlib встроенный, то почему бы не воспользоваться. Или это мне странного хочется?
Вопрос опять же не принципиальный, есть велосипедные решения, есть стандартный zlib, просто не охота делать/носить то, что уже есть.

CS><frame> и <frameset> можно использовать как любые другие блочные элементы.


Это я виноват, нужно было более вдумчиво сайт читать, там это было описано, пропустил я как-то.

CS>Можешь глянуть на preview:


Не могу, winxp у меня, привык как-то, пока потребности в 7 или тем более viste не испытывал. Такой вопрос возник, xp будет поддерживаться, или там все сильно на D2D завязано? Описание звучит здорово.
Re: Знакомлюсь со Sciter, вопросы
От: Senyai Россия http://www.arseniy.net
Дата: 26.09.11 13:34
Оценка:
Вопрос. Не нашел как сделать по-другому
      var code = "self." + attr + " = " + value;
      eval(code);

В JavaScript я привык что smth.val === smth["val"], а зачем есть различия в TIScript я пока не понял.

Спасибо. И да, жду ответа на вопрос WinXP + sciter v.2
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re[2]: Знакомлюсь со Sciter, вопросы
От: c-smile Канада http://terrainformatica.com
Дата: 26.09.11 16:32
Оценка:
Здравствуйте, Senyai, Вы писали:

S>Вопрос. Не нашел как сделать по-другому

S>
S>      var code = "self." + attr + " = " + value;
S>      eval(code);
S>

S>В JavaScript я привык что smth.val === smth["val"], а зачем есть различия в TIScript я пока не понял.

В tiscript это:

   smth.val = 1;


эквивалентно этим вот:

  smth[#val] = 1;
  smth[symbol("val")] = 1;


Строка и символ это разные типы данных.

Т.е.
smth["val"] = 1;
smth.val = 2;


Создадут два разных property. С ключем символом и с ключем строкой.

S>Спасибо. И да, жду ответа на вопрос WinXP + sciter v.2


Уммм... где ждешь? И в чем вопрос?
Re[3]: Знакомлюсь со Sciter, вопросы
От: Senyai Россия http://www.arseniy.net
Дата: 26.09.11 16:35
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Уммм... где ждешь? И в чем вопрос?


Сообщение в этой теме
??> Не могу, winxp у меня, привык как-то, пока потребности в 7 или тем более viste не испытывал. Такой вопрос возник, xp будет поддерживаться, или там все сильно на D2D завязано? Описание звучит здорово.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re[5]: Знакомлюсь со Sciter, вопросы
От: Nikolay-K  
Дата: 26.09.11 18:09
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, c-smile, Вы писали:

CS>>>>Кстати sciter умеет грузить stuff из zip архивов.

А>Может тогда можно zlib сделать доступным в api?

Хотя бы общий ответ хотелось бы услышать, из расчета ближайших 2-3 месяцев. Дабы планировать, допиливать велосипед или ориентироваться на zlib через Sciter.
Re[4]: Знакомлюсь со Sciter, вопросы
От: c-smile Канада http://terrainformatica.com
Дата: 26.09.11 22:09
Оценка:
Здравствуйте, Senyai, Вы писали:

S>Сообщение в этой теме

S>??> Не могу, winxp у меня, привык как-то, пока потребности в 7 или тем более viste не испытывал. Такой вопрос возник, xp будет поддерживаться, или там все сильно на D2D завязано? Описание звучит здорово.

Direct2D существует только на WV,W7 и W8. К сожалению ничего не могу сделать в этом смысле.
Без аппаратного ускорения transform: scale | rotate | skew — дохлый номер. А уж вместе с transition так вообще.
Re[6]: Знакомлюсь со Sciter, вопросы
От: c-smile Канада http://terrainformatica.com
Дата: 26.09.11 22:16
Оценка:
Здравствуйте, Nikolay-K, Вы писали:

CS>>>>>Кстати sciter умеет грузить stuff из zip архивов.

А>>Может тогда можно zlib сделать доступным в api?

NK>Хотя бы общий ответ хотелось бы услышать, из расчета ближайших 2-3 месяцев. Дабы планировать, допиливать велосипед или ориентироваться на zlib через Sciter.


Выставить API не проблема. Проблема в его разработке и дальнейшем maintenance.
Какие функции-то нужны?

(Может взять нечто готовое типа .CAB файлов, например http://www.codeproject.com/KB/files/CABCompressExtract.aspx )
Re[7]: Знакомлюсь со Sciter, вопросы
От: Nikolay-K  
Дата: 26.09.11 23:31
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Выставить API не проблема. Проблема в его разработке и дальнейшем maintenance.


Я посмотрел что уже у меня есть, оно дешево и стабильно работает как мне надо, все потенциальные проблемы изучены, а погоня за "стандартными решениями" просто ради "стандартности"... Обойдусь. Особенно если оно будет отвлекать от разработки собственно Sciter.

CS>(Может взять нечто готовое типа .CAB файлов, например http://www.codeproject.com/KB/files/CABCompressExtract.aspx )


Мой тип файла меня вполне устраивает, меня не устраивала степень сжатия, но изыскания худо-бедно все решили. Сделаю связку 7zip(as zip)->zip2dat->software, благо все данные будут исходить из проверенных источников.

Спасибо за ответы, я честно говоря не представляю какую более качественную поддержку можно получить за деньги.
Re: Знакомлюсь со Sciter, вопросы
От: 23W http://kyselgov.pp.ua/
Дата: 01.11.11 09:02
Оценка:
И у меня вопрос о htmlayout, пока собираюсь использовать только его. Работает ли htmlayout на 32-м битмапе с поддержкой альфа-канала (т.е. вариант когда DWM эффект стекла (аэро) распространен на всю клиентскую область окна) ?
Для меня просто это критично.
Re[2]: Знакомлюсь со Sciter, вопросы
От: c-smile Канада http://terrainformatica.com
Дата: 02.11.11 06:58
Оценка:
Здравствуйте, 23W, Вы писали:

23W>И у меня вопрос о htmlayout, пока собираюсь использовать только его. Работает ли htmlayout на 32-м битмапе с поддержкой альфа-канала (т.е. вариант когда DWM эффект стекла (аэро) распространен на всю клиентскую область окна) ?

23W>Для меня просто это критично.

Глянь htmlayoutsdk/bin/w7aero.exe
Re[3]: Знакомлюсь со Sciter, вопросы
От: 23W http://kyselgov.pp.ua/
Дата: 03.11.11 16:32
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, 23W, Вы писали:


23W>>И у меня вопрос о htmlayout, пока собираюсь использовать только его. Работает ли htmlayout на 32-м битмапе с поддержкой альфа-канала (т.е. вариант когда DWM эффект стекла (аэро) распространен на всю клиентскую область окна) ?

23W>>Для меня просто это критично.

CS>Глянь htmlayoutsdk/bin/w7aero.exe

да спасибо, я это видел. Только там все "стекло" закрыто рабочим полем закладками... было бы гораздо интереснее посмотреть как идет рендеринг к примеру того же текста и png с альфа каналом на самом "стекле", а не в рабочем поле закладок. Т.е. к примеру сделать тело тега body прозрачным и показать что получается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.