TreeView관련된 코딩을 하고 있는데.. 자꾸 막히네요.. 주위에 물어 볼 사람이
없는데.. 이 게시판에서 많은 도움을 얻고 있습니다.
다시 한 번 도움 부탁 드립니다.
-------------------------------------------------------------
여러계층을 가지고 있는 Treeview를 만들려고 합니다.
각 노드마다 여러개의 자식을 가질 수 있으므로 메서드를 하나 만들어
인자로 TTreeNode와 노드들의 값이 들어있는 배열을 넘기면, TTreeNode
아래 두번째 인자인 배열들의 값들이 들어간 노드를 만들려고 합니다.
그런데 두번째 인자인 배열들의 길이가 일정하지가 않기때문에 어떤
인자로 받아야 할 지 모르겠습니다.
아래는 소스입니다.
--------------------------------------------------------------
unit dtdTree; // 자식들의 내용이 들어간 배열을 만들어 준다 .
interface
type
TFirstDtdElement = RECORD
name : string; // 이름
level : string; // 레벨
id : string; // 고유 id
parentid : string; // 부모 id
count : integer; // 최대 개수
END;
procedure initNode;
var
firstElement : array[0..16] of TFirstDtdElement;
contact : array[0..2] of TFirstDtdElement; // 연락
onlineResource : array[0..1] of TFirstDtdElement; //온라인자원
implementation
procedure initNode;
begin
firstElement[0].name := '파일식별자';
firstElement[1].name := '언어코드';
.
.
contact[0].name := '전화';
contact[1].name := '주소';
contact[2].name := '온라인자원';
onlineResource[0].name := '연결';
onlineResource[1].name := '기능';
end;
end.
----------------------------------------------------------------
unit Test;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, ImgList;
type
TForm1 = class(TForm) // 최대 개수
TreeView1: TTreeView;
ImageList1: TImageList;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
function TreeMake(T:TTreeNode; node:Array) :Integer;
// 이곳에서 두번째 인자를 Array로 했는데 에러가 나네요..
// elementArray(사용자 정의)로 해도 에러가 나구.. ㅠ_ㅠ
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//elementArray : Array[0..20] of dtdTree.TFirstDtdElement;
// 제가 정의해서 쓸려고 했는데.. 에러가 납니다.
implementation
{$R *.DFM}
uses dtdTree;
function TForm1.TreeMake(T:TTreeNode; node:Array ) :Integer;
// 이 메서드 입니다.
var
i : integer;
j : integer;
begin
TreeView1.Images := ImageList1;
i := 0;
while dtdTree.firstElement[i].name <> '' do
// while Array[i].name <> '' do -> 이런 식으로 쓸려고 하는데..
begin
TreeView1.Items.AddChild(T,dtdTree.firstElement[i].name);
i := i + 1;
TreeView1.Items.Item[i].ImageIndex := 2;
end ;
result := i;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// showmessage(dtdTree.firstElement[2].name);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
initNode;
TreeView1.Items.Clear;
TreeView1.Items.Add(TreeView1.selected, '메타데이터');
i := TreeMake(TreeView1.Items[0],dtdTree.firstElement);
//이 부분에서 자식을 만들어 주는 메서드를 호출 합니다.
// 두번째 인자는 dtdTree.contact 또는 dtdTree.onlineResource 등의
//배열을 넣을려고 합니다.
TreeView1.FullExpand;
end;
end.
--------------------------------------------------------------
설명을 하긴 했는데.. 다른 분들이 봐서 뜻을 알 수 있을지 걱정이네요..
내용이 긴데, 읽어 주셔서 감사합니다.
Scope문제 같군요... 형선언부를 위로 올리시면 될거같네요...
type
TElementArray = Array[0..20] of dtdTree.TFirstDtdElement;
type
TForm1 = class(TForm) // 최대 개수
TreeView1: TTreeView;
ImageList1: TImageList;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
function TreeMake(T:TTreeNode; node: TElementArray) :Integer;
end;
^^ 항상 즐코하세요...