На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Деактивая чужих акций

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Деактивая чужих акций
 
Здравствуйте господа разработчики !
Имеется задача PanTask. При нажатии на кнопку, создаётся "акция" (TPanAction)
В сам момент нажатия, работает (допустим) режим нанесения объекта
Вопрос, как завершить чужую акцию перед запуском своей.
--
П.С ситуация. Нажата кнопка создания объекта и запущена задача в которой нажата кнопка выбора объекта.
при клике на карту, происходит попытка нанесения. Если кнопку нанесения объекта отжать, моя акция "уходит в никуда"
кроме того, я не могу её завершить кроме как "сорвать" ГИС Карту .
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
При старте нового обработчика будет автоматически завершен активный обработчик.
Но обычно диалог, имеющий интерактивный интерфейс, запускается сразу из обработчика
и при этом другие обработчики деактивизируются.

Ниже импровизация на тему.
Код
TSaveAsPictrByObject::TSaveAsPictrByObject(TPanTask* task, int ident) :
                                           TPanAction(task, ident)
{
  ...
}

//-----------------------------------------------------------------
// Выполняется при инициализации класса
//-----------------------------------------------------------------
void TSaveAsPictrByObject::Setup()
{
  ...

  if (MapWindow->IsObjectSelected())
    {
     // Объект уже выбран
     // Здесь также вызывается Run()
     SelectObject(MapWindow->ObjectInfo);
    }
   else
     Run();
}


// --------------------------------------------------------------
//  Установить сохраняемую область по объекту карты
// --------------------------------------------------------------
int TSaveAsPictrByObject::SelectObject(HOBJ info)
{
  ...

  // Выполнить прикладную функцию
  Run();

  return 1;
}
//-----------------------------------------------------------------
// Выполняется после выбора границ фрагмента автоматически
//-----------------------------------------------------------------
int TSaveAsPictrByObject::Run()
{
  DialogActive = 1;

  // Вызвать диалог
  int ret = CallDialog();

  DialogActive = 0;

  if (ret == 0)
  {
    // Компенсация сдвига изображения
    MapWindow->Refresh(); 

    Quit();
    return 0;
  }

  if (Parm->Regime == XXXXXXX)
  {
    ...
    return 1;  // Обработчик не отключать
  }

  if (Parm->Regime == YYYYY)
  {
    ...
    return 1;  // Обработчик не отключать
  }

  Quit();
  return 1;
}

//-----------------------------------------------------------------
// Вызвать диалог
//-----------------------------------------------------------------
int TSaveAsPictrByObject::CallDialog()
{
  int ret = 0;

  long int (WINAPI * lpfn_func)(HMAP, char*, SAVEASPICTRPARM*, TASKPARMEX*, HOBJ);  // 14/11/05

  HINSTANCE libinst = 0;

  lpfn_func = (long int (WINAPI *)(HMAP, char*, SAVEASPICTRPARM*, TASKPARMEX*, HOBJ))
           ::mapLoadLibrary(MAPPICTRLIB,&libinst,
                                        "LoadMapToPictureDialogEx");
  if (lpfn_func != 0)
    {
     // Идентификатор окна карты
     Parm->Handle = MapWindow->GetHandle();

     ret = (*lpfn_func)((HMAP)MapDoc, (char*)&Title, Parm, MapWindow->GetTaskParmEx(), hObj);
    }

  // Выгрузка библиотеки
  if (libinst)
    mapFreeLibrary(libinst);   

  MapWindow->ChangeScale(1);

  // Согласовать описание данных в памяти и на диске
  // и обновить изображение
  // Если изменений в памяти нет - возвращает ноль
  MapWindow->AdjustData();

  return ret;
}
 
Спасибо, разобрался !
Если передавать результатом хендл акции - старая акция действительно "убивается"
----------------
Олег Валентинович, просьба ответить на тему  http://gisweb.ru/forum/forum2/topic6310/messages/
Не тот глуп кто не знает, а тот, кто не знает где искать.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности