Помогите пожалуйста в следующем вопросе:
В программе прописана последовательность действий для SelChangedHandler. И запускаться SelChangedHandler должен только после выбора пользователем объектов на карте мышью. Сейчас естественно он запускается и после использования меню Query. Как деактивировать выполнение обработчика событий в данный момент?
Пробовала так
sub ToolHandler
if CommandInfo(CMD_INFO_TOOLBTN)=M_TOOLS_SELECTOR then
set Handler SelChangedHandler Off
end if
end sub
Никакого эффекта не достигла
Спасибо
SelChangedHandler
- Juls
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 02 авг 2010, 10:30
- Репутация: 1
-
- Активный участник
- Сообщения: 120
- Зарегистрирован: 14 апр 2011, 13:24
- Репутация: 5
- Откуда: Екатеринбург
Re: SelChangedHandler
можно включать свой SelChangedHandler при активизации окна карты (правда любого, в том числе и не содержащего необходимого) и отключать при активизации любого другого окна. Для этого включаем в программу процедуру:
а toolhandler трогать здесь не надо, он для другого предназначен
ну и не думаю, что возможно будет отследить каким образом формирутся выборка - мышью, командой меню или в результате работы какой-то сторонней прогаммы - все что удастся - это отследить факт изменения выборки
разве что запретить в том же WinFocusChangedHandler все пункты меню Запрос
, ну и воостановив их при смене фокуса окна и при завершении работы прогаммы,
а как при этом отслеживать работу другух программ - хз, я заметил народ не утруждается применением предложения "Noselect"
Код: Выделить всё
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
ну и не думаю, что возможно будет отследить каким образом формирутся выборка - мышью, командой меню или в результате работы какой-то сторонней прогаммы - все что удастся - это отследить факт изменения выборки
разве что запретить в том же WinFocusChangedHandler все пункты меню Запрос

а как при этом отслеживать работу другух программ - хз, я заметил народ не утруждается применением предложения "Noselect"
- Juls
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 02 авг 2010, 10:30
- Репутация: 1
Re: SelChangedHandler
Большое спасибо за ответ,
а для чего предназначен 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
Спасибо
а для чего предназначен 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
Спасибо

-
- Активный участник
- Сообщения: 120
- Зарегистрирован: 14 апр 2011, 13:24
- Репутация: 5
- Откуда: Екатеринбург
Re: SelChangedHandler
а фиг его знаетJuls писал(а):а для чего предназначен toolhandler?

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

Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость