Интерфейс selstage.vip (Проекты по этапам) Назад В начало Вперед
//==============================================================================

objInterface SS_Events;
end;

//==============================================================================

vipInterface SelStages implements SS_Events;

//==============================================================================

interface SelStages 'Проекты по этапам';
  show at (6,6,66,15)

create view as

select  
  Stage1.ProjectName,
  Stage2.ProjectName,
  Stage3.ProjectName

from 
  Projects,
  Projects Stage1,
  Projects Stage2,
  Projects Stage3

where
((
	integer (0) == Stage1.Stage
  and integer (1) == Stage2.Stage
  and integer (2) == Stage3.Stage
))
;

var
  stageFormat : longInt;

//------------------------------------------------------------------------------

browse brStage1 'Разрабатываемые проекты';
  show at (,,20,)
  table Stage1;

fields
  Stage1.ProjectName 'Разработка';
end;

//------------------------------------------------------------------------------

browse brStage2 'Кодируемые проекты';
  show at (21,,40,)
  table Stage2;

fields
  Stage2.ProjectName 'Кодирование';
end;

//------------------------------------------------------------------------------

browse brStage3 'Тестируемые проекты';
  show at (41,,,)
  table Stage3;

fields
  Stage3.ProjectName  'Тестирование';
end;

//------------------------------------------------------------------------------

handleEvent

cmInit:
{
  // Регистрация формата 'Stage format'
  stageFormat := DNDRegisterFormat('Stage format');

  // Эти поля могут принимать данные ..
  DNDFieldAcceptDrag(brStage1, #Stage1.ProjectName);
  DNDFieldAcceptDrag(brStage2, #Stage2.ProjectName);
  DNDFieldAcceptDrag(brStage3, #Stage3.ProjectName);

  // .. они же - источники
  DNDFieldDropSource(brStage1, #Stage1.ProjectName);
  DNDFieldDropSource(brStage2, #Stage2.ProjectName);
  DNDFieldDropSource(brStage3, #Stage3.ProjectName);
}

cmOnVIPLoad:
{
  // Регистрация формата 'Stage format'
  stageFormat := DNDRegisterFormat('Stage format');

  // Эти поля могут принимать данные ..
  DNDFieldAcceptDrag(brStage1, #Stage1.ProjectName);
  DNDFieldAcceptDrag(brStage2, #Stage2.ProjectName);
  DNDFieldAcceptDrag(brStage3, #Stage3.ProjectName);

  // .. они же - источники
  DNDFieldDropSource(brStage1, #Stage1.ProjectName);
  DNDFieldDropSource(brStage2, #Stage2.ProjectName);
  DNDFieldDropSource(brStage3, #Stage3.ProjectName);
}

cmQueryStartDrag: // Запрос на начало перетаскивания (приходит от источника)
{
  DNDSetDropEffect(DROPEFFECT_MOVE);  // Установка возможного действия (перемещение)

  case DNDCurField of // Выясняем откуда началось перетаскивание и записаваем данные
	#Stage1.ProjectName:
	DNDSetData(StageFormat, Stage1.ProjectID);

	#Stage2.ProjectName:
	DNDSetData(StageFormat, Stage2.ProjectID);

	#Stage3.ProjectName:
	DNDSetData(StageFormat, Stage3.ProjectID);

  else
	DNDSetDropEffect (DROPEFFECT_NONE);
  end;
}

cmAfterEndDrag:   // Куда-то утащили. Надо перерисоваться...
{
  RereadRecord(tnStage1);
  RereadRecord(tnStage2);
  RereadRecord(tnStage3);
}

cmDragEnter:
// Что-то хотят перетащить в поле ...
// Всё равно какое - мы-то знаем, кто может быть приёмником.
{
  if (DNDQueryGetData(StageFormat) = S_OK) // проверить формат, чтобы не попал мусор
	DNDSetDropEffect (DROPEFFECT_MOVE); // .. можно переместить
}

cmDrop: // Бросили. Выесняем куда и считываем данные.
{
  var bufID : comp;

  if (DNDGetData(stageFormat, bufID) = S_OK)
	if (getFirst Projects
		where ((bufID == Projects.ProjectID)) = tsOk)
	{
	case DNDCurField of

		#Stage1.ProjectName:
		Projects.Stage := 0;

		#Stage2.ProjectName:
		Projects.Stage := 1;

		#Stage3.ProjectName:
		Projects.Stage := 2;
	end;

	update current Projects;

	RereadRecord (tnStage1);
	RereadRecord (tnStage2);
	RereadRecord (tnStage3);

	// это необходимо сделать, чтобы источник знал, что произошло.
	// иначе ему не придёт событие cmAfterEndDrag:
	DNDSetDropEffect (DROPEFFECT_MOVE);  // .. Могу переместить
}
}
end;
end.

//==============================================================================

object SELSTAGES : InterfaceWindow {
  object BRSTAGE1 : Browser {
	Slider = 2;
  } // BRSTAGE1 : Browser
  object BRSTAGE2 : Browser {
	Slider = 2;
  } // BRSTAGE2 : Browser
  object BRSTAGE3 : Browser {
	Slider = 2;
  } // BRSTAGE3 : Browser
} // SELSTAGES : InterfaceWindow