[ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 24.02.15 14:21
Оценка: 120 (5)
Выложил компонент-обертку для Sciter3 — https://github.com/da-baranov/SciDe/releases

Демо: https://github.com/da-baranov/SciDe/releases/download/v3.2.0.4-beta.2/scide-v3.2.0.4-beta.2.zip

Поддерживается x32, c x64 не экспериментировал.

Инструмент разработки — Delphi7; также попутно тестировал в Delphi XE 7 x32 — вроде бы работает, но у меня закончился пробный период :(
В любом случае .bpg для Delphi 7 без проблем открывается в любой более новой версии Delphi.

Sciter/TIScript API транслирован процентов на 90%, реализованы основные фичи (DOM, обработка событий, регистрация нативных функций и классов, вызов функций TIScript из Delphi и наоборот), плюс добавлена поддержка COM/OLE. API работы с DOM и селекторами (IElement/IElementCollection) построено на счетчиках ссылок и не требует особо бережного обращения с памятью.

На все это можно полюбоваться в демке.
Отредактировано 24.02.2015 21:15 α . Предыдущая версия .
Re: [ANN] Sciter/Delphi
От: c-smile Канада http://terrainformatica.com
Дата: 24.02.15 16:52
Оценка:
Здравствуйте, baranovda, Вы писали:

Круто, спасибо! Добавил ссылку на твой GitHub на Sciter home page (справа).
Re[2]: [ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 24.02.15 17:25
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Круто, спасибо! Добавил ссылку на твой GitHub на Sciter home page (справа).


Пока не за что )
Хочу вернуться к нашим баранам:

1) Всплываюшие окна
Вот там в демке самый последний пример — это то, о чем мы как-то беседовали: Sciter как WS_CHILD, показывающий модальный диалог, который нельзя закрыть мышкой.
Посмотри, пожалуйста, вдруг чего на ум придет.
Не понимаю, кто тут косячит — VCL или SciterProcND. В Delphi есть один workaround-способ перехватить полный контроль над очередью сообщений (в том числе и ловить клики над всеми окнами), но он ресурсопрожорливый и я бы его задействовать не хотел

2) После загрузки страницы иногда пропадает кусочек низа. В этой же демо сразу после запуска раздел "Popups from child windows issue" сразу не виден, а если чуть-чуть отресайзить главную форму, то все отрисовывается.

3) Окно, пришпиленное к элементу (в демке — "Native Delphi Control inside Sciter") не всегда своевременно реагирует на изменение размеров или перепозиционирование элемента-владельца.
Re[3]: [ANN] Sciter/Delphi
От: c-smile Канада http://terrainformatica.com
Дата: 24.02.15 19:26
Оценка:
Здравствуйте, baranovda, Вы писали:

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


CS>>Круто, спасибо! Добавил ссылку на твой GitHub на Sciter home page (справа).


B>Пока не за что )

B>Хочу вернуться к нашим баранам:

B>1) Всплываюшие окна

B>Вот там в демке самый последний пример — это то, о чем мы как-то беседовали: Sciter как WS_CHILD, показывающий модальный диалог, который нельзя закрыть мышкой.
B>Посмотри, пожалуйста, вдруг чего на ум придет.
B>Не понимаю, кто тут косячит — VCL или SciterProcND. В Delphi есть один workaround-способ перехватить полный контроль над очередью сообщений (в том числе и ловить клики над всеми окнами), но он ресурсопрожорливый и я бы его задействовать не хотел

Похоже что это всё-таки VCL, надо мне аналогичный пример на C нарисовать ...

B>2) После загрузки страницы иногда пропадает кусочек низа. В этой же демо сразу после запуска раздел "Popups from child windows issue" сразу не виден, а если чуть-чуть отресайзить главную форму, то все отрисовывается.


Что-то там с WM_SIZE не вовремя приходит. Посмотрю.

B>3) Окно, пришпиленное к элементу (в демке — "Native Delphi Control inside Sciter") не всегда своевременно реагирует на изменение размеров или перепозиционирование элемента-владельца.


Child окна желательно не использовать в scrollable контейнерах. Либо выключать animated scroll в CSS.
Re: [ANN] Sciter/Delphi
От: c-smile Канада http://terrainformatica.com
Дата: 24.02.15 19:32
Оценка:
Здравствуйте, baranovda, Вы писали:

Там у тебя проблема со SCITER_VALUE во многих местах.

