rgreat Posted December 17, 2015 Share Posted December 17, 2015 TUniTreeView: 1. Add event: TUniTreeView.OnNodeExpand; 2. Add event: TUniTreeView.OnNodeCollapse; 3. Add MultiSelection ability (similar to TTreeView) 4. Add parameter (Shift: TShiftState) to event: TUniTreeView.OnChange; 5. Fix not working parameter Shift in event: TUniTreeView.OnMouseDown; 6. Fix not working parameter Shift in event: TUniTreeView.OnMouseUp; 7. Implement BeginUpdates/EndUpdates to speed up items update process. 8. Fix progressive slowdown in AddChild function. 9. Add option to disable node selection with right mouse button, or make selection with RMB functional. 10. Add an ability to insert node in the middle of the tree. TUniTreeNode: 1. Add function GetNext: TUniTreeNode; 2. Add function GetPrev: TUniTreeNode; 3. Add function GetNextSibling: TUniTreeNode; 4. Add function GetPrevSibling: TUniTreeNode; 5. Add function TreeView: TUniTreeView; Thanks. Link to comment Share on other sites More sharing options...
rgreat Posted December 17, 2015 Author Share Posted December 17, 2015 P.S. Semi functional helper for TUniTreeNode (will fail on root nodes if you do not pass TreeView): TUniTreeNodeHelper = class helper for TUniTreeNode function GetNext(TV: TUniTreeView = nil): TUniTreeNode; function GetPrev(TV: TUniTreeView = nil): TUniTreeNode; function GetNextSibling(TV: TUniTreeView = nil): TUniTreeNode; function GetPrevSibling(TV: TUniTreeView = nil): TUniTreeNode; end; { TUniTreeNodeHelper } function TUniTreeNodeHelper.GetNext(TV: TUniTreeView = nil): TUniTreeNode; var P : TUniTreeNode; begin if Count>0 then begin Result:=Item[0]; end else begin Result:=GetNextSibling(TV); if Result=nil then begin P:=Parent; while P<>nil do begin Result:=P.GetNextSibling(TV); if Result<>nil then Exit; P:=P.Parent; end; end; end; end; function TUniTreeNodeHelper.GetNextSibling(TV: TUniTreeView = nil): TUniTreeNode; var i,n : integer; begin n:=-1; Result:=nil; if Parent=nil then begin if TV=nil then Exit; for i:=0 to TV.Items.Count-1 do begin if (TV.Items[i].Level=0) and (TV.Items[i]=Self) then begin n:=i+1; Break; end; end; if (n>=0) and (n<TV.Items.Count) and (TV.Items[n].Level=0) then begin Result:=TV.Items[n]; end; end else begin for i:=0 to Parent.Count-1 do begin if Parent.Item[i]=Self then begin n:=i+1; Break; end; end; if (n>=0) and (n<Parent.Count) then begin Result:=Parent.Item[n]; end; end; end; function TUniTreeNodeHelper.GetPrev(TV: TUniTreeView = nil): TUniTreeNode; begin Result:=GetPrevSibling(TV); if Result=nil then begin Result:=Parent; end; end; function TUniTreeNodeHelper.GetPrevSibling(TV: TUniTreeView = nil): TUniTreeNode; var i,n : integer; begin n:=-1; Result:=nil; if Parent=nil then begin if TV=nil then Exit; for i:=0 to TV.Items.Count-1 do begin if (TV.Items[i].Level=0) and (TV.Items[i]=Self) then begin n:=i-1; Break; end; end; if (n>=0) and (n<TV.Items.Count) and (TV.Items[n].Level=0) then begin Result:=TV.Items[n]; end; end else begin for i:=0 to Parent.Count-1 do begin if Parent.Item[i]=Self then begin n:=i-1; Break; end; end; if (n>=0) and (n<Parent.Count) then begin Result:=Parent.Item[n]; end; end; end; Link to comment Share on other sites More sharing options...
x11 Posted December 14, 2021 Share Posted December 14, 2021 On 12/17/2015 at 5:36 PM, rgreat said: 3. Add function GetNextSibling: TUniTreeNode; Подскажи, чем отличается от GetNext? тут у меня есть код http://forums.unigui.com/index.php?/topic/4218-extuxgridtristatetree/&tab=comments#comment-101192 так вот GetNextSibling работает правильно Link to comment Share on other sites More sharing options...
rgreat Posted December 14, 2021 Author Share Posted December 14, 2021 5 лет прошло. 😏 Топик давно не актуален. Ты как первый день родился. GetNext бежит по всему дереву, а GetNextSibling только по соседям. Link to comment Share on other sites More sharing options...
x11 Posted December 17, 2021 Share Posted December 17, 2021 ок, а что считается "соседом" Link to comment Share on other sites More sharing options...
Recommended Posts