WFL messageloop, htmlcontrol

18 messages Options
Embed this post
Permalink
Andrey Cherezov

WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
Привет (day и ygrek особенно)!

Можно ли сделать pretranslateMessage в messageloop.f опциональным?
А то отнимает диалоговые клавиши у встраиваемого html-контрола -
enter'ы и tab'ы перестают работать.

Применяю сейчас ваш WFL в качестве обертки над html вместо mshta -
это дает больший контроль над видом и поведением окна. Хотя есть и
неудобства в сравнении с HTA: в HTA встроенные в html скрипты
работают в доверенном режиме (контроль same source политик отключен,
в частности; плюс полный доступ к локальной системе), а во встраиваемом
контроле - нет. Часть скриптов, работавших в HTA, тут перестают работать.
Может эту доверенность можно изменить программно из WFL, но я пока
не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)

Мне бы хватило и ShowHTMLDialog из Mshtml.dll, но там та же проблема,
что и в mshta - нет полного контроля над кнопками окна.



ygrek-3

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink

Я настолько глубоко не разбирался как оно работает и что сломается если
убрать pretranslateMessage..

--
ygrek


attachment0 (187 bytes) Download Attachment
Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Добрый день!

Моё сообщение от 29.06.2007 13:52:
> не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
> contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)
>  
Теперь знаю :) Далекооо не так просто, как в HTA.

Есть более существенная проблема. В встраиваемом wfl htmlcontrol не
работает кнопка delete и copy/paste (ни акселераторы, ни контекстное меню) -
где-то что-то не срослось. Это видно на том же примере
~day\wfl\examples\complexsplitter\splitter2.f
- в строке редактирования яндекса можно попробовать.
Если не убирать pretranslateMessage, то не работает и кнопка Enter.
И кнопка tab по странице не ходит. В общем беда.

Расширил немножко ~day пример splitter2.f
http://www.forth.org.ru/~ac/test/
- добавил подключение к событиям браузерного окошка
(изменения титлов и статусов) с выводом в верхний listview.

Кстати, рекомендую все же использовать REQUIRE, а не NEEDS,
иначе очень сложно избежать двойного подключения либ
(в данном случае либ ~yz в примеры ~day). Обратите также внимание
на конфликты по именам - REQUIRE Connect ~yz\lib\comevents.f
невозможно подключить после сплиттера, приходится до.



Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
Привет,


Andrey Cherezov wrote:

> Добрый день!
>
> Моё сообщение от 29.06.2007 13:52:
>> не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
>> contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)
>>  
> Теперь знаю :) Далекооо не так просто, как в HTA.
>
> Есть более существенная проблема. В встраиваемом wfl htmlcontrol не
> работает кнопка delete и copy/paste (ни акселераторы, ни контекстное
> меню) -
> где-то что-то не срослось. Это видно на том же примере
> ~day\wfl\examples\complexsplitter\splitter2.f

Если это баг wfl то это я поправлю. Правда контекстное меню работает ОК.
> - в строке редактирования яндекса можно попробовать.
> Если не убирать pretranslateMessage, то не работает и кнопка Enter.
> И кнопка tab по странице не ходит. В общем беда.
>
> Расширил немножко ~day пример splitter2.f
> http://www.forth.org.ru/~ac/test/
> - добавил подключение к событиям браузерного окошка
> (изменения титлов и статусов) с выводом в верхний listview.
>
Интересно!
> Кстати, рекомендую все же использовать REQUIRE, а не NEEDS,
> иначе очень сложно избежать двойного подключения либ
> (в данном случае либ ~yz в примеры ~day).

Это исправлено с месяц назад, ygrek показал такой момент. см. CVS.
Двойных подключений не должно быть.
Так что я рекомендую использовать NEEDS, REQUIRE это прошлый век.
> Обратите также внимание
> на конфликты по именам - REQUIRE Connect ~yz\lib\comevents.f
> невозможно подключить после сплиттера, приходится до.
>
Я сейчас дорабатываю WFL и лень проверять, но стабильное что есть на CVS
вероятно обработает это без ошибок.

Дмитрий.




Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Привет,

