Вопрос по HTMLayout к c-smile
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 23.11.06 12:31
Оценка: +1
Андрей, приветствую!

Посмотрел я HTMLayout — понравилось. Вещь, безусловно, нужная и полезная, но существует для меня одна проблема, а именно — проблема быстрого старта, что очень важно в наше время. Помнится, я под себя писал обертку к HtmEngine — не хочется проделывать еще раз подобное (я под деБилдером в основном пишу) только для того, чтобы сработаться с HTMLayout.

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

*

Допустим, создал я окно энджины, загрузил туда html. В самом html описаны всякие css-menu, кнопочки и пр. Все отображается, все чудесно.

1. Как узнать, что кликнули на кнопу? Какой-то notification придет?
2. Как поменять caption кнопы? Подозреваю, что получением ссылки на элемент, и потом отсылом какого-то сообщения. Но только подозреваю

Пока, в общем, все. Я пока знакомлюсь с SDK, просто сейчас не хватает именно quick start guide. Оно очень нужно, потому как FAQ на сайте не совсем то, что требуется для начала.

Еще раз спасибо.
... << RSDN@Home 1.1.4 beta 7 rev. 452>>

16.12.06 17:06: Перенесено модератором из 'Пользовательский интерфейс: проектирование, usability' — Odi$$ey
Re: Вопрос по HTMLayout к c-smile
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 23.11.06 12:35
Оценка: 24 (1) :)
Здравствуйте, Flamer, Вы писали:

Я дико тупая и тормозная лошадь, поэтому на первый вопрос отвечаю сам себе

F>1. Как узнать, что кликнули на кнопу? Какой-то notification придет?


http://terrainformatica.com/bb/viewtopic.php?t=424

Вот.
Re: Вопрос по HTMLayout к c-smile
От: FreshMeat Россия http://www.rsdn.org
Дата: 23.11.06 12:55
Оценка: 24 (1)
Здравствуйте, Flamer, Вы писали:

F>2. Как поменять caption кнопы? Подозреваю, что получением ссылки на элемент, и потом отсылом какого-то сообщения. Но только подозреваю


Если есть хендл (HELEMENT) кнопочки — запросто.
В составе SDK есть изящная и качественная C++ обертка над HELEMENT — класс dom::element. ( у него см. метод void set_text(const wchar_t* t) )

F>Я пока знакомлюсь с SDK, просто сейчас не хватает именно quick start guide. Оно очень нужно, потому как FAQ на сайте не совсем то, что требуется для начала.

+1
Хорошо там, где мы есть! :)
Re: Вопрос по HTMLayout к c-smile
От: Зверёк Харьковский  
Дата: 23.11.06 13:07
Оценка: 22 (1)
Здравствуйте, Flamer, Вы писали:

F>Пока, в общем, все. Я пока знакомлюсь с SDK, просто сейчас не хватает именно quick start guide. Оно очень нужно, потому как FAQ на сайте не совсем то, что требуется для начала.


Если ты набросаешь примерно вопросы-темы для quick start, то я здесь (в форуме) напишу по-русски ночью.
FAQ — це мiй ай-кью!
Re[2]: Вопрос по HTMLayout к c-smile
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 23.11.06 13:42
Оценка: 4 (1)
Здравствуйте, Зверёк Харьковский, Вы писали:

[]

ЗХ>Если ты набросаешь примерно вопросы-темы для quick start, то я здесь (в форуме) напишу по-русски ночью.


Да запросто. Вопрос, собственно, такой: есть htmlayout.dll и набор заголовочников. Все, мне больше ничего не нужно (lib, классы и пр.).

Пока интересует следующая минимальная вещь с этим набором: загрузить html с кнопкой, получить событие по клику на кнопке, поменять заголовок на кнопке из этого события.

А с созданием окна, GetProcAddress и пр. — я уж разберусь. Меня интересует именно "выкусанный из центра" пример. Чтобы без оберток пока, что поможет лучшему пониманию принципов работы с энджиной.

Я для чего все это — просто, если я еще сильнее впечатлюсь behavior'ами в HTMLayout — то чувствую, что мне придется писать компонент для деБилдера (как было в свое время с HTMEngine). А для этого надо набор функциональных вещей, одна из которых — события из UI (клики на кнопах, событие смены выделения в select и пр., вроде динамического добавления html после выбранного элемента. К слову — а такое можно сделать?).

