www.map-info.ru :: Просмотр темы - Проблема с WinChangedHandler
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
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?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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, все заработало. Возможно запуск рабочего набора ресетит текущий коордсис.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru