2012년 10월 15일 월요일

TreeView 에 데이터 저장하기

트리뷰에 캡션을 집어 넣기 위해서는
  TreeView1.Items.add( ParrentNode, '캡션') 이렇게 하면 되고
트리뷰에 Object를 집어 넣기 위해서는
  TreeView1.Items.AddObject( ParrentNode, '캡션', iMyObject) ; 이렇게 하면 됩니다.
현재 선택된  노드의 캡션을  읽어 오려면
var
  iTreeNode: TTreeNode;
begin
  if TreeView1.Selected <> nil then begin
    iTreeNode := TreeView1.Selected;
    Edit1.Text := iTreeNode.Text;
  end;
end;
또는 객체의 데이터를 읽어 오려면
var
  iTreeNode: TTreeNode;
begin
  if TreeView1.Selected <> nil then begin
    iTreeNode := TreeView1.Selected;
    Edit1.Text := TMyObject(iTreeNode.Data).addr;
  end;
end;
하면 됩니다.
그러나 트리뷰에서 가장 중요한 것은 특정 캡션의 자료를 찾는 것입니다.
재귀적 검색 방법에 의해서 찾아 보겠습니다.
function TForm3.GetNodeByCaption(ACurrNode: TTreeNode; const ACaption: string): TtreeNode;
var
  jTreeNode: TTreeNode;
begin
  Result:= nil;
  jTreeNode:= ACurrNode;
  while jTreeNode <> nil do begin
    // edit2.Text:= jTreeNode.Text; 디버깅용
    if CompareText(ACaption, jTreeNode.Text) = 0 then begin
      Result:= jTreeNode;
      exit;
    end else begin
      jTreeNode:= jTreeNode.getFirstChild;
      while jTreeNode <> nil do begin
        Result:= GetNodebyCaption(jTreeNode, ACaption);
        if Result <> nil then exit;
        jTreeNode:= jTreeNode.GetNextChild(jTreeNode);
      end;
    end;
  end;
end;

function TForm3.GetTVNodeByCaption(iTreeView: TTreeView; const ACaption: string): TTreeNode;
var
  iTreeNode : TTreeNode;
begin
  Result:= nil;
  iTreeNode:= iTreeView.Items.GetFirstNode;
  while iTreeNode <> nil do begin
    Result:= GetNodeByCaption(iTreeNode, ACaption);
    if Result <> nil then exit;
    iTreeNode:= iTreeNode.getNextSibling;
  end;
end;
를 먼저 선언 해놓고

procedure TForm3.Button3Click(Sender: TObject);
var
  iTreeNode: TTreeNode;
begin
  iTreeNode:= GetTVNodeByCaption(TreeView1, Edit1.Text);
  if iTreeNode <> nil then begin
     iTreeNode.Selected:= True;
     edit2.Text:= iTreeNode.Text;
  end;
end;
하면 됩니다.

댓글 없음:

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.