Forth http://fforum.winglion.ru/ |
|
Требуются контрпримеры http://fforum.winglion.ru/viewtopic.php?f=2&t=3012 |
Страница 2 из 2 |
Автор: | gudleifr [ Ср авг 13, 2014 17:00 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
mOleg писал(а): Ну, допустим, есть отдельный словарь, в котором находится список всех обработчиков, имя каждого - это идентификатор события. Именно. Есть словарь "событие-код", обрабатывающий ПОТОК нужных сообщений. От этого не уйти. Но этот словарь должен быть дополнен "полями" для "прочих событий" - инициализации, рисования, управления (пусть даже, они компилируются не в наш СЛОВАРЬ, а в структуры Винды). Так вот, заранее компилировать эту лабуду при написании программы, и иметь дополнительный словарь компактных "смысловых объектов", которые по потребности перекомпилировать в "визуальные" по месту?Например, в примере про кнопку иметь в "смысловом словаре" только тройку "заголовок-действие", а при указании на то, что она вдруг понадобилась в каком-либо диалоге, рассчитать флаги-размеры исходя из политики выравнивания диалога и скомпилировать полную строку диалога в "визуальном словаре". |
Автор: | mOleg [ Ср авг 13, 2014 17:21 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
gudleifr писал(а): Так вот, заранее А как это делается сейчас? Я, вот, долго не занимался измышлизмами, выходит как-то так: Код: \ Обработчик сообщений окна
\ нельзя внутри использовать hwin и screen, если они USER переменные \ здесь только фильтр для нужных сообщений, чтоб их не обрабатывал DefProc CB: 'WINMES ( --> addr ) DUP message @ CASE wm:: mousemove OF POFF ENDOF \ обработку предполагаю делать в MAINLOOP wm:: quit OF ENDOF \ wm:: close OF ENDOF \ wm:: keydown OF ENDOF \ wm:: timer OF ENDOF wm:: ncmousemove OF PON ENDOF DROP DefProc \ отдаем только, если сообщение не опознано ENDCASE ; \ обработка событий (вне колбэка) : Reflex ( addr --> ) 1 msgs +! DUP message @ ( addr --> ) CASE wm:: mousemove OF lParam @ GetCurXY ~pnt IS ~pointer ENDOF wm:: paint OF DROP b>scr ENDOF ........... DDROP \ TranslateMessage DROP ENDCASE ; |
Автор: | gudleifr [ Ср авг 13, 2014 17:26 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
mOleg писал(а): code... Это как раз та часть "словаря", которая из-за сложноустроенности Винды "компилируется отдельно".Т.е. управление и рисование win-объектов лежит "где-то рядом". |
Автор: | mOleg [ Ср авг 13, 2014 17:40 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
gudleifr писал(а): Это как раз та часть "словаря", которая из-за сложноустроенности Винды "компилируется отдельно". это не особо важно. Трюк у меня тут другой - я не хочу в колбэке ничего обрабатывать, т.к. каждое окно у меня крутится в отдельном потоке и имеет собственные USER переменные (одноименные но разные у каждого потока). Вот теперь, второй CASE можно заменить словарем, т.е. вместо Refelex будет поиск по словарю. Не имею ничего против, а вы? |
Автор: | mOleg [ Сб авг 16, 2014 11:49 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
перенес лишнее, посему возвращаю кусок ответа: Цитата: gudleifr писал(а):
Речь о выборе между "полной компиляцией заранее" и "саморазворачиванием в процессе". Использование словаря уже нам эту свободу даст (хотя нужна ли эта свобода? для меня ответ не очевиден). Однако, если пойти дальше, и вспомнить, что у нас есть шикарный контекст словарей, мы можем создать некую иерархию словарей и совсем произвольным образом управлять оконными объектами (убирая, добавляя, заменяя словари в контексте, можно добиться любого необходимого эффекта). Имхо, так. |
Автор: | gudleifr [ Сб авг 16, 2014 12:21 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
mOleg писал(а): Использование словаря уже нам эту свободу даст Фигушки. Давайте попробую еще раз объяснить.Чтобы работала некая фигня, надо создать некие структуры в памяти, привязать какие-то указатели и прочая мелочь... С точки зрения FORTH эту процедуру имеет смысл считать "компиляцией", чтобы потом сигналы о состоянии фигни выглядели для FORTH "просто словами". Т.е. процедура опроса фигни (или реакции на сообщение от нее) та же старая добрая процедура FIND... Конечно, можно честно прописать (скомпилировать) фигню еще в исходном коде. Например, при создании исполняемого Win-файла я в его конец втюхиваю т.н. Win-ресурсы (меню, диалоги, иконки...). А можно проводить эту компиляцию "на лету" - во время работы программы. Например, я могу создать меню или диалог в памяти и сказать Винде: "Загрузи, как из ресурса". Конечно, при компиляции на лету, я теряю в пространстве: в довесок к готовому словарю (который тоже будет занимать место), я имею словарь зародышей и лексиконы для компиляции. Но, зато, я имею возможность подгонять зародышей под разный фенотип, хранить только генотип и пр. Вопрос же собственно состоял в границах применимости первого и второго методов. И в том, чем второй метод должен "выглядеть с точки FORTH". |
Автор: | mOleg [ Сб авг 16, 2014 19:33 ] |
Заголовок сообщения: | Re: Требуются контрпримеры |
gudleifr писал(а): Фигушки. Давайте попробую еще раз объяснить.Чтобы работала некая фигня, надо создать некие структуры в памяти, привязать какие-то указатели и прочая мелочь... Очень не хватает ТЗ, потому как на вопрос: некие + какие-то и прочая мелочь = хочется ответить: = какая-то фиговина. Возможно, в личном общении, когда можно очень просто уточнить тот или иной момент такая постановка задачи простительна и понятна. Инициализацию и "связывание" каких-либо объектов между собой компиляцией считать не могу. Имхо, тогда любое действие стоит считать компиляцией(типа, создание нового за счет комбинирования имеющегося). gudleifr писал(а): Например, при создании исполняемого Win-файла я в его конец втюхиваю т.н. Win-ресурсы (меню, диалоги, иконки...).А можно проводить эту компиляцию "на лету" - во время работы программы. Например, я могу создать меню или диалог в памяти и сказать Винде: "Загрузи, как из ресурса". Ну, допустим, описание структуры и содержимого меню лежит в отдельном файле, картинки в другом, звуки в третьем и т.д. В чем проблема-то? Что мешает их подключить, когда станет надо? Я правда не могу понять вашего описания проблемы, хотя и стараюсь. И, пожалуста, давайте без генотипов-фенотипов. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |