Q&A

  • TreeView에서 Data를 Display하면...
Query를 사용하여 Data를 Select한 후, 정의된 Pointer에 맞게끔 데이타를 넣고

TreeView에 Add하였습니다. 아래 코딩처럼요.



procedure TForm1.TreeViewShow;

begin

Query.Close;

Query.SQL.Add('Select * From Test');

Query.Open;



TreeView1.Items.Clear;

RootNode := TreeView1.Items.Add(nil,'Root');

while not Query1.EOF do begin

New(MRPtr);

MRPtr^.ML0 := Query1.Fields[0].asInteger;

MRPtr^.ML1 := Query1.Fields[1].asInteger;

MRPtr^.ML2 := Query1.Fields[2].asInteger;

MRPtr^.Name := Query1.Fields[3].asString;



if Query1.Fields[0].asInteger <> 0 then

MyNode1 := TreeView1.Items.AddChildObject(RootNode,MRPtr^.Name, MRPtr);

.....

.....



Next;

end;



TreeView1.FullExpand;

end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Dispose(MRPtr);

end;



그런데 Form의 OnShow이벤트에 위와 같이 작성한 함수를 호출했을 때는 아무 이상이 없는데, DB에 새로운 데이타를 insert 한 후, TreeView를 Refresh하기 위해 위의 함수를 다시 한번 호출하면 TreeView의 내용이 이상하게 나옵니다.

(그러니까, 아까의 내용이 Clear가 되지 않는다든지, TreeView의 내용이 선택이 되지 않는다든지...)



제가 뭘 잘못한걸까요?

그런데 똑같은 함수를 다른 Form에서 만들어서 사용했는데, 거기는 아직까지 이상이 없는 것 같네요.

한번 살펴봐 주시기 바랍니다.



