Страница 1 из 1
SelChangedHandler
Добавлено: 15 мар 2012, 20:10
Juls
Помогите пожалуйста в следующем вопросе:
В программе прописана последовательность действий для SelChangedHandler. И запускаться SelChangedHandler должен только после выбора пользователем объектов на карте мышью. Сейчас естественно он запускается и после использования меню Query. Как деактивировать выполнение обработчика событий в данный момент?
Пробовала так
sub ToolHandler
if CommandInfo(CMD_INFO_TOOLBTN)=M_TOOLS_SELECTOR then
set Handler SelChangedHandler Off
end if
end sub
Никакого эффекта не достигла
Спасибо
Re: SelChangedHandler
Добавлено: 16 мар 2012, 06:05
SergS
можно включать свой SelChangedHandler при активизации окна карты (правда любого, в том числе и не содержащего необходимого) и отключать при активизации любого другого окна. Для этого включаем в программу процедуру:
Код: Выделить всё
Declare Sub WinFocusChangedHandler
Sub WinFocusChangedHandler
if windowinfo( CommandInfo(CMD_INFO_WIN), WIN_INFO_TYPE) = WIN_MAPPER then
set Handler SelChangedHandler On
else
set Handler SelChangedHandler Off
end if
End Sub
а toolhandler трогать здесь не надо, он для другого предназначен
ну и не думаю, что возможно будет отследить каким образом формирутся выборка - мышью, командой меню или в результате работы какой-то сторонней прогаммы - все что удастся - это отследить факт изменения выборки
разве что запретить в том же WinFocusChangedHandler все пункты меню Запрос

, ну и воостановив их при смене фокуса окна и при завершении работы прогаммы,
а как при этом отслеживать работу другух программ - хз, я заметил народ не утруждается применением предложения "Noselect"
Re: SelChangedHandler
Добавлено: 19 мар 2012, 18:03
Juls
Большое спасибо за ответ,
а для чего предназначен toolhandler?
и как спросить у пользователя хочет ли он продолжить выполнение приложения с SelChangedHandler или нет? Допустим если сделать следующим образом, то каждый раз в конце появляется диалоговое окно, но реакцией на Cancel является полное закрытие мапинфо, хотя нигде в программе нет ни End program ни End Mapinfo
sub SelChangedHandler
if (CommandInfo(CMD_INFO_SELTYPE)=1 or CommandInfo(CMD_INFO_SELTYPE)=3) then
note("tadah!

")
end if
if Ask("Terminate?", "OK", "Cancel") then
set handler SelChangedHandler off
end if
end sub
Спасибо

Re: SelChangedHandler
Добавлено: 20 мар 2012, 05:13
SergS
Juls писал(а):а для чего предназначен toolhandler?
а фиг его знает
на мой взгляд, самый бесполезный handler из всех мапинфошных. позволяет получить только координаты курсора мыши при его использовании, ну и решать, что с этими координатами делать - только вам самим. Самостоятельно не вызывается, только выбором кнопки.
С приведенным кодом SelChangedHandler - тут, помоему, у вас встретилась ситуация, на которую слегка намекает help по MB:
Замечание: Процедура SelChangedHandler не может активизировать другие окна. Другими словами, в процедуре SelChangedHandler не могут быть выполнены такие операторы, как Note, Print или Dialog.
это все, конечно, не так. Точнее не всегда так, но в вашем случае сработало. Кстати, приведенный вами код у меня срабатывает без нареканий - без падений мапинфо - и честно не отключает SelChangedHandler при выборе Cancel. Соответственно - отключает в противоположном случае.
