rgreat Posted December 17, 2015 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.
rgreat Posted December 17, 2015 Author 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;
x11 Posted December 14, 2021 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 работает правильно
rgreat Posted December 14, 2021 Author Posted December 14, 2021 5 лет прошло. 😏 Топик давно не актуален. Ты как первый день родился. GetNext бежит по всему дереву, а GetNextSibling только по соседям.
Recommended Posts