プロジェクトで EStackOverflow 例外が発生することがあります。Delphi 2010 と最新バージョンの VirtualTreeView を使用しています。Eurekalog によって生成されたレポートには、次のような無限ループが含まれています。
(これは、バグレポートの「コール スタック」セクションの一部です)
SetNodeHeight
MeasureItemHeight
GetNodeHeight
GetDisplayRect
InvalidateToBottom
SetNodeHeight
MeasureItemHeight
GetNodeHeight
GetDisplayRect
InvalidateToBottom
SetNodeHeight
MeasureItemHeight
GetNodeHeight
GetDisplayRect
この行はすべて、VirtualTreeView の内部モジュールである VirtualTrees.pas にあります。
コントロールにアタッチされたイベント ハンドラーは次のとおりです。
- ツリーチェンジ
- ツリーの崩壊
- TreeFocusChanging
- TreeFreeNode
- TreeGetHint
- TreeMeasureItem
procedure TTrainingForm.TreeMeasureItem(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer);
begin
inherited;
if Sender.MultiLine[Node] then
begin
try
TargetCanvas.Font := Sender.Font;
NodeHeight := TVirtualStringTree(Sender).
ComputeNodeHeight(TargetCanvas, Node, 0) + 4;
except
NodeHeight := 24;
end;
end
end;
バグを再現することはできませんが、複数のサイトで発生することがあります。
この問題を修正または回避するにはどうすればよいですか?