Суть pretranslateMessage в том, чтобы в modeless диалогах заставить
работать навигацию по диалогу с помощью кнопок.
И это необходимо. По совместимости этого дела с html контролом -
посмотрю. Может WS_TABSTOP у него убрать достаточно, может еще что,
решение должно быть красивым.

Andrey Cherezov wrote:

> Привет (day и ygrek особенно)!
>
> Можно ли сделать pretranslateMessage в messageloop.f опциональным?
> А то отнимает диалоговые клавиши у встраиваемого html-контрола -
> enter'ы и tab'ы перестают работать.
>
> Применяю сейчас ваш WFL в качестве обертки над html вместо mshta -
> это дает больший контроль над видом и поведением окна. Хотя есть и
> неудобства в сравнении с HTA: в HTA встроенные в html скрипты
> работают в доверенном режиме (контроль same source политик отключен,
> в частности; плюс полный доступ к локальной системе), а во встраиваемом
> контроле - нет. Часть скриптов, работавших в HTA, тут перестают работать.
> Может эту доверенность можно изменить программно из WFL, но я пока
> не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
> contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)
>  
Если я точно помню это делается с помощью создания COM объекта, который
будет управлять настройками, втч и контестным меню.
Это можно сделать с помощью COM надстройки над hype3. По крайней мере
более удобного средства для COM программирования в spf нет.

> Мне бы хватило и ShowHTMLDialog из Mshtml.dll, но там та же проблема,
> что и в mshta - нет полного контроля над кнопками окна.
>  

Вообще считаю что будущее за программированием на форте gui это DHTML +
javascript + IE + запускалка. Дело к этому медленно идет.

Дмитрий.


Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Andrey Cherezov wrote:

> Добрый день!
>
> Моё сообщение от 29.06.2007 13:52:
>  
>> не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
>> contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)
>>  
>>    
> Теперь знаю :) Далекооо не так просто, как в HTA.
>
> Есть более существенная проблема. В встраиваемом wfl htmlcontrol не
> работает кнопка delete и copy/paste (ни акселераторы, ни контекстное меню) -
> где-то что-то не срослось. Это видно на том же примере
> ~day\wfl\examples\complexsplitter\splitter2.f
> - в строке редактирования яндекса можно попробовать.
> Если не убирать pretranslateMessage, то не работает и кнопка Enter.
> И кнопка tab по странице не ходит. В общем беда.
>
> Расширил немножко ~day пример splitter2.f
> http://www.forth.org.ru/~ac/test/
> - добавил подключение к событиям браузерного окошка
> (изменения титлов и статусов) с выводом в верхний listview.
>  

Я давно планировал сделать получение com events в ОО стиле, без VARIABLE
MYSELF хаков, видимо пришло время занять этим.

Дмитрий.


Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Dmitry Yakimov-2
Some javascript/style in this post has been disabled (why?)
Добрый день, Dmitry Yakimov!

Ваше сообщение от 30.06.2007 23:03:
Есть более существенная проблема. В встраиваемом wfl htmlcontrol не
работает кнопка delete и copy/paste (ни акселераторы, ни контекстное меню) -
    
Если это баг wfl то это я поправлю. Правда контекстное меню работает ОК.
  
Похоже, это не баг wfl, а "особенность" встраивания контролов в Atl.
Если сделать минимальный вариант - без wfl привязать с помощью
AtlAxCreateControl html-окно к другому окну, то и там не работает DEL и TAB.
Copy/paste через контекстное меню, похоже, зависит от типа контейнера
- меню всегда есть, но в большинстве случаев не работает
(в примере сплиттера тоже не работает).
Расширил немножко ~day пример splitter2.f
    
Интересно!
  
Отправь тогда на CVS для следом идущих :)
иначе очень сложно избежать двойного подключения либ
Это исправлено с месяц назад, ygrek показал такой момент. см. CVS. 
Двойных подключений не должно быть.
  
Да, он мне уже объяснил, что NEEDS должен быть первой подключаемой
библиотекой, тогда не конфликтует с REQUIRE.
Так что я рекомендую использовать NEEDS, REQUIRE это прошлый век.
  
