Интерфейс selpers.vip (Сотрудники) Назад В начало Вперед
//==============================================================================

interface SelPers 'Сотрудники' doAccept;
  show at (6,6,65,20)

create view as

select 
  Personal.PersonID,
  Personal.Name,
  Personal.DepID,
  Personal.Character,
  Deps.DepID,
  Deps.DepName

from 
  Personal,
  Deps

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

type MyRec = record
  Name  : string;
  DepID : comp;
end;

var
  action			 : word;
  choosPers			: comp;
  depNameBrowserFormat : longInt;
  persNameFormat	 : longInt;
  myData,
  myData2			: MyRec;

parameters
  choosPers;

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

browse brSelPers ('');
  show at (,,,10);
  table Personal;

fields
  Personal.Name  'Имя сотрудника': [20];
  Deps.DepName   'Отдел'		 : [35], PickButton;
end;

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

panel panText;
  show at (,11,,);

text memoID=memoCharacter
  Personal.Character 'Характеристика';
end;

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

handleEvent

cmInit:
{
  // Регистрация формата 'DepNameBrowser' - такой-же как и в SelDeps.
  depNameBrowserFormat := DNDRegisterFormat('DepNameBrowser');

  // Регистрация формата 'PersName' - такой-же как и в SelProjs.
  persNameFormat := DNDRegisterFormat('PersName');

  // Можем таскать из поля Name
  DNDFieldDropSource(brSelPers, #Personal.Name);

  // Поле Deps.DepName может принимать данные
  DNDFieldAcceptDrag(brSelPers, #Deps.DepName);
}

cmQueryStartDrag:
{
  // Запрос на начало перетаскивания (приходит от источника)
  if (DNDCurField = #Personal.Name)
	if (DNDSetData (persNameFormat, Personal.PersonID) = S_OK)  // Записываем PersonID
	DNDSetDropEffect (DROPEFFECT_LINK);  // Установка возможного действия (подцепка)
}

cmDragEnter:
{
  // Что-то хотят перетащить в поле ...
  if (DNDCurField = #Deps.DepName)					 // в поле Deps.DepName?
	if (DNDQueryGetData (depNameBrowserFormat) = S_OK) // данные формата 'DepNameBrowser'?
	DNDSetDropEffect (DROPEFFECT_LINK); 		// Могу подцепить !
}

cmDrop:
{
  // Бросили ...
  if (DNDCurField = #Deps.DepName)					 // .. в нужное поле ..
	// попробуем считать данные
	if (DNDGetData(depNameBrowserFormat, Personal.DepID) = S_OK)
	{
	set Personal.DepID := Personal.DepID;

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

	RescanPanel (tnPersonal);
}
}

cmUpdateRecord:
  update current Personal;

cmDeleteRecord:
  delete current Personal;

cmInsertRecord:
  insert current Personal;

cmDefault:
  ChoosPers := PersonID;

cmPick:
{
  var res : word;
  res := cmCancel;

  if (CurField = #DepName)
	res := RunInterface('SelDeps', Personal.DepID);

  if res <> cmCancel
  {
	SetModified(true);
	RescanPanel(tnPersonal);
  }
}

end;
end.