0

フィルタリング目的でノードの非表示と表示に関するテキストを読みましたが、ノードを表示/非表示にするために2000行を超える行を設定すると、

この量の行の後、ChildNodeを一番上に挿入しようとすると、一番下にノードが追加され、この行にはノードが表示されません。

コードで init value 2000 として言及されているVirtualTreeViewCacheThresholdのコードを見てみました。

関数ごとにノードを最初に追加すると、エラーを再現できます

Node := PGrid.InsertNode(nil, amAddChildFirst);

いつでも多くの行を追加できます。

しかし、この操作の後にこれらすべての行を表示に設定すると、

PGrid.IsVisible[Node] := True

さらにルート ノード (常に root=nil) を挿入しようとすると、ノード数がCacheThresholdを超えた場合に非表示ノードなどのように最下部に追加されます。

追加されたこの初期のチャイルドのために表示されている白い空白の領域のみが...ツリーの下部にある?

また、この空白の白い領域では、OnGetTextOnPaintイベントはトリガーされませんか?

私はCacheThresholdを増やそうとしましたが、これらの増分された数には問題ありませんが、数が増えると同じ問題が発生します。

[編集]

以下のコードを使用すると問題なく動作しますが、CPU 使用率が高くなり、

  PGrid.BeginUpdate;
  try
    Node := PGrid.InsertNode(nil, amAddChildFirst);
    Data := PGrid.GetNodeData(Node);
    Data.P := RowInformer;
    RowInformer.pNode := Node;
  finally
    Pgrid.EndUpdate;
  end;

  RowInformer.NodeisVisible;
  RowInformer.InvalidateRow;

しかし、次のようにコードを使用すると、しばらくの間動作し、2000 年以降に不安定になります (デフォルトのキャッシュしきい値)。ノードを一番上に追加しますが、2000 年に追加すると、一番下に追加され始め、ノードは非表示になりますが、ボリュームは空白の白い領域だけの行..コードをブローとして使用して、関係する行のみを更新したいのですが、2000 NodeisVisible() 関数呼び出し後に問題があります

Node := PGrid.InsertNode(nil, amAddChildFirst);
Data := PGrid.GetNodeData(Node);
Data.P := RowInformer;
RowInformer.pNode := Node;
if RowInformer.NodeisVisible then
  begin
      if PGrid.FullyVisible[Node] then
        PGrid.InvalidateNode( Node );
  end;

NodeisVisibleFunction は次のとおりです。

begin
  Result := True;
  try
        with OwnerGridTable do
        begin
            Result := Result and  Filter_Account.GetFilterResult(PItem.P040_AccountID.AsInteger);
            Result := Result and  Filter_SymbolID.GetFilterResult(PItem.P030_SymbolID.AsInteger);
            Result := Result and  Filter_OrderStatus.GetFilterResult(PItem.P060_OrderStatus.AsOrderStatus);
        end;


  finally

    if Result then
     begin
       if not (vsVisible in pNode.States) then
         OwnerGridTable.PGrid.IsVisible[pNode] := True;
     end
     else
     begin
         if (vsVisible in pNode.States) then
         OwnerGridTable.PGrid.IsVisible[pNode] :=  False;
     end;


  end;
4

0 に答える 0