VirtualStringTree의 체크 박스를 강제로 체크 되도록 하려면 아래와 같이 하면 된다.
키포인트는
TVirtualStringTree(Sender).CheckState[oHitInfo.HitNode] := csUncheckedNormal;
위와 같이 해야 정상적으로 체크 및 언체크 된다.
var
oHitInfo : THitInfo;
nTmp1 : TCheckState;
bTmp1 : boolean;
begin
if button <> mbLeft then exit;
TVirtualStringTree(Sender).GetHitTestInfoAt(x-TVirtualStringTree(Sender).OffsetXY.X
,y - TVirtualStringTree(Sender).OffsetXY.Y,false,oHitInfo);
if oHitInfo.HitNode = nil then exit;
if oHitInfo.HitColumn = 0 then exit;
// vstBookMarkChecking(Sender: TBaseVirtualTree;
// Node: PVirtualNode; var NewState: TCheckState; var Allowed: Boolean);
bTmp1 := true;
if oHitInfo.HitNode.CheckState = csCheckedNormal then begin
nTmp1 := csUncheckedNormal;
//oHitInfo.HitNode.CheckState := nTmp1;
TVirtualStringTree(Sender).CheckState[oHitInfo.HitNode] := csUncheckedNormal;
TVirtualStringTree(Sender).InvalidateNode(oHitInfo.HitNode);
TVirtualStringTree(Sender).RepaintNode(oHitInfo.HitNode);
end else begin
nTmp1 := cscheckedNormal;
//oHitInfo.HitNode.CheckState := nTmp1;
TVirtualStringTree(Sender).CheckState[oHitInfo.HitNode] := cscheckedNormal;
TVirtualStringTree(Sender).InvalidateNode(oHitInfo.HitNode);
TVirtualStringTree(Sender).RepaintNode(oHitInfo.HitNode);
end;