Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.172.252] |
|
Сообщ.
#1
,
|
|
|
Имеются несколько узлов. Хочу чтобы после удаления одного из них, выделился следующий (если существовал) или предыдущий (то есть уже последний).
Удаляю так: VT.DeleteSelectedNodes; А что дальше - понятия не имею. |
Сообщ.
#2
,
|
|
|
Вот как я виделял у себя в програме
tvTB.Items.Item[1].Selected:=true; виделяю первую ветку Добавлено а вот под твои нужди var i:integer; begin i:=tvTB.Selected.Index; tvTB.Items.Item[i-1].Selected:=true; tvTB.Items.Item[i].Free; //или tvTB.Items.Item[i].Delete; |
Сообщ.
#3
,
|
|
|
ViktorXP не работает. Вообще я не могу добратся до этих итемов. Только вчера его установил.
|
Сообщ.
#4
,
|
|
|
Примерно так (код собирал на коленке, но походу должен работать):
if not Assigned(Node) then Exit; NextNode := VST.GetNextVisibleSibling(Node); if Assigned(NextNode) then VST.Selected[NextNode] := True else begin NextNode := VST.GetPreviousVisibleSibling(Node); if Assigned(NextNode) then VST.Selected[NextNode] := True end; VST.DeleteNode(Node); Вместо GetNextVisibleSibling/GetPreviousVisibleSibling можно использовать то, что больше нужно (хоть GetNextVisible/GetPreviousVisible, хоть что-то доругое) |
Сообщ.
#5
,
|
|
|
Цитата --= Eagle =-- @ код собирал на коленке Почему бы не написать проще? Node := VST.FocusedNode; if not Assigned(Node) then Exit; NextNode := VST.GetNextVisibleSibling(Node); if not Assigned(NextNode) then NextNode := VST.GetPreviousVisibleSibling(Node); if Assigned(NextNode) then VST.Selected[NextNode] := True; VST.DeleteNode(Node); |
Сообщ.
#6
,
|
|
|
впринципи у меня и тот способ работает но нашол способ попроще
procedure TForm1.Button1Click(Sender: TObject); begin if TreeView1.SelectionCount<1 then exit; TreeView1.Selected.Delete; TreeView1.SetFocus; end; |
Сообщ.
#7
,
|
|
|
Smike при использовании твоего примера выделенный узел удаляется но соседние не выделяются.
Если его модифицировать: Node := VT.FocusedNode; if not Assigned(Node) then Exit; NextNode := VT.GetNextVisibleSibling(Node); if not Assigned(NextNode) then NextNode := VT.GetPreviousVisibleSibling(Node); if Assigned(NextNode) then VT.Selected[NextNode] := True; vt.DeleteSelectedNodes; if Assigned(Node) then VT.Selected[Node] := True; то удаляются по очереди как надо кроме выделенного узла (он удаляется последним). В чем прикол? |
Сообщ.
#8
,
|
|
|
Вслепую переписал код Eagle-а, а о такой мелочи как назначение FocusedNode забыл
var Node, NextNode: PVirtualNode; begin Node := VST.FocusedNode; if not Assigned(Node) then Exit; NextNode := VST.GetNextVisibleSibling(Node); if not Assigned(NextNode) then NextNode := VST.GetPreviousVisibleSibling(Node); if Assigned(NextNode) then begin VST.FocusedNode := NextNode; // вот такая вот мелочь нужна еще VST.Selected[NextNode] := True; end; VST.DeleteNode(Node); |