Потому как уже давно руки чешутся перетащить нафик весь UI на WEB-alike движок. Чтобы внутри проги была только логика, а не тонны кода по отработке интерфейса.

И тут Остапа понесло (понятные вещи помечены +, непонятные — ?):

1. Загрузить dll энджины (+)
2. Создать ее окно (+)
3. Загрузить в энджину html (+)
4. Подписаться/отписаться на события от всех элементов (?)
5. Подписаться/отписаться на события от одного элемента (?)
6. Создать/описать/отказаться от/изменить behavior в уже загруженном html (?)
7. Добавить элемент в нужное место (?)
8. Удалить элемент (?)
9. Поменять рисунок — <img.src='....'> (?)
10. Сделать disable/enable элементу (?)
11. Поменять выбор у <select> (?)
12. Чекнуть/дечекнуть чекбокс (?)
13. Развернуть/свернуть/удалить/добавить узел/все узлы у treeview (?)
14. Пробежаться во всем элементам формы и получить/установить их значения (?)
15. Реализовать поведение как у заголовка окна для элемента — т.е. при зажатой на элементе мыши чтобы перетаскивание всего окна работало (для скинования) (?)
16. Простейший behavior для кнопок: 4 своих рисунка для отображения всех состояний (enabled, disabled, mouse over, normal) (?)

Пока вроде все

В случае вопросов 11 и 13 понятно, что общего решения нет, т.к. могут использоваться и стандартные контролы, и behavior, однако интересует именно вопрос отдачи нужного поведения на откуп энджине — т.е. прописан css, а из проги уже запрашиваются какие-либо действия.

Еще раз обращу внимание, что интересует именно механизм без оберток, т.е. простой вызов функций из dll. Кода я не требую, достаточно просто указания цепочки вызовов.

Думаю, такая справочная информация будет полезна не только мне.
... << RSDN@Home 1.1.4 beta 7 rev. 452>>
Re: Вопрос по HTMLayout к c-smile
От: Tom Россия http://www.RSDN.ru
Дата: 23.11.06 17:28
Оценка:
F>Еще раз спасибо.

Ребята, обьясните, чесно не понимаю зачем оно надо, когда есть WebBrowser Control?

Спасибо
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[2]: Вопрос по HTMLayout к c-smile
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 23.11.06 17:41
Оценка:
Здравствуйте, Tom, Вы писали:

[]

Tom>Ребята, обьясните, чесно не понимаю зачем оно надо, когда есть WebBrowser Control?


А ты когда-нибудь пробовал на этом чудовище строить полноценный интерфейс? Этож ужоснафик.

В отличие от WebBrowser Control HTMLayout предоставляет кучу разных вкусностей, вроде css-behaviors. Советую просто зайти на terrainformatica.com, скачать его и посмотреть примеры. Так будет сильно проще, чем объяснять, почему бензопила лучше, чем кремниевый топор

А Андрею aka c-smile — огромнейший респект за проделанную работу
... << RSDN@Home 1.1.4 beta 7 rev. 452>>
Re[3]: Вопрос по HTMLayout к c-smile
От: Denis_TST Россия www.transsys.ru
Дата: 23.11.06 19:13
Оценка: 68 (4)
Здравствуйте, Flamer, Вы писали:

Вообще, многие вопросы снимаются, если прочитать все заголовочные файлы из \include.
Там хорошие комментарии и многое становиться понятно.

F>4. Подписаться/отписаться на события от всех элементов (?)

см http://www.terrainformatica.com/htmlayout/behaviors.whtm
и функцию HTMLayoutWindowAttachEventHandler из htmlayout_dom.h

F>5. Подписаться/отписаться на события от одного элемента (?)

F>6. Создать/описать/отказаться от/изменить behavior в уже загруженном html (?)
htmlayout_dom.h:
/** Attach/Detach ElementEventProc to the element 
    See htmlayout::event_handler.
 **/
 
EXTERN_C HLDOM_RESULT HLAPI HTMLayoutAttachEventHandler( HELEMENT he, LPELEMENT_EVENT_PROC pep, LPVOID tag );
EXTERN_C HLDOM_RESULT HLAPI HTMLayoutDetachEventHandler( HELEMENT he, LPELEMENT_EVENT_PROC pep, LPVOID tag );

