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