//==============================================================================
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.