Нет. Тогда уж использовать REQUIRE, переопределенный через NEEDS :)
REQUIRE лучше:
1. Гарантирует наличие слова в _текущем_ порядке поиска. NEEDS просто
гарантирует, что либа была когда-то подключена (с точным соблюдением путей).
2, Позволяет подключать новую либу (с другим путем!), обманывая старую
зависимую библиотеку. Так, у меня некоторые программы подключают
REQUIRE STR@ ~ac/lib/str2.f , но их легко заставить использовать str5.f,
просто подключив её в верхнем файле, не меняя старую программу - и она
прозрачно переключится на str5.f. А если бы я использовал там NEEDS, то
старая программа тупо подключила бы еще и старую версию либы.
Я сейчас дорабатываю WFL и лень проверять, но стабильное что есть на CVS 
вероятно обработает это без ошибок.
  
Я всё с CVS и беру ежедневно. Вчера на другом компьютере не заработал
упомянутый выше пример с событиями браузера (event sink подключился,
события дампились, но hook не срабатывал - сделал cvs update в каталоге
~yz, и всё заработало :)
Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Dmitry Yakimov-2
Some javascript/style in this post has been disabled (why?)
Добрый день, Dmitry Yakimov!

Ваше сообщение от 30.06.2007 23:15:
Суть pretranslateMessage в том, чтобы в modeless диалогах заставить 
работать навигацию по диалогу с помощью кнопок.
И это необходимо. По совместимости этого дела с html контролом - 
посмотрю. Может WS_TABSTOP у него убрать достаточно, может еще что, 
решение должно быть красивым.
  
С табстопом я поигрался немного, ничего не добился. Кстати, в сплиттере и
без html-контрола TAB не бегает по контролам. Только в диалогах все нормально,
а обычные окна капризничают.
не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)  
    
Если я точно помню это делается с помощью создания COM объекта, который 
будет управлять настройками, втч и контестным меню.
Это можно сделать с помощью COM надстройки над hype3. По крайней мере 
более удобного средства для COM программирования в spf нет.
  
Подскажи, как. Вот в том же примере про сплиттер, если дописать
htmlView Busy . (что было бы интуитивно понятно по аналогии с htmlView navigate),
то говорит, что нет такого метода (потому что ты добавлял обертки, а не автоматом
com-интерфейс подцепился). Приходится писать так:
htmlView control @ [[ Busy ]] .
Что интуитивным не назовешь - приходится поковырять исходники и
выпотрошить это нутро. То же самое с этими многочисленными this, SELF и т.д.

Imho, более удобным (в фортовом единообразном стиле) было бы подключение
IDispatch в виде словаря, как я делал для dll и т.д.
И тогда можно было стековать контексты, чтобы для htmlView были видны
одновременно и COM-словарь WebBrowser, и словарь управления объектом окна,
без ручного переключения и вытаскивания методов разными способами.
Вообще считаю что будущее за программированием на форте gui это DHTML + 
javascript + IE + запускалка. Дело к этому медленно идет.
  
Ну так, о чем и говорю, я за год четыре больших программы написал в этом стиле :)
Я в этот список добавляю "+acWEB для поддержки этого всего html набора,
+xmenu (yz) для поддержки треевого подключения и извещений". Ну и +sqlite,
+опционально curl+xml либы, что в общем с acWEB уже давно удобно срослось.
"Дело медленно идет" к тому, что этот набор стабилизируется в эдакий универсальный
"пускач" (размером около 400кб exe) для фортовых html-gui-приложений.
Т.е. нечто вроде XulRunner, но в 10-20 раз меньше, и по-фортовому в 10-20 раз мощнее :)
Вот я попробовал и традиционный Win32 GUI прикрутить из wfl, но мелкие
заморочки типа этих клавишных становятся проблемой, которые решаются не так
легко, как DHTML'ные (потому что dhtml'ными задачами сейчас занимается миллион
программеров, а wfl только мы втроем :-).
Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Dmitry Yakimov-2
Добрый день, Dmitry Yakimov!