1  COMMENTS
  • Profile
    김성동 1999.06.08 01:04
    New로 할당한 메모리를 FormClose에서 해제하면 안되죠..



    TreeView의 OnDeletion Event를 작성하시고

    아래와 같이 코딩하시면...



    procedure TreeView1.OnDeletion(Sender: TObject; Node: TTreeNode);

    begin

    Dispose(MRPtr의 형(Node.Data));

    end;



    이렇게 해야 Clear 메소드를 호출할 때 New로 할당한 메모리를 자동으로 해제해 주죠.



    그럼...



    궁금이 께서 말씀하시기를...

    > Query를 사용하여 Data를 Select한 후, 정의된 Pointer에 맞게끔 데이타를 넣고

    > TreeView에 Add하였습니다. 아래 코딩처럼요.

    >

    > procedure TForm1.TreeViewShow;

    > begin

    > Query.Close;

    > Query.SQL.Add('Select * From Test');

    > Query.Open;

    >

    > TreeView1.Items.Clear;

    > RootNode := TreeView1.Items.Add(nil,'Root');

    > while not Query1.EOF do begin

    > New(MRPtr);

    > MRPtr^.ML0 := Query1.Fields[0].asInteger;

    > MRPtr^.ML1 := Query1.Fields[1].asInteger;

    > MRPtr^.ML2 := Query1.Fields[2].asInteger;

    > MRPtr^.Name := Query1.Fields[3].asString;

    >

    > if Query1.Fields[0].asInteger <> 0 then

    > MyNode1 := TreeView1.Items.AddChildObject(RootNode,MRPtr^.Name, MRPtr);

    > .....

    > .....

    >

    > Next;

    > end;

    >

    > TreeView1.FullExpand;

    > end;

    >

    > procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > Dispose(MRPtr);

    > end;

    >

    > 그런데 Form의 OnShow이벤트에 위와 같이 작성한 함수를 호출했을 때는 아무 이상이 없는데, DB에 새로운 데이타를 insert 한 후, TreeView를 Refresh하기 위해 위의 함수를 다시 한번 호출하면 TreeView의 내용이 이상하게 나옵니다.

    > (그러니까, 아까의 내용이 Clear가 되지 않는다든지, TreeView의 내용이 선택이 되지 않는다든지...)

    >

    > 제가 뭘 잘못한걸까요?

    > 그런데 똑같은 함수를 다른 Form에서 만들어서 사용했는데, 거기는 아직까지 이상이 없는 것 같네요.

    > 한번 살펴봐 주시기 바랍니다.

    >





    • rflag
    • 1999.06.08 19:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.09 02:39
      스크린세이버를 델파이로 만드시고 거기에 v3를 winexec로 실행시키는 코드를 추가 하시면 될꺼 같습니...
    • VMNT
    • 1999.06.08 15:48
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김태훈
    • 1999.06.08 12:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.08 19:37
      음냐....제가 보기에두 별루 틀린데가 없는듯 하군요... 제가 잘못 보았을 수도..... 다음과 같이 다시한...
    • 바이도
      1999.06.08 18:09
      TCP/IP Socket통신은 아주 쉽습니다. 아래의 HomePage에 접속해보세요. 콤포넌트및 필요한 예제 프로그램...
    • 유승진
      1999.06.09 01:34
      너무 너무 감사합니다.. 화일은 다운 받았구요.. 참고가 되었으면 좋겠습니다. 감사하구요.... 이렇게 ...
    • dream102
    • 1999.06.08 06:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.08 10:21
      dream102 께서 말씀하시기를... > 고맙습니다. 구창민님 근데요 > 무슨 말인지 잘 모르겠네요 > 제가 ...
    • 최진수
    • 1999.06.08 05:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.08 05:51
      최진수 께서 말씀하시기를... > > DBGrid에서 특정 row를 더블클릭해서 얻은.... > DBGrid에서 특정 ...
    • dream102
    • 1999.06.08 05:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 모승열
      1999.06.09 00:01
      dream102 께서 말씀하시기를... > 델파이로 프로젝트 파일을 저장할때 숫자로 하면 안되나요 > 숫자로 저...
    • 송기원
    • 1999.06.08 03:24
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 궁금이
      1999.06.08 18:36
      송기원 께서 말씀하시기를... > Hint가 나타나는 시간을 좀 더 빠르게 할 려고 하는데... > 어떻게 해야 ...
    • 안치봉
      1999.06.08 03:36
      송기원 께서 말씀하시기를... > Hint가 나타나는 시간을 좀 더 빠르게 할 려고 하는데... > 어떻게 해야 ...
    • 이재훈
    • 1999.06.08 03:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 바이도
      1999.06.08 18:15
      Update TESTTABLE set AAFIELD = ' ' where AAFIELD is null; TESTTABLE : TABLE NAME AAFIELD ...
    • 송기원
      1999.06.08 03:19
      Update 테이블이름 set 컬럼이름 = null where 조건문 Ex. Update Employee set new_salary = null ...
    • 황하강
    • 1999.06.08 02:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.06.08 18:57
      황하강 께서 말씀하시기를... > 질문] > 델파이 2 에서 TCP/IP를 이용해서 서버와 데이타를 주고 받는 ...
    • 마성수
    • 1999.06.08 02:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.06.08 03:41
      마성수 께서 말씀하시기를... > 도스에서 copy test*.txt error.txt라고 치면 > error.text에는 test1.tx...
    • 궁금이
    • 1999.06.08 00:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김성동
      1999.06.08 01:04
      New로 할당한 메모리를 FormClose에서 해제하면 안되죠.. TreeView의 OnDeletion Event를 작성하시고 ...
    • 블루
    • 1999.06.07 23:36
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 송기원
    • 1999.06.07 22:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.06.08 00:37
      송기원 께서 말씀하시기를... > Project를 디버깅중에 자꾸 Bordbk40.dll에서 access Violation error > ...
    • 박종성
    • 1999.06.07 22:53
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김성동
      1999.06.08 00:57
      탐색기 역할을 하는 콤포넌트는 안치봉님께서 말씀하신 상용 콤포넌트 말고 여러가지 공개 콤포넌트들이 있...
    • 안치봉
      1999.06.08 00:42
      박종성 께서 말씀하시기를... > 안녕하세요! 여러분 > > 델파이에서는 Drive나 Directory, Filelistbox...