//==============================================================================
objInterface SS_Events;
end;
//==============================================================================
vipInterface SelStages implements SS_Events;
//==============================================================================
interface SelProjects 'Проекты';
show at (6,6,75,25)
create view as
select
Projects.Stage,
Projects.ProjectID,
Projects.ProjectName,
Projects.ResponsID,
Projects.AuthorID,
Projects.ProjectData,
Projects.ProjectMoney,
Personal.PersonID,
Personal.Name,
Personal.DepID,
Deps.DepID,
Deps.DepName
from
Personal,
Projects,
Personal PersonalA,
Deps DepsA
where
((
Projects.ResponsID == Personal.PersonID
and Projects.AuthorID == PersonalA.PersonID
and Personal.DepID == Deps.DepID
and PersonalA.DepID == DepsA.DepID
))
;
var
action: word;
pID : comp;
viSS : SelStages;
persNameFormat: longInt;
//------------------------------------------------------------------------------
tabbedSheet tsProjects;
show at (,,,10);
//------------------------------------------------------------------------------
browse brSelProjs 'Таблица проектов';
table Projects;
fields
ProjectName 'Название проекта' : [30], noProtect;
Personal.Name 'Ответственный' : [20], pickButton;
ProjectMoney 'Стоимость проекта': [20];
end;
//------------------------------------------------------------------------------
screen scrSelProjs 'Информация о проекте';
table Projects;
fields
ProjectName : noProtect;
Personal.Name : [20], pickButton;
PersonalA.Name: [20], pickButton;
Deps.DepName : protect;
DepsA.DepName : protect;
<<
Название проекта
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Ответственный сотрудник Автор
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Ответственный отдел Отдел автора
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
end;
//------------------------------------------------------------------------------
embedded scrSelStage 'Проекты по этапам' interface viSS;
end;
end;
//------------------------------------------------------------------------------
screen scrStage 'Стадия проекта';
show at (,11,,14);
table Projects;
fields
Projects.Stage : NoProtect;
<<
(.) Разработка`
(.) Кодирование`
(.) Тестирование`
>>
end;
//------------------------------------------------------------------------------
panel panText;
show at (,15,,);
text
ProjectData;
end;
//------------------------------------------------------------------------------
handleEvent
cmInit:
{
// Регистрация формата 'PersName' - такой-же как и в SelPers.
persNameFormat := DNDRegisterFormat('PersName');
// Эти поля могут принимать данные
DNDFieldAcceptDrag(brSelProjs, #Personal.Name);
DNDFieldAcceptDrag(scrSelProjs, #Personal.Name);
DNDFieldAcceptDrag(scrSelProjs, #PersonalA.Name);
DNDFieldAcceptDrag(brSelProjs, #Projects.ProjectName);
DNDFieldAcceptDrag(scrSelProjs, #Projects.ProjectName);
}
cmDragEnter: // Что-то хотят перетащить в поле ...
{
case DNDCurField of
#Personal.Name,
#PersonalA.Name:
if (DNDQueryGetData(persNameFormat) = S_OK) // если данные формата 'PersName',
DNDSetDropEffect(DROPEFFECT_LINK); // то могу подцепить !
#Projects.ProjectName :
if (DNDQueryGetData (CF_TEXT) = S_OK) // если текстовые данные,
DNDSetDropEffect(DROPEFFECT_COPY); // то могу скопировать !
end;
}
cmDragOver: // Продолжается перетаскивание (cmDragEnter прошел успешно)
{
if (DNDCurField = #ProjectName)
{
if DNDCheckKeyState(MK_SHIFT)
DNDSetDropEffect(DROPEFFECT_COPY) // Могу скопировать
else
DNDSetDropEffect(DROPEFFECT_MOVE);
}
}
cmDrop: // Бросили. Выесняем куда и считываем данные в нужное поле.
{
if DNDCheckKeyState(MK_SHIFT)
{
UpdateTable;
ClearBuffer (tnProjects);
}
case DNDCurField of
#Personal.Name:
{
DNDGetData(persNameFormat, Projects.ResponsID);
set Projects.ResponsID := Projects.ResponsID;
if DNDCheckKeyState(MK_SHIFT)
insert current Projects;
DNDSetDropEffect(DROPEFFECT_LINK);
}
#PersonalA.Name:
{
DNDGetData(PersNameFormat, Projects.AuthorID);
set Projects.AuthorID := Projects.AuthorID;
if DNDCheckKeyState(MK_SHIFT)
insert current Projects;
DNDSetDropEffect(DROPEFFECT_LINK);
}
#Projects.ProjectName:
{
DNDGetData(CF_TEXT, Projects.ProjectName);
set Projects.ProjectName := Projects.ProjectName;
if DNDCheckKeyState(MK_SHIFT)
insert current Projects;
// это необходимо сделать, чтобы источник знал, что произошло.
// иначе ему не придёт событие cmAfterEndDrag:
DNDSetDropEffect(DROPEFFECT_COPY);
}
end;
RescanPanel(tnProjects);
}
cmPick:
{
var res : word;
case CurField of
#Personal.Name:
res := RunInterface('SelPers', Projects.ResponsID);
#PersonalA.Name:
res := RunInterface('SelPers', Projects.AuthorID);
else
res := cmCancel;
end;
if (res <> cmCancel)
RescanPanel(tnProjects);
}
cmUpdateRecord:
update current Projects;
cmDeleteRecord:
delete current Projects;
cmInsertRecord:
insert current Projects;
end;
end.