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에서 만들어서 사용했는데, 거기는 아직까지 이상이 없는 것 같네요.
한번 살펴봐 주시기 바랍니다.
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에서 만들어서 사용했는데, 거기는 아직까지 이상이 없는 것 같네요.
> 한번 살펴봐 주시기 바랍니다.
>