Что нужно: есть 3 связанных таблицы. 1-я browse; 2-Tree, цепляется к 1-й; 3-я Tree, цепляется к 2-й.
Проблема: browse и 2-й Tree работают нормально, но 3-й Tree не желает отображаться.... как я только не приседал-бесполезно!
Делаю так:
vew
чего то вы наприседались
по хорошему события должны быть разнесены если не по панелям, то по таблам. В конце концов всегда можно встроить фейс по Tbl3.
owner2 видимо при любом перемещении по tbl1,tbl2 нужно приравнивать 0 и делать jump на первую запись tree3.
Во! Точно! Пойду кофе налью, а то что-то тормозить стал
Попутный вопрос: как сделать, чтобы в гриде колонка как пометка(checkbox) отображалась? Как-то видел на форуме, но что-то ветку не найду...
а может лучше сразу весь фейс привести
что-то с логикой не понятно - похоже вы его циклите.
#Tbl3:{
owner2 := Tbl3.crec;
owner1 := comp(0);
TreeJumpToRecord(TreeTbl2, Tbl2.nrec);
}
у вас вроде обратная зависимость tbl3 от tbl2
здесь тоже непорядок
#Tbl2:{
TreeJumpToRecord(TreeTbl3, Tbl3.nrec);
наверное
TreeGetFirstEx
вместо
TreeJumpToRecord
да и вьюху остатвте одну (ну или первой)
везде где перемещаетесь по TreeDates надо прыгать на первую запись в TreeMain
а еще добавте протоколирование во все блоки ( через #IFDEF ) c использованием такой функции
Procedure LogTime( const wstr :string ) ;
{ //if wNotNeedTime then exit ;
if wstr='START' and fileexist(logfilenm) deletefile(logfilenm)
logstrtofile(logfilenm,Datetostr(cur_date,'дата DD/MM/YYYY')+
TimeToStr(cur_time,' тек.вр HH:MM:SS:SSS')+
TimeToStr(sub_time(cur_time,wtime),' - пред.этап = HH:MM:SS:SSS')+
' '+wstr) ;
wtime:=cur_time ;
}
wtime и logfilenm нужно объявить в var фейса и присвоить какие то значения в cmInit
edward_K
возникла еще приблема:
Т.к. дерево строится не по корневой таблице, возникает ситуация, когда таблица, по которой строится дерево, не валидна.
Если Встать на не валидную строчку, дерево дальше работать отказывается вообще!!!
Как у деревьев можно реализовать drag&drop ??? Есть ли стандартный механизм??
А вообще, мне нужно просто уметь менять порядок(положение) веток в дереве...
а причем тут деревья?
Interface uDragDrop EscClose ;
create view
var
PersNameFormat,DepNameBrowserFormat : LongInt;
as select Persons.nrec,Katpodr.nrec
from katpodr,persons,katpodr kat1(KATPODR02)
where (( 'С' == Persons.ISEMPLOYEE
and Persons.galdep == kat1.nrec ))
;
browse brPers show at (,,40,) ;
table Persons ;
fields
Persons.fio 'ФИО' :[20], protect ;
Kat1.name 'Подразделение' :[20], protect ;
end ;
// регистрируем поля для приема
DNDFieldAcceptDrag (brPers,#Kat1.Name);
}
cmQueryStartDrag:
{
// Запрос на начало перетаскивания (приходит от источника)
if (DNDCurField = #Katpodr.Name) {
if (DNDSetData (DepNameBrowserFormat, Katpodr.nrec) = S_OK) // Записываем PersonID
DNDSetDropEffect (DROPEFFECT_LINK); // Установка возможного действия (подцепка)
}
}
cmDragEnter:
{
// Что-то хотят перетащить в поле ...
if (DNDCurField = #Kat1.Name) // .. в поле Deps.DepName ? ..
if (DNDQueryGetData (DepNameBrowserFormat) = S_OK) // .. данные формата 'DepNameBrowser' ? ..
DNDSetDropEffect (DROPEFFECT_LINK); // .. Могу подцепить !
}
cmDragOver:
{
// Продолжается перетаскивание (cmDragEnter прошел успешно)
if (DNDCurField = #Kat1.Name)
DNDSetDropEffect (DROPEFFECT_LINK)
// (это надо сделать, чтобы процесс не прервался).
}
cmDrop:
{
// Бросили ...
if (DNDCurField = #Kat1.Name) // .. в нужное поле ..
if (DNDGetData (DepNameBrowserFormat, Persons.GalDep) = S_OK) {
// попробуем считать данные ...
UpDateTable; // .. успешно.
update current Persons;
RescanPanel (#Persons);
DNDSetDropEffect (DROPEFFECT_LINK);
// (это необходимо сделать, чтобы источник знал, что произошло.
// иначе ему не придёт событие cmAfterEndDrag )
}
}