SelChangedHandler

MapInfo, MapBasic
Ответить
Аватара пользователя
Juls
Интересующийся
Сообщения: 49
Зарегистрирован: 02 авг 2010, 10:30
Репутация: 1

SelChangedHandler

Сообщение Juls » 15 мар 2012, 20:10

Помогите пожалуйста в следующем вопросе:

В программе прописана последовательность действий для SelChangedHandler. И запускаться SelChangedHandler должен только после выбора пользователем объектов на карте мышью. Сейчас естественно он запускается и после использования меню Query. Как деактивировать выполнение обработчика событий в данный момент?
Пробовала так

sub ToolHandler
if CommandInfo(CMD_INFO_TOOLBTN)=M_TOOLS_SELECTOR then
set Handler SelChangedHandler Off
end if
end sub

Никакого эффекта не достигла

Спасибо

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: SelChangedHandler

Сообщение SergS » 16 мар 2012, 06:05

можно включать свой 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"

Аватара пользователя
Juls
Интересующийся
Сообщения: 49
Зарегистрирован: 02 авг 2010, 10:30
Репутация: 1

Re: SelChangedHandler

Сообщение Juls » 19 мар 2012, 18:03

Большое спасибо за ответ,

а для чего предназначен 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

Спасибо :)

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: SelChangedHandler

Сообщение SergS » 20 мар 2012, 05:13

Juls писал(а):а для чего предназначен toolhandler?
а фиг его знает :)
на мой взгляд, самый бесполезный handler из всех мапинфошных. позволяет получить только координаты курсора мыши при его использовании, ну и решать, что с этими координатами делать - только вам самим. Самостоятельно не вызывается, только выбором кнопки.

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

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

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