или определяешь у элемента стиль <div style="behavior:myTest"> и в обработчике HLN_ATTACH_BEHAVIOR
подключаешь свой BEHAVIOR — фактически это специальная callback функция которая будет обрабатывать события :
/**Element callback function for all types of events. Similar to WndProc
 * \param tag \b LPVOID, tag assigned by HTMLayoutAttachElementProc function (like GWL_USERDATA)
 * \param he \b HELEMENT, this element handle (like HWND)
 * \param evtg \b UINT, group identifier of the event, value is one of EVENT_GROUPS
 * \param prms \b LPVOID, pointer to group specific parameters structure.
 * \return TRUE if event was handled, FALSE otherwise.
 **/
typedef BOOL CALLBACK ElementEventProc(LPVOID tag, HELEMENT he, UINT evtg, LPVOID prms );



F>7. Добавить элемент в нужное место (?)

HTMLayoutInsertElement
F>8. Удалить элемент (?)
/**Delete element.
 * \param[in] he \b #HELEMENT
 * \return \b #HLDOM_RESULT
 *
 * This function removes element from the DOM tree and then deletes it.
 *
 * \warning After call to this function \c he will become invalid.
 **/
EXTERN_C HLDOM_RESULT HLAPI HTMLayoutDeleteElement(HELEMENT he);

F>9. Поменять рисунок — <img.src='....'> (?)
Поменять рисунок — это изменить заначение аттрибута (HTMLayoutSetAttributeByName)
Можно еще описать несколько разных стилей с рисунками и менять стили.
F>11. Поменять выбор у <select> (?)
HTMLayoutControlSetValue.
F>12. Чекнуть/дечекнуть чекбокс (?)
F>10. Сделать disable/enable элементу (?)
HTMLayoutSetElementState STATE_CHECKED и

EXTERN_C HLDOM_RESULT HLAPI HTMLayoutSetElementState( HELEMENT he, UINT stateBitsToSet, UINT stateBitsToClear, BOOL updateView);

enum ELEMENT_STATE_BITS 
{
    STATE_LINK     = 0x0001, // selector :link,    any element having href attribute
    STATE_HOVER    = 0x0002, // selector :hover,   element is under the cursor, mouse hover  
    STATE_ACTIVE   = 0x0004, // selector :active,  element is activated, e.g. pressed  
    STATE_FOCUS    = 0x0008, // selector :focus,   element is in focus  
    STATE_VISITED  = 0x0010, // selector :visited, aux flag - not used internally now.
    STATE_CURRENT  = 0x0020, // selector :current, current item in collection, e.g. current <option> in <select>
    STATE_CHECKED  = 0x0040, // selector :checked, element is checked (or selected), e.g. check box or itme in multiselect
    STATE_DISABLED = 0x0080, // selector :disabled, element is disabled, behavior related flag.
    STATE_READONLY = 0x0100, // selector :read-only, element is read-only, behavior related flag.
    STATE_EXPANDED = 0x0200, // selector :expanded, element is in expanded state - nodes in tree view e.g. <options> in <select>
    STATE_COLLAPSED= 0x0400, // selector :collapsed, mutually exclusive with EXPANDED
    STATE_INCOMPLETE = 0x0800,      // selector :incomplete, element has images (back/fore/bullet) requested but not delivered.
    STATE_ANIMATING  = 0x00001000,  // selector :animating, is currently animating 
    STATE_FOCUSABLE  = 0x00002000,  // selector :focusable, shall accept focus
    STATE_ANCHOR     = 0x00004000,  // selector :anchor, first element in selection (<select miltiple>), STATE_CURRENT is the current.
    STATE_SYNTHETIC  = 0x00008000,  // selector :synthetic, synthesized DOM elements - e.g. all missed cells in tables (<td>) are getting this flag
    STATE_OWNS_POPUP = 0x00010000,  // selector :owns-popup, anchor(owner) element of visible popup. 
    STATE_TABFOCUS   = 0x00020000,  // selector :tab-focus, element got focus by tab traversal. engine set it together with :focus.
    STATE_EMPTY      = 0x00040000,  // selector :empty - element is empty. 
    STATE_BUSY       = 0x00080000,  // selector :busy, element is busy. HTMLayoutRequestElementData will set this flag if
                                    // external data was requested for the element. When data will be delivered engine will reset this flag on the element. 

    STATE_POPUP      = 0x40000000,    // this element is in popup state and presented to the user - out of flow now
    STATE_PRESSED    = 0x04000000,    // pressed - close to active but has wider life span - e.g. in MOUSE_UP it 
                                      // is still on, so behavior can check it in MOUSE_UP to discover CLICK condition.
    

};

F>14. Пробежаться во всем элементам формы и получить/установить их значения (?)
Сначала в HTMLayoutSelectElements передаешь callback который будет срабатывать на каждый элемент.
Затем HTMLayoutControlGetValue\HTMLayoutControlSetValue для нужных тегов.

/**Call specified function for every element in a DOM that meets specified 
 * CSS selectors.
 * See list of supported selectors: http://terrainformatica.com/htmlayout/selectors.whtm
 * \param[in] he \b #HELEMENT
 * \param[in] selector \b LPCSTR, comma separated list of CSS selectors, e.g.: div, #id, div[align="right"].
 * \param[in] callback \b #HTMLayoutElementCallback*, address of callback 
 * function being called on each element found.
 * \param[in] param \b LPVOID, additional parameter to be passed to callback 
 * function.
 * \return \b #HLDOM_RESULT
 *
 **/

EXTERN_C  HLDOM_RESULT HLAPI HTMLayoutSelectElements(
          HELEMENT  he, 
          LPCSTR    CSS_selectors,
          HTMLayoutElementCallback* 
                    callback, 
          LPVOID    param);

F>16. Простейший behavior для кнопок: 4 своих рисунка для отображения всех состояний (enabled, disabled, mouse over, normal) (?)
Это скорее через CSS. behavior опрделяет поведение, а за отображение отвечают стили.

Вообще, для всех этих функций есть удобные обертки ввиде классов — и тебе на билдере их использовать не проблема.
Другое дело мне — для Delphi приходится заново все обертки писать
... << RSDN@Home 1.2.0 alpha rev. 648>>
Re: Вопрос по HTMLayout к c-smile
От: c-smile Канада http://terrainformatica.com
Дата: 23.11.06 21:29
Оценка: 29 (4)
Здравствуйте, Flamer, Вы писали:

(огромное спасибо всем кто ответил)

To Flamer:

Советую також глянтуь на Sciter. Конкретно на xsciter.dll — как встраиваемый движок.

Пример: sciter-sdk\api\samples\win32\basic это простой win32 проект — как его встраивать.

xsciter.dll в принципе позволяет все то что может htmlayout но за счет наличия
встроенного скрипта может делать больше.

Например логика обработки событий в UI может быть исполнена в скриптах выдавая наружу только главные события или методы.

Скажем есть sciter окно (HWND) в который загружен документ

<html>
<script type="text/tiscript">

  var sandbox = self.select("#sandbox"); // get element by CSS selector.
  // this function will be called from code of application and will 
  // return value to the application
  function showSomething(message)
  {
    sandbox.html = message;
    sandbox.update();
    return "yep!";
  }
</script>

<body>
  <div id="sandbox"></div>
</body>
</html>


Методы описанные в этом документе вызываемы снаружи c помощью простой функции SciterCall:
С++:
  json::value argv(L"Hello <b>Sciter</b>!"); // вектор аргументов (один элемент здесь)
  json::value ret; // возвращаемое значение.

  SciterCall(hWndOfTheSciter,"showSomething",1,&arg,&ret);


В данном случае после возврата из SciterCall в ret будет лежать строка "yep!";

В принципе достаточно легко.

Приложение также может добавлять свои native классы в namespace скрипта (уже есть в TIScript и будет в след. билде Sciter) и также получать события сгенерированные в скриптовом коде — view.raiseEvent(...params..) (тоже в следующем билде).

Sciter имеет смысл использовать в приложениях где например требуется "кастомизация" UI и логики обработки включительно.
Re[2]: Вопрос по HTMLayout к c-smile
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 23.11.06 22:31
Оценка:
Здравствуйте, c-smile, Вы писали:

[]

CS>Советую також глянтуь на Sciter. Конкретно на xsciter.dll — как встраиваемый движок.


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

CS>Sciter имеет смысл использовать в приложениях где например требуется "кастомизация" UI


Почему кастомизация в кавычках? Давай поясняй, т.к. этот вопрос тоже интересен.

З.Ы. Слушай, ты монстр. Нет, правда — столько рульных вещей сделал. Видимо, это тот редкий случай, когда для всех в сутках 24 часа, а у тебя — как минимум 48. Я про талант, в общем Принимай проявление искреннего уважения
... << RSDN@Home 1.1.4 beta 7 rev. 452>>
Re[2]: Вопрос по HTMLayout к c-smile
От: c-smile Канада http://terrainformatica.com
Дата: 23.11.06 23:07
Оценка: 56 (5) +1
Здравствуйте, Tom, Вы писали:

