Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
sunzh
Зарегистрирован: 13.05.2006 Сообщения: 19
|
Добавлено: Чт Окт 23, 2014 7:46 pm Заголовок сообщения: Проблема с WinChangedHandler |
|
|
Здравствуйте.
Отключаю обработку событий внутри WinChangedHandler'а с помощью операторных скобок Set Handler WinChangedHandler On | Off
Отслеживал с помощью "Note" количество вызовов обработчика получалось от 6 до 10 раз, тогда когда он должен был сработать лишь один раз. Внутри обработчика происходит, сначала полная очистка Косметики, затем рисуется рамка, т.е. смысл в том что при любых манипуляциях с окном, прорисовывается "стационарная рамка"
КОД:
Sub WinChangedHandler()
dim win As integer, FScale,minx,miny,maxx,maxy as Float,Pl As object
win=FrontWindow()
if WindowInfo(win, WIN_INFO_TYPE) <> WIN_MAPPER Then Exit Sub
Set Event Processing Off
Set Handler WinChangedHandler Off
Set ProgressBars Off
Set Map Window win Layer 0 Editable On
FScale=MapperInfo(win,MAPPER_INFO_SCALE)
Delete From WindowInfo(win,WIN_INFO_TABLE)
minx=MapperInfo(win,MAPPER_INFO_MINX)
miny=MapperInfo(win,MAPPER_INFO_MINY)
maxx=MapperInfo(win,MAPPER_INFO_MAXX)
maxy=MapperInfo(win,MAPPER_INFO_MAXY)
NOTE maxx-maxy ' мониторинг вызовов и результата mapperinfo
Create Pline
Into Window win 5
(minx+FScale*0.1,miny+FScale*0.1)
(minx+FScale*0.1,maxy-FScale*0.9)
(maxx-FScale*0.1,maxy-FScale*0.9)
(maxx-FScale*0.1,miny+FScale*0.1)
(minx+FScale*0.1,miny+FScale*0.1)
Pen (2,191,0)
Set ProgressBars On
Set Handler WinChangedHandler On
Set Event Processing On
End Sub
Что происходит: кроме избыточных вызовов, "слетает" результат mapperinfo, при первых 3-5 вызовах результат корректный, потом возвращается непонятно что т.е. если ширина окна 34000 м, первые вызовы возвращают эту величину, затем возвращается что-то типа "0.313", рамка вообще рисуется по MBR таблицы
Грешу на ОС Windows 7 64, MapInfo 10.0 MapBasic 4.5
Прошу помощи. Спасибо. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Окт 23, 2014 9:51 pm Заголовок сообщения: |
|
|
Ищите команду, которая вызывает эту ситуацию методом половинного деления (убирания кода). Т.е. нужно упростить код до такой степени, что будет понятно - вот эта команда приводит к этой ситуации. Тогда возможно будет понятно что это и как это можно обойти.
WinChangedHandler у вас напрямую в программе нигде случайно не вызывается? Через Call? |
|
Вернуться к началу |
|
|
sunzh
Зарегистрирован: 13.05.2006 Сообщения: 19
|
Добавлено: Пт Окт 24, 2014 12:15 pm Заголовок сообщения: |
|
|
Ищу. В чистом виде (в тестовой программе) код работает без проблем. WCH явно нигде не вызывается. В программе используется вызов WIN 32 возможно на 64 разрядной ОС возникают проблемы с потоками и синхронизацией и ДА ЗАБЫЛ: ошибка появляется не всегда, а спонтанно. Было что-то подобное когда в коде был объявлен метод, но не было его реализации. Компиляция проходила успешно, но при возникновении ошибки вместо молчаливой обработки и возврата происходили предупреждение и вылет. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пт Окт 24, 2014 4:31 pm Заголовок сообщения: |
|
|
MapInfo 10.0 или 10.0.1? По памяти первая 10.0 была довольно глючная, 10.0.1 уже постабильнее. Также проверьте на других версиях MapInfo. Лично я сомневаюсь, что это из-за вызова Win32 API, маловероятно, если вы соблюдаете сигнатуру вызова (все ровно по типам параметров). Так что или что-то в вашем коде, или бага MapInfo. |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Пт Окт 24, 2014 8:49 pm Заголовок сообщения: |
|
|
может вместо
NOTE maxx-maxy ' мониторинг вызовов и результата mapperinfo
воспользоваться
PRINT maxx-maxy ' мониторинг вызовов и результата mapperinfo |
|
Вернуться к началу |
|
|
sunzh
Зарегистрирован: 13.05.2006 Сообщения: 19
|
Добавлено: Пт Окт 24, 2014 9:15 pm Заголовок сообщения: |
|
|
Мне так удобнее.
По поводу бага, сам склоняюсь к такому же мнению, но опять же тестовая прога пашет без проблем буду копать. МИ 10.1.
В тестовой программе (main и WCH) вызов происходит корректно ровно один раз. |
|
Вернуться к началу |
|
|
sunzh
Зарегистрирован: 13.05.2006 Сообщения: 19
|
Добавлено: Сб Окт 25, 2014 12:11 am Заголовок сообщения: |
|
|
Спасибо всем за участие. Разобрался. Код не отрабатывал корректно после, открытия рабочего набора. В рабочем наборе все параметры coordsys явно прописаны, хз почему, но после того как продублировал строку сет коордсис... в WCH, все заработало. Возможно запуск рабочего набора ресетит текущий коордсис. |
|
Вернуться к началу |
|
|
|