diff --git a/components/lazcontrols/lazcontrols.lpk b/components/lazcontrols/lazcontrols.lpk index 6853809445..2c2b1eecf8 100644 --- a/components/lazcontrols/lazcontrols.lpk +++ b/components/lazcontrols/lazcontrols.lpk @@ -5,7 +5,7 @@ - + diff --git a/components/lazcontrols/treefilteredit.pas b/components/lazcontrols/treefilteredit.pas index b1a86e4061..3f123b6a1e 100644 --- a/components/lazcontrols/treefilteredit.pas +++ b/components/lazcontrols/treefilteredit.pas @@ -422,31 +422,13 @@ begin end; procedure TTreeFilterEdit.MoveNext; -var - tn: TTreeNode; begin - tn := fFilteredTreeview.Selected; - if not Assigned(tn) then - begin - tn := fFilteredTreeview.TopItem; - if Assigned(tn) then - fFilteredTreeview.Selected := tn; - Exit; - end; - tn := tn.GetNext; - if Assigned(tn) then - fFilteredTreeview.Selected := tn; + fFilteredTreeview.MoveToNextNode; end; procedure TTreeFilterEdit.MovePrev; -var - tn: TTreeNode; begin - tn := fFilteredTreeview.Selected; - if not Assigned(tn) then Exit; - tn := tn.GetPrev; - if Assigned(tn) then - fFilteredTreeview.Selected := tn; + fFilteredTreeview.MoveToPrevNode; end; end. diff --git a/lcl/comctrls.pp b/lcl/comctrls.pp index 40629db2f6..6f56c309b1 100644 --- a/lcl/comctrls.pp +++ b/lcl/comctrls.pp @@ -2914,6 +2914,8 @@ type function GetLastMultiSelected: TTreeNode; function SelectionVisible: boolean; procedure MakeSelectionVisible; + procedure MoveToNextNode; + procedure MoveToPrevNode; public property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor default clWindow; diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index 794740545a..f34789aa63 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -3332,6 +3332,14 @@ begin end; end; +procedure TCustomTreeView.SetSeparatorColor(const AValue: TColor); +begin + if fSeparatorColor=AValue then exit; + fSeparatorColor:=AValue; + if tvoShowSeparators in Options then + Invalidate; +end; + procedure TCustomTreeView.SetShowButton(Value: Boolean); begin if ShowButtons <> Value then begin @@ -5435,12 +5443,42 @@ begin ANode.MakeVisible; end; -procedure TCustomTreeView.SetSeparatorColor(const AValue: TColor); +procedure TCustomTreeView.MoveToNextNode; +var + lNode: TTreeNode; begin - if fSeparatorColor=AValue then exit; - fSeparatorColor:=AValue; - if tvoShowSeparators in Options then - Invalidate; + if tvoAllowMultiSelect in FOptions then + lNode := FTreeNodes.FLastMultiSelected + else + lNode := Selected; + if lNode <> nil then + lNode := lNode.GetNextExpanded + else if Items.Count > 0 then + lNode := FTreeNodes.GetFirstNode; + if lNode <> nil then + if tvoAllowMultiSelect in FOptions then + FTreeNodes.SelectOnlyThis(lNode) + else + Selected := lNode; +end; + +procedure TCustomTreeView.MoveToPrevNode; +var + lNode: TTreeNode; +begin + if tvoAllowMultiSelect in FOptions then + lNode := FTreeNodes.FLastMultiSelected + else + lNode := Selected; + if lNode <> nil then + lNode := lNode.GetPrevExpanded + else if Items.Count > 0 then + lNode := Items.GetLastExpandedSubNode; + if lNode <> nil then + if tvoAllowMultiSelect in FOptions then + FTreeNodes.SelectOnlyThis(lNode) + else + Selected := lNode; end; // back to comctrls.pp