Ваше сообщение от 30.06.2007 23:19:
> Я давно планировал сделать получение com events в ОО стиле, без VARIABLE
> MYSELF хаков, видимо пришло время занять этим.
>  
Получение виндовых сообщений в wfl сделано через куда более сложные хаки.
Дело не в том, чтобы избавиться от хаков, а чтобы они остались в либе и не
влияли на остальной код. Т.е. если бы Юра делал Connect для твоего wfl,
то он бы поставил инициализацию SELF и т.д. в обработчик, и Hook'и
сделал бы поиском по словарю, как ты (как и я в 95м) сделал обработку
виндовых сообщений. Впрочем, заметь, это тоже не совсем в
wfl/hype3-стиле ;).
В wfl-стиле было бы сделать и виндовые сообщения ОО-событиями,
т.е. сообщениями, посылаемыми объектам (т.е. все эти W:, N:,C: просятся
внутрь определения класса). И вообще в итоге прийдем к DOM-аналогу
(потому я и вспомнил про Азаматовый форт-браузер в связи с вашим wfl :)



Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
Andrey Cherezov wrote:

> Добрый день, Dmitry Yakimov!
>
> Ваше сообщение от 30.06.2007 23:19:
>  
>> Я давно планировал сделать получение com events в ОО стиле, без VARIABLE
>> MYSELF хаков, видимо пришло время занять этим.
>>  
>>    
> Получение виндовых сообщений в wfl сделано через куда более сложные хаки.
> Дело не в том, чтобы избавиться от хаков, а чтобы они остались в либе и не
> влияли на остальной код. Т.е. если бы Юра делал Connect для твоего wfl,
> то он бы поставил инициализацию SELF и т.д. в обработчик, и Hook'и
> сделал бы поиском по словарю, как ты (как и я в 95м) сделал обработку
> виндовых сообщений. Впрочем, заметь, это тоже не совсем в
> wfl/hype3-стиле ;).
>  

Посылку сообщений от хуков Юры к экземплярам wfl можно сделать через
thunk's. То есть фактически MYSELF будет хранится в коде thunk'a.
> В wfl-стиле было бы сделать и виндовые сообщения ОО-событиями,
> т.е. сообщениями, посылаемыми объектам (т.е. все эти W:, N:,C: просятся
> внутрь определения класса).
То есть будет не W: WM_PAINT а : OnPaintMessage ... ; ?
Строго говоря да, просто первый метод хорошо на форт ложится.

Я сейчас делаю рефакторинг wfl, там информация о сообщении передается
через экземпляр CWindowMessage :)

Дмитрий.


Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Andrey Cherezov wrote:

> Добрый день, Dmitry Yakimov!
>
> Ваше сообщение от 30.06.2007 23:15:
>> Суть pretranslateMessage в том, чтобы в modeless диалогах заставить
>> работать навигацию по диалогу с помощью кнопок.
>> И это необходимо. По совместимости этого дела с html контролом -
>> посмотрю. Может WS_TABSTOP у него убрать достаточно, может еще что,
>> решение должно быть красивым.
>>  
> С табстопом я поигрался немного, ничего не добился. Кстати, в сплиттере и
> без html-контрола TAB не бегает по контролам. Только в диалогах все
> нормально,
> а обычные окна капризничают.
>>> не знаю как. И еше не знаю, как сделать опции, подобные hta'шным
>>> contextMenu="no" NAVIGABLE="no". Правда еще и не искал :)  
>>>    
>> Если я точно помню это делается с помощью создания COM объекта, который
>> будет управлять настройками, втч и контестным меню.
>> Это можно сделать с помощью COM надстройки над hype3. По крайней мере
>> более удобного средства для COM программирования в spf нет.
>>  
> Подскажи, как. Вот в том же примере про сплиттер, если дописать
> htmlView Busy . (что было бы интуитивно понятно по аналогии с htmlView
> navigate),
> то говорит, что нет такого метода (потому что ты добавлял обертки, а
> не автоматом
> com-интерфейс подцепился). Приходится писать так:
> htmlView control @ [[ Busy ]] .
> Что интуитивным не назовешь - приходится поковырять исходники и
> выпотрошить это нутро. То же самое с этими многочисленными this, SELF
> и т.д.

Подцепление com интерфейса в wfl и управление браузером это немного
разные вещи.
Я имею в виду http://msdn2.microsoft.com/en-us/library/Aa770041.aspx и
реализацию например с помощью com надстройки над hype3 интерфейса
IDocHostShowUI и других из этой статьи. То есть можно управлять
веббраузером так что будет нормальный интерйес не хуже win32, пример -
интерфейс ZoneAlarm
>
> Imho, более удобным (в фортовом единообразном стиле) было бы подключение
> IDispatch в виде словаря, как я делал для dll и т.д.
> И тогда можно было стековать контексты, чтобы для htmlView были видны
> одновременно и COM-словарь WebBrowser, и словарь управления объектом окна,
> без ручного переключения и вытаскивания методов разными способами.

