Q&A

  • 트리뷰에서 Selectedindex를 임의로 정의하는 방법좀 가르쳐 주세요(무지 급해여)~
K := 100101;

Qry_Code.Close;

Qry_Code.ParamByName('A1').AsString := 'A01';

Qry_Code.Open;

while not Qry_Code.Eof do

begin



//인덱스가 0번째인 곳에 서브아이템을 증가한다

TreeView1.Items.AddChild(indextonode(0),Qry_CodeSc_Name.AsString);



//인덱스가 0번째인 곳에 SelectedIndex 를 지정

TreeView1.Selected.SelectedIndex := K; //*****에러부분*****//





K := k + 1;



Qry_Code.Next;

end;





function TS301QRF.indextonode(index:integer):TTreeNode; //루트로부터 index번째 노드 리턴

var

node:TTreeNode;

i:integer;

begin

node:=TreeView1.Items.GetFirstNode;// 첫번째 노드

for i:=0 to index-1 do

node:=node.getNextSibling;// 다음 노드

Result:=Node;

end;





//*******에러부분 보충설명***********

그 부분에서 제가 임의로 selectedindex를 증가할려구 하는데 잘 안 되네여..

방법이 있으면 좀 가르쳐 주세요...

부탁 합니다..



즐거운 하루 되세여^^~~~~~~~~~~~~~`



2  COMMENTS
  • Profile
    어린왕자 2000.10.05 18:08
    우희연 wrote:

    > K := 100101;

    > Qry_Code.Close;

    > Qry_Code.ParamByName('A1').AsString := 'A01';

    > Qry_Code.Open;

    > while not Qry_Code.Eof do

    > begin

    >

    > //인덱스가 0번째인 곳에 서브아이템을 증가한다

    > TreeView1.Items.AddChild(indextonode(0),Qry_CodeSc_Name.AsString);

    >

    > //인덱스가 0번째인 곳에 SelectedIndex 를 지정

    > TreeView1.Selected.SelectedIndex := K; //*****에러부분*****//

    >

    >

    > K := k + 1;

    >

    > Qry_Code.Next;

    > end;

    >

    >

    > function TS301QRF.indextonode(index:integer):TTreeNode; //루트로부터 index번째 노드 리턴

    > var

    > node:TTreeNode;

    > i:integer;

    > begin

    > node:=TreeView1.Items.GetFirstNode;// 첫번째 노드

    > for i:=0 to index-1 do

    > node:=node.getNextSibling;// 다음 노드

    > Result:=Node;

    > end;

    >

    >

    > //*******에러부분 보충설명***********

    > 그 부분에서 제가 임의로 selectedindex를 증가할려구 하는데 잘 안 되네여..

    > 방법이 있으면 좀 가르쳐 주세요...

    > 부탁 합니다..

    >

    > 즐거운 하루 되세여^^~~~~~~~~~~~~~`

    >



    음..안녕하세요..영원한 델초보 어린왕자입니다..

    저의 허접코드가 여기 있군여..T.T 저두 초보라서..

    근데..

    코드를 보니깐..

    SelectedIndex가 의미가 없는거 같습니다...

    목적이 루트로부터 첫번째노드에 계속 가지를 붙여주기만 하면 되는거 아닙니까?



    글구 마지막에 노드를 Selected시켜주면 되구요..(꼭 Select해야하나염?)



    > //인덱스가 0번째인 곳에 SelectedIndex 를 지정

    > TreeView1.Selected.SelectedIndex := K; //*****에러부분*****//

    >

    >

    > K := k + 1;



    그래서 이부분은 거의 필요가 없을껍니다..

    글구 Selectedindex는 imageindex와 같이 자주 쓰인다구 하는 군여..



    저의 말이 맞나 모르겠습니다..

    틀리거나 궁금한거 있으면...쪼금만 물어보셔요..







  • Profile
    신호성 2000.10.05 17:07
    우희연 wrote:

    > K := 100101;

    > Qry_Code.Close;

    > Qry_Code.ParamByName('A1').AsString := 'A01';

    > Qry_Code.Open;

    > while not Qry_Code.Eof do

    > begin

    >

    > //인덱스가 0번째인 곳에 서브아이템을 증가한다

    > TreeView1.Items.AddChild(indextonode(0),Qry_CodeSc_Name.AsString);

    >

    > //인덱스가 0번째인 곳에 SelectedIndex 를 지정

    > TreeView1.Selected.SelectedIndex := K; //*****에러부분*****//

    >

    >

    > K := k + 1;

    >

    > Qry_Code.Next;

    > end;

    >

    >

    > function TS301QRF.indextonode(index:integer):TTreeNode; //루트로부터 index번째 노드 리턴

    > var

    > node:TTreeNode;

    > i:integer;

    > begin

    > node:=TreeView1.Items.GetFirstNode;// 첫번째 노드

    > for i:=0 to index-1 do

    > node:=node.getNextSibling;// 다음 노드

    > Result:=Node;

    > end;

    >

    >

    > //*******에러부분 보충설명***********

    > 그 부분에서 제가 임의로 selectedindex를 증가할려구 하는데 잘 안 되네여..

    > 방법이 있으면 좀 가르쳐 주세요...

    > 부탁 합니다..

    >

    > 즐거운 하루 되세여^^~~~~~~~~~~~~~`





    지금 외부에 나와있어 델파이 도움말을 참조할 수 없기에 정확한 답변인지는 모르겠습니다.



    발생하는 에러가 런타임에 발생하는지 컴파일때 발생하는지...



    런타임에 발생한다면 선택된 노드가 nil이기 때문인 수 있습니다.



    TreeView1.Selected는 현재 트리뷰에서 선택된 노드이므로 마우스로 클릭하여 선택하지 않았다면 노드값은 nil입니다.



    > //아래와 같은 방법이 되는지 확인해 보시죠

    > TreeView1.items[0].SelectedIndex := K;



    그리고 Index번째 노드를 구하는 TS301QRF.indextonode(index:integer) 내용은 Loop를 이용하는 것이 비효율적이라는 생각이 드는군요.

    Result := TreeView1.Items[Index];

    로 바꾸어도 될 듯 싶은데 역시 도움말을 볼 수 없는 상황이라 확실하지는 않습니다.