F>>Еще раз спасибо.


Tom>Ребята, обьясните, чесно не понимаю зачем оно надо, когда есть WebBrowser Control?


WebBrowser — это internet browser завернутый в компонент. Его использование
оправдано в том случае если в программе нужно сделать окно для просмотра интернет.
Что достаточно редкий случай — смотреть(читать) интернет пользователю надо давать его любимым броузером.

htmlayout это в принципе иная вещь — это встраиваемое средство исполнения UI описанного как HTML/CSS.
Встраиваемость это принципиальное отличие. Приложение должно иметь возможность как сформировать
свои данные скажем картинку для <img src="myapp:diagram.bmp"> так например влезть внутрь DOM и сказать
вот этот элемент будет теперь рисоваться моей функцией Foo.

В принципе htmlayout для приложения это конструктор UI элементов (DOM elements)
1) задаваемых в основном декларативно (HTML/CSS)
2) упраляемых приложением напрямую.

Я уже приводил пример Symantec. Norton AV 2007 и Norton NIS 2007 сделаны на HTMLayout.
WebBrowser даже и не рассматривался как опция по очевидным соображениям security и пр.

Далее — вчера WebBrowser это одно (IE6) а сегодня это уже IE7 — некоторые функции перестали работать вообще.

Про встраиваемость еще:
Главная задача разработчиков WebBrowser (броузера общего назначения) это безопасность процесса просмотра Интернет.
В случае же UI твоего приложения такая модель security просто не нужна — только мешает.
Задача HTMLayout как встраиваемой сущности обеспечить возможность приложению взаимодействовать с деревом UI объектов фактически напрямую. Здесь же наличие возможности приложению определять поведение DOM объектов (вплоть до рисования оных) в своем коде.

Помимо всего прочего htmalyout имеет больше изобразительных возможностей чем WebBrowser.
Скажем вот такой вот tooltip http://www.terrainformatica.com:80/htmlayout/images/tooltip-balloon.jpg
WebBrowserу не поднять.
Re[3]: Вопрос по HTMLayout к c-smile
От: c-smile Канада http://terrainformatica.com
Дата: 24.11.06 03:36
Оценка:
Здравствуйте, Flamer, Вы писали:

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


F>[]


CS>>Советую також глянтуь на Sciter. Конкретно на xsciter.dll — как встраиваемый движок.


F>Спасибо, интересно. А лицензия на него какая? Что-то сходу не нашел. Потому как вещь очень интересная, т.к. я уже давно юзаю скриптинг на JavaScript в прилагах, но, сам понимаешь, что наличие такой вещи, как HTMLayout, обязывает переползать на нее, особенно в свете Sciter.


CS>>Sciter имеет смысл использовать в приложениях где например требуется "кастомизация" UI


F>Почему кастомизация в кавычках? Давай поясняй, т.к. этот вопрос тоже интересен.


кастомизация в кавычках это что-бы Влад не цеплялся. Нет такого слова в языке программирования RL.

F>З.Ы. Слушай, ты монстр. Нет, правда — столько рульных вещей сделал. Видимо, это тот редкий случай, когда для всех в сутках 24 часа, а у тебя — как минимум 48. Я про талант, в общем Принимай проявление искреннего уважения


Да ну фигня это (про монстра). Не сказал бы что я уж особенно как-то производителен. В общем наверное как все.
За уважение спасибо.
Re[3]: Вопрос по HTMLayout к c-smile
От: c-smile Канада http://terrainformatica.com
Дата: 24.11.06 07:27
Оценка: 52 (2)
Здравствуйте, Flamer, Вы писали:

В дополнение к тому что правильно изложил Денис:

F>1. Загрузить dll энджины (+)

F>2. Создать ее окно (+)
F>3. Загрузить в энджину html (+)
F>4. Подписаться/отписаться на события от всех элементов (?)
void attach_event_handler(HWND hwndLayout, event_handler* p_event_handler, UINT subscription = HANDLE_ALL );

F>5. Подписаться/отписаться на события от одного элемента (?)

Используется event bubbling (см. Propagation of Events здесь )
Т.е. в event_handler ты получишь все "не употребленные" события.

Второй вариант прицепиться к конкретному элементу, это у нас будет:
void attach_event_handler(HELEMENT he, event_handler* p_event_handler, UINT subscription = HANDLE_ALL )