Скажем вот эта функция
BOOL    SCAPI SciterEval ( HWINDOW hwnd, LPCWSTR script, UINT scriptLength, SCITER_VALUE* pretval)


вызывается с pretval указывающим на какой-то мусор.

Все переменные SCITER_VALUE должны быть (must be) инициализированы ValueInit(pretval) функцией перед любым использованием. Ну или хотя бы memzero() на них...
Re[2]: [ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 24.02.15 19:48
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>Все переменные SCITER_VALUE должны быть (must be) инициализированы ValueInit(pretval) функцией перед любым использованием. Ну или хотя бы memzero() на них...


Есть такое. В одном месте я это даже заметил раньше и поправил, хотя там по сути должен был быть out/retval параметр. Учту
Re[3]: [ANN] Sciter/Delphi
От: c-smile Канада http://terrainformatica.com
Дата: 24.02.15 20:32
Оценка:
Здравствуйте, baranovda, Вы писали:

out/retval тоже должен быть проинициализирован. Я для таких параметров сам ValueInit вызывать не могу.
Вызываю только ValueClear(). Иначе будет mem leak, например в таком сценарии

{
  sciter::value rv; // ctor, calls ValueInit();
  SciterEval ( ... "gate.version" , &rv); // calls ValueClear() on rv to free references.
  ...
  SciterEval ( ... "gate.mode", &rv); // calls ValueClear() on rv to free references.

} // sciter::~value() here calls ValueClear() to free references, etc.


А вот интересно, в Дельфях есть RAII?
Re[4]: [ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 24.02.15 20:47
Оценка:
Здравствуйте, c-smile, Вы писали:

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

CS>А вот интересно, в Дельфях есть RAII?

В новых есть, в старых нет. Но это ему не сильно помогает Delphi это уже считай как латынь
Re[2]: [ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 24.02.15 21:08
Оценка:
Здравствуйте, c-smile, Вы писали:


Еще одна проблемка.
Причесываю API и анализирую коды возвратов.
И вот SciterCreateElement почему-то возвращает мне какой-то адовый SCDOM_RESULT, конкретно — 4214947.
Re[3]: [ANN] Sciter/Delphi
От: c-smile Канада http://terrainformatica.com
Дата: 24.02.15 21:53
Оценка:
Здравствуйте, baranovda, Вы писали:

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



B>Еще одна проблемка.

B>Причесываю API и анализирую коды возвратов.
B>И вот SciterCreateElement почему-то возвращает мне какой-то адовый SCDOM_RESULT, конкретно — 4214947.

Эта функция у меня выглядит так:

SCDOM_RESULT SCAPI SciterCreateElement_api( LPCSTR tag, LPCWSTR text, /*out*/ HELEMENT *phe )
{
  if(!tag || !phe)
    return SCDOM_INVALID_PARAMETER;

  html::element *b = new html::element(html::tag::symbol(tag));
  if( text && text[0] )
  {
    b->append( new html::text(chars_of(text)));
  }
  b->ext_add_ref();
  *phe = b;
  return SCDOM_OK;
}


Она в принципе не может ничего вернуть кроме SCDOM_INVALID_PARAMETER и SCDOM_OK.
Ну и throw std::bad_alloc ...

Re[5]: [ANN] Sciter/Delphi
От: c-smile Канада http://terrainformatica.com
Дата: 24.02.15 21:59
Оценка: :)
Здравствуйте, baranovda, Вы писали:

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


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

CS>>А вот интересно, в Дельфях есть RAII?

B>В новых есть, в старых нет. Но это ему не сильно помогает Delphi это уже считай как латынь


Понял, Дельфи это такая СССРовская хрущевка — жуткая, страшная, пора ломать, но люди еще живут.
Re[4]: [ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 24.02.15 22:31
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Похоже что это всё-таки VCL, надо мне аналогичный пример на C нарисовать ...


Сделал дочернее окно Sciter в тестовом проекте MFC — все диалоги работают. Лан, буду копать.
Re[4]: [ANN] Sciter/Delphi
От: baranovda Российская Империя  
Дата: 25.02.15 07:02
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Она в принципе не может ничего вернуть кроме SCDOM_INVALID_PARAMETER и SCDOM_OK.

CS>Ну и throw std::bad_alloc ...

разобрался. Это я с бодуна вместо stdcall написал safecall.
Кстати, а почему в API tiscript соглашение cdecl, а в sciter — stdcall?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.