Да, неплохая мысль. И это можно интегрировать с CAxControl
Никто еще IDispatch в качестве словаря не подключал?

>> Вообще считаю что будущее за программированием на форте gui это DHTML +
>> javascript + IE + запускалка. Дело к этому медленно идет.
>>  
> Ну так, о чем и говорю, я за год четыре больших программы написал в
> этом стиле :)
> Я в этот список добавляю "+acWEB для поддержки этого всего html набора,
> +xmenu (yz) для поддержки треевого подключения и извещений". Ну и +sqlite,
> +опционально curl+xml либы, что в общем с acWEB уже давно удобно срослось.
> "Дело медленно идет" к тому, что этот набор стабилизируется в эдакий
> универсальный
> "пускач" (размером около 400кб exe) для фортовых html-gui-приложений.
> Т.е. нечто вроде XulRunner, но в 10-20 раз меньше, и по-фортовому в
> 10-20 раз мощнее :)
> Вот я попробовал и традиционный Win32 GUI прикрутить из wfl, но мелкие
> заморочки типа этих клавишных становятся проблемой, которые решаются
> не так
> легко, как DHTML'ные (потому что dhtml'ными задачами сейчас занимается
> миллион
> программеров, а wfl только мы втроем :-).

А что - xmenu на dhtml?

Дмитрий.


Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Dmitry Yakimov-2
Добрый день, Dmitry Yakimov!

Ваше сообщение от 01.07.2007 13:35:
> То есть будет не W: WM_PAINT а : OnPaintMessage ... ; ?
> Строго говоря да, просто первый метод хорошо на форт ложится.
>  
Переименовывать не нужно. Просто WM_PAINT, но в соответствующем месте -
в классе окна, наверное, будет логично. Хотя может я в логике wfl что-то
недопонимаю - объемный все же текст, чтобы сходу въехать в архитектуру.
> Я сейчас делаю рефакторинг wfl, там информация о сообщении передается
> через экземпляр CWindowMessage :)
>  
А они будут родственниками с CComMessage=CComEvent ?



Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Dmitry Yakimov-2
Добрый день, Dmitry Yakimov!

Ваше сообщение от 01.07.2007 13:45:
> Подцепление com интерфейса в wfl и управление браузером это немного
> разные вещи.
> Я имею в виду http://msdn2.microsoft.com/en-us/library/Aa770041.aspx и
> реализацию например с помощью com надстройки над hype3 интерфейса
> IDocHostShowUI и других из этой статьи. То есть можно управлять
> веббраузером так что будет нормальный интерйес не хуже win32, пример -
> интерфейс ZoneAlarm
>  
Ты словно не весь spf-dev читаешь... Я там много раз приводил пример
dhtml-интерфейсов,
которые не хуже, а лучше обычных win32 - MSN Messenger, например.

А управление браузером мне никакое и не нужно! Управлять им я могу через
JavaScript
(в т.ч. из форта - я об этом тоже неоднократно здесь писал), это на
порядок удобнее чем
через COM. И события из браузера я тоже без проблем получаю в форт через
JavaScript.
Т.е. если бы ATL просто не "портил" браузер (не отнимал у него кнопки и
copy/paste),
то больше от него ничего и не требуется. И ни одной функции win32 gui
мне не нужно
уже лет 5 как (с тех пор как последний раз что-то по мелочи менял в
Eserv/2 [интерфейс
которого, напомню, был написан в 96м году для совсем другой (финансовой)
программы,
но потом в 98м пришелся в пору и для Eserv/2, т.к. там дерево,
управляющее интерфейсом,
легко настраивается через xml-подобный конфиг; xml'ей тогда еще не было
в природе]).

В Eserv/1 (96г) был только веб-интерфейс, с тех пор я его предпочитаю: в
Eserv/3 тоже
только веб. И у всех других моих программ тоже.