F>6. Создать/описать/отказаться от/изменить behavior в уже загруженном html (?)


Это задача сугубо CSS. Вот здесь я расказал как можно сделать wizard — на каждом шаге у <body> свой behavior.

F>7. Добавить элемент в нужное место (?)

void dom::element::insert( const element& e, unsigned int index );
void dom::element::append( const element& e );


F>8. Удалить элемент (?)

void dom::element::detach();


F>9. Поменять рисунок — <img.src='....'> (?)

dom::element img = ...;
     img.set_attribute( "src", L"urrrrrl" );
     img.update();


Но лучше это делать через стили
img[state="1"] { foreground-image:url(1.gif); }
img[state="2"] { foreground-image:url(2.gif); }


А в коде лишь переключать состояние:
     img.set_attribute( "state", L"2" );
     img.update();


В этом случае если ты захочешь поменять стиль или картинку то код тебе трогать не придется.

F>10. Сделать disable/enable элементу (?)


 element.set_state(STATE_DISABLED, 0);  
 element.set_state(0, STATE_DISABLED);


Узнать enabled ли элемент — т.е. он сам enabled и все его контейнеры enabled —
element.enabled()


F>11. Поменять выбор у <select> (?)


element.set_value(const json::value& v)


+ все <option> это тоже DOM elements.
Выбранный элемент — option.get_state(STATE_CHECKED);
Текущий элемент — option.get_state(STATE_CURRENT);

F>12. Чекнуть/дечекнуть чекбокс (?)

element.set_value(const json::value& v)


F>13. Развернуть/свернуть/удалить/добавить узел/все узлы у treeview (?)


Опять же стандартно работая с DOM:
 element.set_state(STATE_EXPANDED);  
 element.set_state(STATE_COLLAPSED);  
 element.detach();


И вот фрагмент из sciter SDK создания деревянной структуры ( sciter-sdk/sdk/lib/behaviors/tree.tis )

function Tree.append(val, caption, parentNode)
{
  var node = null;
  switch( typeof val )
  {
    case #object: 
      node = new Element(#options );  node.setState(Element.STATE_EXPANDED);
      parentNode.insert(node);
      node.html = String.printf("<caption><var>%s</var>:{}</caption>", caption);
      for( var k in val)
        this.append(val[k], k, node);
      break;
    case #array:
      node = new Element(#options);  node.setState(Element.STATE_EXPANDED);
      parentNode.insert(node);
      node.html = String.printf("<caption><var>%s</var>:[]</caption>", caption);
      for( var i = 0; i < val.length; ++i )
        this.append(val[i], i.toString() , node);
      break;
    default:
      node = new Element(#option);
      parentNode.insert(node);
      node.html = String.printf("<caption><var>%s</var>:%v</caption>", caption, val);
      break;
  }
}


это используется для показа структуры JSON ответа пришедешего от yahoo
(sciter-sdk\samples\communications\jahoo-rpc\)

В С++ это будет выглядить примерно так же.

F>14. Пробежаться во всем элементам формы и получить/установить их значения (?)


См. файл sdk\include\behaviors\behavior_form.cpp — это оно.

F>15. Реализовать поведение как у заголовка окна для элемента — т.е. при зажатой на элементе мыши чтобы перетаскивание всего окна работало (для скинования) (?)


См пример sdk\skin\ файл window.cpp

int window::hit_test( int x, int y )
  {
    POINT pt; pt.x = x; pt.y = y;
    ::MapWindowPoints(HWND_DESKTOP,hwnd,&pt,1);

    if( caption.is_valid() && caption.is_inside(pt) )
      return HTCAPTION;
...
  }


F>16. Простейший behavior для кнопок: 4 своих рисунка для отображения всех состояний (enabled, disabled, mouse over, normal) (?)


ну скажем вот такой набор деклараций в CSS:
#mytable td { behavior:button; ...}
#mytable td:hover { ...}
#mytable td:active { ...}
#mytable td:focus { ...}
#mytable td:tab-focus { ...}


Превратит все ячейки таблицы <table id="mytable"> в кнопки.
Тебе останется лишь ловить события BUTTON_CLICK.


F>Пока вроде все


Обрати еще внимание что

1) к одному DOM элементу может быть прицеплен не один behavior а несколько.
Например htmlayoutsdk\include\behaviors\behavior_select_checkmark.cpp будучи сцеплен на одном элементе с
behavior:select образует дерево с чекбоксами


2) также обрати внимание на то что event_handler может быть использован для привязки твоей собсвенной структуры
данных к конкретному элементу. Например behavior_form.cpp создает для каждого instance отдельную структуру данных.

3) стандартные controls это такие же DOM элементы c соотв. behaviors.
Связка например <input type="text"> с behavior:edit выполняется в CSS в т.н. master style sheet :
input[type="text"] { behavior:edit }


