Көбірек

ArcObjects: ITool.OnMouseUp әдісінің орындалуын қалай анықтауға болады

ArcObjects: ITool.OnMouseUp әдісінің орындалуын қалай анықтауға болады


ArcMap-да мұрагерлікке ие құрал бар BaseCommand. Құрал қолданушыға экранда сызба салуға мүмкіндік береді.

Бұл құралды (ағымдағы құрал ретінде орнатылған) Windows UserForm-тан сілтемені қолдану арқылы іске қостым ICommandBars.find әдіс.

Енді терезелер қалай хабарлама алады, қашан ITool.OnMouseUp әдіс аяқталды ма? Мен жасаған оқиғалар жоқ екенін көремінIToolинтерфейс.


Құрал үшін BaseTool мұрагері болу керек. Егер сіз құралды қондырма ретінде емес, COM объектісі ретінде жасаған болсаңыз, онда сіз құралдан қасиет немесе айнымалы арқылы сілтеме формадан құралға жібере аласыз. Оқиға құралдарында OnMouseUp сілтемесі арқылы сіз қалағаныңызды жасай аласыз.


Менің бірінші идеям - құралдарыңызды OnMouseUp () әдісінен бас тарту және өз формаңызда тыңдайтын, бірақ жұмыс істемеуі мүмкін оқиғаны өртеу (бұл ешқашан қолданылмады)

Терезенің ілмегін пайдалану қауіпсіз жол болуы мүмкін. Бұл оқиғаларды ұстап қалудың төмен деңгейлі механизмдері. Толығырақ windows анықтама парағынан «Ілгектерге шолу» бөлімінен біле аласыз. Мен сіздің жағдайыңызда WH_MOUSE_LL пайдаланар едім.


OnMouseUp оқиғасы тек картаның бір жерін басқанда ғана іске қосылады. Егер сіз тілқатысу терезесін немесе картадан тыс кез келген жерді бассаңыз, оқиға өртенбейді.

Егер сіз картаны бассаңыз және оқиғаны (модаль емес) диалогқа түсіруге тырыссаңыз, онда сіз SeaJunk идеясын ұстануға болады.

  • Сіздің құралыңызда интерфейсті формаңызға сілтеме жасауға мүмкіндік беретін функциямен енгізіңіз, содан кейін onMouseUp оқиғасында y сіздің формаңызға кейбір функцияларды шақыра алады

    IFormNotifier интерфейсі {void SetFormToBeNotified (форма формасы); } YourTool сыныбы: BaseTool, IFormNotifier {Form _formToBeNotified = нөл;… сіздің кодыңыз… // IFormNotifier іске асырылуы жарамсыз SetFormToBeNotified (форма формасы) {_formToBeNotified = форма; } // OnMouseUp оқиғасының жалпыға жарамсыздығы OnMouseUp (int батырмасы, int ауысымы, int x, int y) {// егер сіздің формаңыздағы функцияны шақырыңыз, егер (_formToBeNotified! = Null) _formToBeNotified.callwhatheverfunctiontonotify (); }}

ICommandBars.find әдісімен тапқан ICommandItem-ден IFormNotifier-ге қол жеткізу үшін, ICommandItem.Command қасиетін IFormNotifier ретінде беруіңіз керек.

ICommandItem itemFound = commandBar.find (…); if (itemFound! = null) {IFormNotifier formNotifier = itemFound.Command as IFormNotifier; // форманы орнатыңыз, егер (formNotifier! = null) formNotifier.SetFormToBeNotified (бұл); }

Осылайша, модалды емес диалог терезесі картаны келесі рет басқан кезде хабарлама алады. Диалогты жапқан кезде жойылған пішінге қол жеткізбеу үшін нысанды нөлге теңестіру маңызды.


Бейнені қараңыз: ArcGIS Картометричні операції