Q&A

  • 트리뷰에서 노드 선택시 이미지를 바꿀때... -.-
안녕하세요

트리뷰에서 이미지를 넣을때....

ImageList1 에 이미지를 각각 0 : '가' 라는 이미지를 1 : '나' 를 2 : '다' 를 이렇게 3개의 이미지를 넣어두었습니다.



트리는

Root

aaa

bbb

ccc 이렇게 만들어 놓았습니다.



Root는 트리뷰를 아예 더블클릭해서 Image index 와 Selected Index 에 값을 직접 2 로 주었습니다.

그리고 트리뷰에서 만약에 aaa라는 노드를 클릭했을때, 원래 이미지 값이 0 이니까..

1로 바꿔서 나타나게 하고 다시 bbb 라는 노드를 선택하면 aaa노드는 다시 0 의 값인 이미지가 나오고 bbb는 1의 이미지 값을 가져야되는데...

여기서 문제가 생겼습니다.



프로그램을 실행하면 Root는 2의 이미지 값을 가지죠....선택해도 계속 2의 이미지를 가

지죠.

그런데..문제는... -.-

aaa 의 노드를 선택하면 바로 1로 바뀌지 않고, 다른 노드를 선택해야지만 1로 바꿔요.



어떻게 하면 바로 선택하면 그 자리에서 이미지가 바뀔 수 있는지 가르쳐 주십시요.



procedure TForm1.TreeView1Click(Sender: TObject);

var

aaa, bbb : string;

begin

aaa := TreeView1.Selected.Text;

bbb := 'Root';

label1.Caption := aaa;



if aaa = bbb then

TreeView1.Selected.ImageIndex := 2

else

begin

TreeView1.Selected.ImageIndex := 1;

end;

end;

1  COMMENTS
  • Profile
    솔뫼마당 2001.03.28 00:46
    질문의 요지는 대충 이런 듯 한데...

    노드가 선택이 되면 '나' 그렇지 않으면 '가' 라는 이미지가 나오라는 뜻인 듯...

    맞나요?



    만약 맞다면 아래와 같이 해 보십시오.



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    TreeView1.StateImages := ImageList;

    end;



    procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;

    Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);

    begin

    case Node.Expanded of

    true : Node.StateIndex := 0;

    false : Node.StateIndex := 1;

    end;

    end;



    한 가지 문제는 StateIndex가 0 번째 인 이미지는 적용이 잘 안되는 문제가 혹

    생길수도 있습니다. 그럴 경우 0 번째에다 사용하지 않는 이미지를 하나 넣어 두시면

    될 것 같군요.





    sunny wrote:

    > 안녕하세요

    > 트리뷰에서 이미지를 넣을때....

    > ImageList1 에 이미지를 각각 0 : '가' 라는 이미지를 1 : '나' 를 2 : '다' 를 이렇게 3개의 이미지를 넣어두었습니다.

    >

    > 트리는

    > Root

    > aaa

    > bbb

    > ccc 이렇게 만들어 놓았습니다.

    >

    > Root는 트리뷰를 아예 더블클릭해서 Image index 와 Selected Index 에 값을 직접 2 로 주었습니다.

    > 그리고 트리뷰에서 만약에 aaa라는 노드를 클릭했을때, 원래 이미지 값이 0 이니까..

    > 1로 바꿔서 나타나게 하고 다시 bbb 라는 노드를 선택하면 aaa노드는 다시 0 의 값인 이미지가 나오고 bbb는 1의 이미지 값을 가져야되는데...

    > 여기서 문제가 생겼습니다.

    >

    > 프로그램을 실행하면 Root는 2의 이미지 값을 가지죠....선택해도 계속 2의 이미지를 가

    > 지죠.

    > 그런데..문제는... -.-

    > aaa 의 노드를 선택하면 바로 1로 바뀌지 않고, 다른 노드를 선택해야지만 1로 바꿔요.

    >

    > 어떻게 하면 바로 선택하면 그 자리에서 이미지가 바뀔 수 있는지 가르쳐 주십시요.

    >

    > procedure TForm1.TreeView1Click(Sender: TObject);

    > var

    > aaa, bbb : string;

    > begin

    > aaa := TreeView1.Selected.Text;

    > bbb := 'Root';

    > label1.Caption := aaa;

    >

    > if aaa = bbb then

    > TreeView1.Selected.ImageIndex := 2

    > else

    > begin

    > TreeView1.Selected.ImageIndex := 1;

    > end;

    > end;