Master style sheet: http://www.terrainformatica.com/htmlayout/master_ss_css.php

Т.е. все это ты можешь переопределить как оно тебе надо.

Ну теперь точно все.











Ну вот вроде все.
Re[3]: Вопрос по HTMLayout к c-smile
От: Tom Россия http://www.RSDN.ru
Дата: 24.11.06 08:51
Оценка:
На самом деле это мега интересно, спа сибо за пояснения, но в них пока видны аргументы:
1. При изменении IE могут отвалиться некоторые функции
2. IE конечно немного монстрообразен
3. Секурити, частично согласен
4. Возможности отображения, а что они у IE меньше? Можно чуть чуть по подробее

Ещё встаёт вопрос о поддержке HTML/CSS насколько она полная в HTMLLayout, ибо идея делать один и тот же HTML для Desktop и WEB приложений — очень заманчива...

Статью бы!

PS:
Респект
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[4]: Вопрос по HTMLayout к c-smile
От: CSS  
Дата: 24.11.06 19:45
Оценка:
Здравствуйте, Denis_TST, Вы писали:

D_T>Другое дело мне — для Delphi приходится заново все обертки писать


А не мог бы ты их выложить?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Вопрос по HTMLayout к c-smile
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 24.11.06 23:36
Оценка: +1 :))
Здравствуйте, c-smile, Вы писали:

[]

CS>Да ну фигня это (про монстра). Не сказал бы что я уж особенно как-то производителен. В общем наверное как все.

CS>За уважение спасибо.

Знаешь, видимо, формализовалось наконец: HTMLayout — это по всем прикидкам именно та вещь, с которой строить UI в майкрософтовской студии мне будет не противно, а даже наоборот.

А ведь именно геморрой с UI отвращал меня от студии так долго (нет, я на ней пишу, не подумайте чего, просто удовольствия от возни с UI там нету ).

Так что появление HTMLayout прошу считать поворотной точкой для многих девелоперов ( (мечтательно) вот бы еще дельфистов отучить каку юзать ).

Я к чему это все: не буду я писать компонент под деБилдер, ибо нефик. При тех бенефитах, что дает твой движок, это будет грех
Re[4]: Вопрос по HTMLayout к c-smile
От: c-smile Канада http://terrainformatica.com
Дата: 25.11.06 04:18
Оценка: 36 (2)
Здравствуйте, Tom, Вы писали:

Tom>На самом деле это мега интересно, спа сибо за пояснения, но в них пока видны аргументы:

Tom>1. При изменении IE могут отвалиться некоторые функции
Tom>2. IE конечно немного монстрообразен
Tom>3. Секурити, частично согласен
Tom>4. Возможности отображения, а что они у IE меньше? Можно чуть чуть по подробее

background-repeat:
— добавлены expand и stretch режимы, позволяют делать вот такое http://www.terrainformatica.com/htmlayout/images/image2.png,
всяки штуки типа rounded corners, тени и пр. и без таблиц.

Набор foreground-*** атрибутов
— эквиваленты background-*** атрибутов. т.е один элемент может иметь два image.
— упрощает структуру DOM, часто значительно.

flex units в CSS.
http://www.terrainformatica.com/htmlayout/fspu.whtm
— нечто похожее есть в XUL но в виде отдельных элементов.
— flex это имхо вообще мощная штука.

flow CSS attribute.
http://www.terrainformatica.com/htmlayout/flow.whtm
— это примерно то что в Java известно как LayoutManager.
— flow:horizontal в div и все его children располагаются горизонтально.

extended set of input elements.
http://www.terrainformatica.com/htmlayout/screenshots.whtm
+ они все styleable, например <option> в <select> также стилируется как и обыкновенный div.
И соответственно может иметь произвольный markup внутри. Например <select> может иметь внутри таблицу.
— поддержка OS theme images http://www.terrainformatica.com/htmlayout/images/themesupport.jpg