Вот смотри: http://echat.snop.ru/echat-test.png - это я вчера окно еЧата
(который изначально
был в HTA+acWEB сделан) вставил в твой пример сплиттера, т.е. сверху wfl
listView,
слева (задвинутое сплиттером) дерево, а всё остальное - чистый dhtml. От
такой
вставки я получил только один плюс для ечата: доступ к управлению
кнопкой закрытия окна :)
Но много минусов (в сравнении с HTA): перестал работать tab, перестал
работать del,
copy/paste, появилось ненужное контекстное меню, режим запуска браузера
сменился с
доверенного, на сетевой (строгие политики на фреймы, отнят доступ
скрипта к локальной
системе [благо, что я это через форт делаю, т.е. ечат от этого не
поломался], и т.д.).
> Да, неплохая мысль. И это можно интегрировать с CAxControl
> Никто еще IDispatch в качестве словаря не подключал?
>  
Казань брал (dll/so/dirs), Астрахань брал (xml), Ревель брал (sqlite)...
Шпака (idispatch) не брал :)
Это было бы логичным продолжением ~ac/lib/ns/ "взятых городов", но руки
не дошли.
> А что - xmenu на dhtml?
>  
Нет. Это юрина программа настраиваемой треевой иконки. Я её к acWEB
прикрутил,
чтобы он сидел в углу как когда-то Eserv/2. А то какой же чат, если он в
трей не сворачивается :)



Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
Кстати, с com в fwl тоже не все гладко.
Вот в WM_CREATE срабатывает такой код:
htmlView control @ [[ Document ]] ." doc=" . ( дает 0, как и надо на тот
момент)
а в W: WMU_ADDSTR уже нет - просто слетает, даже без exception
(т.е. стек разваливается).

W: WMU_ADDSTR
   2DROP \ 2DUP TYPE CR
   0 ROT ROT listView insertString
   htmlView control @ [[ Busy ]] .
   htmlView control @ [[ Document ]] ." doc=" .
   0
;
(если оставить только [[ Busy ]], то работает)



Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
Добрый день, Andrey Cherezov!

Ваше сообщение от 01.07.2007 14:54:
>    htmlView control @ [[ Busy ]] .
>    htmlView control @ [[ Document ]] ." doc=" .
>    0
>  
Если поставить 1 вместо 0, то работает. Но если добавить
   htmlView control @ [[ LocationURL ]] ASCIIZ> TYPE CR
то (втроем) опять не работает. В общем, капризно...



Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Andrey Cherezov wrote:

> Добрый день, Dmitry Yakimov!
>
> Ваше сообщение от 01.07.2007 13:35:
>  
>> То есть будет не W: WM_PAINT а : OnPaintMessage ... ; ?
>> Строго говоря да, просто первый метод хорошо на форт ложится.
>>  
>>    
> Переименовывать не нужно. Просто WM_PAINT, но в соответствующем месте -
> в классе окна, наверное, будет логично. Хотя может я в логике wfl что-то
> недопонимаю - объемный все же текст, чтобы сходу въехать в архитектуру.
>  

Хм, сейчас именно в классе окна.
>> Я сейчас делаю рефакторинг wfl, там информация о сообщении передается
>> через экземпляр CWindowMessage :)
>>  
>>    
> А они будут родственниками с CComMessage=CComEvent ?
>  

По крайней мере надо будет это учесть. Спасибо за наводку.

Дмитрий.


Dmitry Yakimov-2

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Привет,

Andrey Cherezov wrote:

> Добрый день, Dmitry Yakimov!
>
> Ваше сообщение от 30.06.2007 23:03:
>>> Есть более существенная проблема. В встраиваемом wfl htmlcontrol не
>>> работает кнопка delete и copy/paste (ни акселераторы, ни контекстное меню) -
>>>    
>> Если это баг wfl то это я поправлю. Правда контекстное меню работает ОК.
>>  
> Похоже, это не баг wfl, а "особенность" встраивания контролов в Atl.
> Если сделать минимальный вариант - без wfl привязать с помощью
> AtlAxCreateControl html-окно к другому окну, то и там не работает DEL
> и TAB.
> Copy/paste через контекстное меню, похоже, зависит от типа контейнера
> - меню всегда есть, но в большинстве случаев не работает
> (в примере сплиттера тоже не работает).
>>> Расширил немножко ~day пример splitter2.f
>>>    
>> Интересно!
>>  
> Отправь тогда на CVS для следом идущих :)

