Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DragDrop в DBTreeList [D5, IB6.x]


RDA ©   (2003-02-13 12:13:00) 

Обычная таблица (ID,PARENT,KIND,NAZV) где KIND - smallint и определяет тип записи (подразделение-0, отдел-1, сотрудник-2). Свойство DBTreeList DragMode=dmAutomatic. При переносе все работает отлично но есть одно но - нижний уровень в иерархии сотрудник (KIND=2) - как недопустить переноса сотрудника так чтобы его родителем оказался тоже сотрудник. Думаю нужно обрабатывать событие DragOver - но не знаю как правильно это сделать.


RDA   (2003-02-15 13:28:00) [1]

Переписал снова,

procedure TfmStr.TreeListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TargetNode, SourceNode : TdxTreeListNode;
begin
TargetNode:=TreeList.GetNodeAt(X,Y);
SourceNode:=TreeList.FocusedNode;
if (TargetNode<>nil) and (SourceNode.ImageIndex>0) then
case TargetNode.ImageIndex of
0 : if SourceNode.ImageIndex in [1,2,3] then Accept:=True;
1 : if SourceNode.ImageIndex in [2,3] then Accept:=True;
2 : Accept:=False;
3 : Accept:=False;
end
else Accept:=False;
end;

Теперь глюк при переносе SourceNode.ImageIndex=1 в TargetNode.ImageIndex=0;
Вообщем не знаю в чем проблема. Буду очень признателен за помощь.


RDA   (2003-02-15 08:16:00) [2]

Последний вариант

procedure TfmStr.TreeListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TargetNode, SourceNode : TdxTreeListNode;
begin
TargetNode:=TreeList.GetNodeAt(X,Y);
SourceNode:=TreeList.FocusedNode;
if TargetNode<>nil then
case TargetNode.ImageIndex of
0 : if SourceNode.ImageIndex in [1,2,3] then Accept:=True;
1 : if SourceNode.ImageIndex in [2,3] then Accept:=True;
2 : Accept:=False;
3 : Accept:=False;
end;
end;

Тот же глюк TargetNode.ImageIndex=0 становиться родительским для SourceNode.ImageIndex=0.


RDA   (2003-02-14 18:40:00) [3]

Переписал и снова глюк

procedure TfmStr.TreeListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TargetNode, SourceNode : TdxTreeListNode;
begin
TargetNode:=TreeList.GetNodeAt(X,Y);
SourceNode:=TreeList.FocusedNode;
if TargetNode<>nil then
case TargetNode.ImageIndex of
0 : if SourceNode.ImageIndex in [1,2,3] then Accept:=True;
1 : if SourceNode.ImageIndex in [2,3] then Accept:=True;
2 : if SourceNode.ImageIndex in [2,3] then Accept:=False;
3 : if SourceNode.ImageIndex in [2,3] then Accept:=False;
else
Accept:=True;
end;
end;

Не пойму почему SourceNode.ImageIndex=0 спокойно переноситься в
TargetNode.ImageIndex=0


Sheriff   (2003-02-14 16:06:00) [4]

он пытается по картинкам определить сотрудник это или отдел.


MBo   (2003-02-14 15:07:00) [5]

я не знаю, что кроется под разными ImageIndex, но такое впечатление, что логика неверна -
>if SourceNode.ImageIndex=0 then Accept:=False;
этот результат дальше игнорируется
>if (SourceNode.ImageIndex=1) and (TargetNode.ImageIndex=0) then Accept:=True
else Accept:=False;
и этот тоже
if (SourceNode.ImageIndex in [2,3]) and (TargetNode.ImageIndex in [0,1]) then Accept:=True
else Accept:=False
только этот учитывается.

объедини логические выражения в одно либо вставь выход после каждого False


RDA   (2003-02-14 13:46:00) [6]

К данному вопросу - не пойму почему не работает данный код

procedure TfmStr.TreeListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TargetNode, SourceNode : TdxTreeListNode;
begin
try
TargetNode := TreeList.GetNodeAt(X,Y);
SourceNode := TreeList.FocusedNode;
if TargetNode<>nil then
begin
if SourceNode.ImageIndex=0 then Accept:=False;
if (SourceNode.ImageIndex=1) and (TargetNode.ImageIndex=0) then Accept:=True
else Accept:=False;
if (SourceNode.ImageIndex in [2,3]) and (TargetNode.ImageIndex in [0,1]) then Accept:=True
else Accept:=False;
end;
except
end;
end;


Соловьев   (2003-02-14 12:22:00) [7]

А там разве нет события OnDragOver в Object Inspector???


RDA   (2003-02-14 12:16:00) [8]

Неужели никто не знает ответа. Может неправильно сформулировал.


Наверх

Титульная страница Поиск, карта сайта Написать письмо