Интерфейс SelDeps (Отделы) Назад В начало Вперед
//==============================================================================

interface SelDeps 'Отделы' doAccept;
  show at (6,6,58,30)

create view as

select 
  Deps.DepID, 
  Deps.DepName,
  SynDeps.DepDesc

from Deps,
  Deps SynDeps

where
((
  Deps.DepID == SynDeps.DepID
))
;

var
  chooseDep		 : comp;
  depNameBrowserFormat: longInt;

parameters
  chooseDep;

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

browse brSelDeps;
  show at (,,,9);
  table Deps;

fields
  Deps.DepName 'Названия отделов';
end;

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

panel panText;
  show at (,10);
  table Deps;

text memoID=memoDepDesc
  Deps.DepDesc 'Описание отдела';
end;

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

handleEvent

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

  // Устанавливаем приёмник
  DNDFieldAcceptDrag (brSelDeps, #Deps.DepName);

  // Устанавливаем источник
  DNDFieldDropSource (brSelDeps, #Deps.DepName);

  DNDFieldAcceptDrag (memoDepDesc, #Deps.DepDesc);
  DNDFieldDropSource (memoDepDesc, #Deps.DepDesc);
}

cmQueryStartDrag:
{
  // Запрос на начало перетаскивания (приходит от источника)
  if (DNDCurField = #Deps.DepName)
  {
	DNDSetDropEffect(DROPEFFECT_LINK);  // Установка возможного действия (подцепка)
	DNDSetData(depNameBrowserFormat, Deps.DepID); // Данные для подцепки - DepID
  }
}

cmDragEnter:  // Что-то хотят перетащить в поле ...
{
  if (DNDQueryGetData (CF_TEXT) = S_OK)					// если данные текстовые 
  {
	DNDSetDropEffect (DROPEFFECT_COPY or DROPEFFECT_MOVE); // то можно скопировать
  }
}

cmDragOver:  // Продолжается перетаскивание (cmDragEnter прошел успешно)
{
  if (DNDCurField = #Deps.DepName)
  {
	if DNDCheckKeyState(MK_SHIFT)
	DNDSetDropEffect(DROPEFFECT_COPY)  // могу скопировать
	else
	DNDSetDropEffect(DROPEFFECT_MOVE); // надо сделать, чтобы процесс не прервался
  }
}

cmDrop:  // Бросили ...
{
  if   ((DNDCurField = #Deps.DepName)	 // .. в нужное поле ..
	and (DNDQueryGetData (CF_TEXT) = S_OK)) // .. нужные данные ..
  {
	if (DNDCheckKeyState (MK_SHIFT))		// Проверка удерживания Shift'а ..
	{
	UpdateTable;
	ClearBuffer (tnDeps); 			 // .. да - вставка.
	DNDGetData (CF_TEXT, Deps.DepName);
	insert current Deps;
}
	else
	{
	DNDGetData (CF_TEXT, Deps.DepName);   // нет - замена.
	set Deps.DepName := Deps.DepName;
}

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

cmUpdateRecord:
  update current Deps;

cmDeleteRecord:
  delete current Deps;

cmInsertRecord:
  insert current Deps;

cmDefault:
  ChooseDep := Deps.DepID;

end;
end.