С удовольствием. Как рефакторить wfl закончу.

>>> иначе очень сложно избежать двойного подключения либ
>> Это исправлено с месяц назад, ygrek показал такой момент. см. CVS.
>> Двойных подключений не должно быть.
>>  
> Да, он мне уже объяснил, что NEEDS должен быть первой подключаемой
> библиотекой, тогда не конфликтует с REQUIRE.
>> Так что я рекомендую использовать NEEDS, REQUIRE это прошлый век.
>>  
> Нет. Тогда уж использовать REQUIRE, переопределенный через NEEDS :)
> REQUIRE лучше:
> 1. Гарантирует наличие слова в _текущем_ порядке поиска. NEEDS просто
> гарантирует, что либа была когда-то подключена (с точным соблюдением
> путей).

Не просто когда-то, а в данном CURRENT контексте. Что логично.
> 2, Позволяет подключать новую либу (с другим путем!), обманывая старую
> зависимую библиотеку. Так, у меня некоторые программы подключают
> REQUIRE STR@ ~ac/lib/str2.f , но их легко заставить использовать str5.f,
> просто подключив её в верхнем файле, не меняя старую программу - и она
> прозрачно переключится на str5.f. А если бы я использовал там NEEDS, то
> старая программа тупо подключила бы еще и старую версию либы.

Неа. Есть такая штука NEEDED: - тоже можно обманывать.
>> Я сейчас дорабатываю WFL и лень проверять, но стабильное что есть на CVS
>> вероятно обработает это без ошибок.
>>  

Дмитрий.


Andrey Cherezov

Re: WFL messageloop, htmlcontrol

Reply Threaded More More options
Print post
Permalink
In reply to this post by Andrey Cherezov
Some javascript/style in this post has been disabled (why?)
Добрый день!

Моё сообщение от 30.06.2007 11:57:
Есть более существенная проблема. В встраиваемом wfl htmlcontrol не
работает кнопка delete и copy/paste (ни акселераторы, ни контекстное меню) -
где-то что-то не срослось. Это видно на том же примере
~day\wfl\examples\complexsplitter\splitter2.f
- в строке редактирования яндекса можно попробовать.
Если не убирать pretranslateMessage, то не работает и кнопка Enter.
И кнопка tab по странице не ходит. В общем беда.
  
Эта беда не в WFL, а в ms-овом ATL.
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101801
Наконец дошли руки до её решения.

Для работы delete/copy/paste и т.д. пришлось вручную добавить обработку акселераторов
в цикл обработки виндовых сообщений. Пояснения см. в ~ac/lib/win/window/accel.f
Если добавить TranslateAccelerator с заданной там табличкой клавиш в WFL'овый run,
то кнопки начинают работать. Но клипборд при этом все равно не работает.
Оказывается, что это по причине вызова StartCOM вместо OleInitialize (который сам
инициализирует COM, как ему надо, плюс включает поддержку клипборда).

Можно, не добавляя ничего в WFL, расширить его для нормальной работы
htmlcontrol так (подключить wfl, потом включить этот текст):

REQUIRE InitAccel ~ac/lib/win/window/accel.f

CMessageLoop SUBCLASS CMessageLoop2
CWinMessage OBJ msg
: idleLoop ;

VARIABLE accelh

: run2 ( -- retcode )
  InitAccel accelh !
  BEGIN
    idleLoop
    0 0 0 msg addr GetMessageA
  WHILE
    TRACE-WINMESSAGES
    IF msg toString TYPE CR THEN

    msg addr accelh @ msg hwnd @ TranslateAcceleratorA 0=
    IF
          msg addr DUP
          TranslateMessage DROP
          DispatchMessageA DROP
    THEN
  REPEAT
  msg wParam @
;
;CLASS

WINAPI: OleInitialize ole32.dll

: winTest ( -- n )
\  StartCOM
  0 OleInitialize DROP
  || eChat02 wnd CMessageLoop2 loop ||

  0 wnd create DROP
  SW_SHOW wnd showWindow

  loop run2
  EndCOM
;

Осталось разобраться с TAB'ами - не знаю, какую IDM_команду нужно прописать в таблице акселераторов для TAB.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev