美好的一天!TTreeView:AlphaSort滾動到選定節點(如MakeVisible)
我有一些問題。當我爲所選節點的父節點調用AlphaSort時(由於向下滾動或向上滾動樹形視圖,選定節點此時不可見),treeview滾動到所選節點(如調用MakeVisible)。我如何禁止樹視圖確保在排序過程中可見?我試圖攔截TVM_ENSUREVISIBLE這樣
type
TTreeNode = class(ComCtrls.TTreeNode)
protected
procedure EnsureVisible(var Message: TMessage); message TVM_ENSUREVISIBLE;
end;
type
TTreeView = class(ComCtrls.TTreeView)
protected
procedure EnsureVisible(var Message: TMessage); message TVM_ENSUREVISIBLE;
end;
...
{ TTreeView }
procedure TTreeView.EnsureVisible(var Message: TMessage);
begin
inherited;
ShowMessage('MakeVisibleFromTreeView');
end;
{ TTreeNode }
procedure TTreeNode.EnsureVisible(var Message: TMessage);
begin
inherited;
ShowMessage('MakeVisibleFromTreeNode');
end;
但在排序在滾動過程中沒有此消息的電話。只有在我手動調用MakeVisible的情況下。
這就是底層控件的行爲。要想出一個適用於所有場景的完全一般的解決方案將非常困難。 –
@David,您可以保存滾動條的位置,並在排序完成後恢復它,同時在排序過程中窗口將被鎖定以進行更新。 – TLama
@TLama是的。但是結果可能是控件現在顯示了樹的完全不同的部分。例如,在排序之前,如果在當前可見節點下面有一個展開的節點,其中有1000個子節點,不可見。然後,在排序之後,該展開的節點在樹上向上移動,您可能會想知道如何到達樹的這一部分。 –