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