popups
— вот такой вот <select> например http://www.terrainformatica.com/htmlayout/images/selects3.jpg
http://www.terrainformatica.com/sciter/screenshots/color-chooser.png

animations в CSS
— не супер конечно, но базовые эффекты типа blend и slide
задаются простым объявлением и без лишней головной боли и тонн кода на JS.


(Попрут меня отсюда чую, и правильно сделают)


Tom>Ещё встаёт вопрос о поддержке HTML/CSS насколько она полная в HTMLLayout, ибо идея делать один и тот же HTML для Desktop и WEB приложений — очень заманчива...


CSS 2.1 практически полностью — http://www.terrainformatica.com/htmlayout/cssmap.whtm
selectors — CSS 2.1 и наиболее полезные из CSS 3. http://www.terrainformatica.com/htmlayout/selectors.whtm

Есть баго-фичи в основном с замороченными правилами float атрибута. Из-за float я ACID2 тест не пройду и не хочу.

HTML один и тот же использовать можно но на десктопе можно гораздо больше сделать.
Во всяком случае существующий инструментарий и навыки HTML/CSS разработки пригодятся точно.

Tom>Статью бы!


А статью про что? Какие темы там имеет смысл осветить?
Re[5]: Вопрос по HTMLayout к c-smile
От: Denis_TST Россия www.transsys.ru
Дата: 25.11.06 08:37
Оценка: 21 (3)
Здравствуйте, CSS, Вы писали:

CSS>Здравствуйте, Denis_TST, Вы писали:


D_T>>Другое дело мне — для Delphi приходится заново все обертки писать


CSS>А не мог бы ты их выложить?

Конечно.Здесь (Настрой otput для exe в каталог с HTMLLayout.dll из SDK)
Только там далко не полный перевод, я сделал только заголовочные файлы, и частичные
аналоги врапперов, фактически только то что мне нужно на момент. Остальное переношу по необходимости,
например у Behaviour реализовал только HANDLE_MOUSE и HANDLE_BEHAVIOR_EVENT:
function TElementBehaviour.ElementEventProc(he: HElement; evtg: UINT; prms: pointer): boolean;
var
  MouseData: PMouseParams;
  EventParams: PBEHAVIOR_EVENT_PARAMS;
begin
  case evtg of
    HANDLE_INITIALIZATION: ;
    HANDLE_MOUSE:
      begin
        MouseData := PMouseParams(prms);
        Result := OnMouse(he, MouseData);
      end;
    HANDLE_KEY: ;
    HANDLE_FOCUS:
      begin
      end;
    HANDLE_SCROLL: ;
    HANDLE_TIMER: ;
    HANDLE_SIZE: ;
    HANDLE_BEHAVIOR_EVENT:
      begin
        EventParams := PBEHAVIOR_EVENT_PARAMS(prms);
        Result := OnHandleEvent(he, EventParams);
      end;
    HANDLE_DRAW: ;
    HANDLE_DATA_ARRIVED: ;
    HANDLE_METHOD_CALL: ;
  end;
end;

Вообще, обертку нужно было делать для Sciter — тк изза поддержки можно уменьшь объем кода котрый нужно переносить из С.
... << RSDN@Home 1.2.0 alpha rev. 648>>
Re[6]: Вопрос по HTMLayout к c-smile
От: Denis_TST Россия www.transsys.ru
Дата: 25.11.06 08:47
Оценка:
Здравствуйте, Denis_TST, Вы писали:

D_T>Здравствуйте, CSS, Вы писали:


CSS>>Здравствуйте, Denis_TST, Вы писали:


D_T>>>Другое дело мне — для Delphi приходится заново все обертки писать

D_T>Вообще, обертку нужно было делать для Sciter — тк изза поддержки можно уменьшь объем кода котрый нужно переносить из С.
Вообще, обертку нужно было делать для Sciter — тк из за поддержки скриптов, можно уменьшь объем кода, котрый нужно переносить из С.
... << RSDN@Home 1.2.0 alpha rev. 648>>
Re[6]: Вопрос по HTMLayout к c-smile
От: CSS  
Дата: 25.11.06 14:12
Оценка:
Спасибо огромное

Здравствуйте, Denis_TST, Вы писали:
D_T>Конечно.Здесь (Настрой otput для exe в каталог с HTMLLayout.dll из SDK)
D_T>Вообще, обертку нужно было делать для Sciter — тк изза поддержки можно уменьшь объем кода котрый нужно переносить из С.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.