2012년 5월 23일 수요일

VirtualstringTree CheckState



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;