Q&A

  • Treeview - 파라메터를 전달해서 자식노드 만들어주기..
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.
--------------------------------------------------------------
설명을 하긴 했는데.. 다른 분들이 봐서 뜻을 알 수 있을지 걱정이네요..
내용이 긴데, 읽어 주셔서 감사합니다.
4  COMMENTS
  • Profile
    최용일 2002.04.09 05:21
    안녕하세요. 최용일입니다.

    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;

    ^^ 항상 즐코하세요...

  • Profile
    김진아 2002.04.09 06:07
    조언 감사합니다. 소스를 수정해서 그 부분에서의 에러를 없애긴 했는데
    다른 에러가 납니다.
    ------------------------------------------------
    type
      elementArray = Array[0..20] of dtdTree.TFirstDtdElement;
    .
    .

    function TForm1.TreeMake(T:TTreeNode; node:elementArray ) :Integer;
    var
      i : integer;

    begin
      TreeView1.Images := ImageList1;
      i := 0;
      while node[i].name <> ''  do
      begin
        TreeView1.Items.AddChild(T,node[i].name);
        i := i + 1;
        TreeView1.Items.Item[i].ImageIndex := 2;
      end ;
      result := i;
    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) ;
    //이 부분에서 에러가 납니다. 에러 내용은
    // Incompatible types: 'elementArray' and 'Array' 라는 에러 입니다.
    // dtdTree.firstElement 나, elementArray  나 똑같은 Record 형 배열인데
    // 왜 다르다고 에러가 나는지 모르겠습니다.

      TreeView1.FullExpand;
    end;

    ------------------------------------------------------
    답변 주셔서 감사하구요.. 마지막으로 조언 부탁 드립니다. 죄송..
  • Profile
    최용일 2002.04.09 06:56
    델파이에서는...

    var
        A: array[0..10] of Integer;
        B: array[0..10] of Integer;

    위 두개의 변수를 다른 형으로 인식합니다.

    type
        TArray = array[0..10] of Integer;
    var
        A: TArray;
        B: TArray;

    이렇게 하면 A와 B는 같은 형이되구요...

    var  
        A, B: array[0..10] of Integer;

    이렇게 해도 같은 형입니다.

    델파이 헬프의 Type부분에 보시면 자세히 나옵니다...

    ^^ 항상 즐코하세요...

  • Profile
    김진아 2002.04.09 20:14
    답변 감사합니다.
    오늘 아침에 답변보고 제가 하려던 부분을 만들었습니다.
    좋은 하루보내세요.. ^^
    • 이성남
    • 2002.04.09 02:43
    • 0 COMMENTS
    • /
    • 0 LIKES
    • KYH
      2002.04.09 02:47
         Memo1.SelStart := 0;    Memo1.SelLength:= 0;    Memo1.SetFocu...
    • 김진아
    • 2002.04.09 02:32
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.04.09 05:21
      안녕하세요. 최용일입니다. Scope문제 같군요... 형선언부를 위로 올리시면 될거같네요... type &nb...
    • 김진아
      2002.04.09 06:07
      조언 감사합니다. 소스를 수정해서 그 부분에서의 에러를 없애긴 했는데 다른 에러가 납니다. ----------...
    • 최용일
      2002.04.09 06:56
      델파이에서는... var     A: array[0..10] of Integer;     ...
    • 김진아
      2002.04.09 20:14
      답변 감사합니다. 오늘 아침에 답변보고 제가 하려던 부분을 만들었습니다. 좋은 하루보내세요.. ^^
    • 조현정
    • 2002.04.09 02:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2002.04.09 02:39
      procedure TForm1.Button1Click(Sender: TObject); begin   // SendMessage(Memo1.Handle, EM_...
    • 최석기
      2002.04.09 02:30
      지금 도움말을 찾아보니까 Cast라는 함수가 있네여.. CAST(column_reference AS data_type) ex) S...
    • 박성경
    • 2002.04.09 02:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신석기
      2002.04.25 06:14
      다른분이 질문하셔서 답을 달아드렸는데 또 있군요 ^^; 한글 ime 모드 문제입니다. 개발환경에서 사용...
    • 공선옥
    • 2002.04.09 01:28
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.04.11 20:22
      직접 DBGrid에 입력을 하신다면, 답을 못 찾으실 겁니다.. 당연히, Dataset.FieldByName('수량').AsIntege...
    • 최은석
      2002.04.09 03:02
      DBGrid1.Fields[4].value := strtoint(edit1.text); DBGrid1.Fields[5].value := DBGrid1.Fields[3].valu...
    • 최은석
      2002.04.09 02:18
      DBGrid1.Fields[4].value := strtoint(edit1.text); DBGrid1.Fields[5].value := DBGrid1.Fields[3].value...
    • 공선옥
      2002.04.09 21:02
      아래와 같이 하니깐 에러 뜨는데.......어떻게 해야 하죠? 그리고 아래와 같이 하면 값을 저장하는 역할...
    • 김경록
      2002.04.11 20:27
      UpdateSQL을 사용하시지 않나여? 물론, 쿼리에서는 조인을 해서 가져오면 될테구.. UpdateSQL에서는 근태...
    • 정정호
      2002.04.09 02:26
      ...
    • 염상철
      2002.04.09 00:11
      전다른방법으로... 더블클릭에 하시던지..클릭에하시던지..이벤트에... var i:integer; for i:= 0 to...
    • 프로초보
      2002.04.09 01:19
      넵..글케하니깐 되씀다~~^0^ 답변 감사드리구욤.. 시간되심 밑에거 한번만 더 봐주시길 부탁드림다.. ...
    • 염상철
      2002.04.09 02:03
      선택안된부분더..for로 비교 하니까..항상 메세지가 뜨고빠져나오는겁니다.. 첫번째..리스트박스항목을 선...
    • 최석기
      2002.04.09 01:28
      procedure Tform1.btn1Click(Sender: TObject); begin   if listbox1.Itemindex = -1 then b...
    • 프로초보
      2002.04.09 02:51
    • 최석기
      2002.04.08 23:35
      예전에 제가 테스트 해보니까 Excel을 Com 객체로 생성해서 사용하는 경우랑 비교할때 Com 객체 없이 엑셀 ...
    • 유창원
      2002.04.09 00:16
    • 유창원
    • 2002.04.08 23:23
    • 5 COMMENTS
    • /
    • 0 LIKES
    • KYH
      2002.04.08 23:34
      var     Text : TextFile;      dum:String; begin  &n...
    • 유창원
      2002.04.08 23:51
      파일에 기존에 있던 내용을 없애고 처음부터 다시 쓰려면 어떻게 해야 하나요?
    • KYH
      2002.04.09 00:04
          Rewrite(Text); --->> 걍 다시씁니다 ^^;;;
    • 유창원
      2002.04.09 00:17
    • 최석기
      2002.04.08 23:31
      이렇게 함 해보시져.. 레코드 단위로 FileStrem에 Write 해보시져.. try     ...
    • 방용균
    • 2002.04.08 23:11
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
    • 2002.04.08 22:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Tk
      2002.04.09 00:00
      http://www.borlandforum.com 에 있떤 내용임다.
    • 신용관
    • 2002.04.08 22:26
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정진훈
    • 2002.04.08 22:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 손규만
    • 2002.04.08 22:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 염상철
    • 2002.04.08 21:34
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이성훈
      2002.04.08 22:03
      TQuery나 TTable  TField Object에서 해당Column의 EditMask를 변경하면 될것 같은데요. 그럼 ...
    • 염상철
      2002.04.08 22:57
      editMask값을 뭐라고 줘야 되져? ####-##-##하면... 2002- - 일케 나오는데... 알려주세여...
    • 염상철
      2002.04.08 23:39
      !99/99/00;0;_ 이렇게 넣으니까..되네여..
    • 염상철
      2002.04.09 02:38
      쿼리문에서.. select   substr(deliv_date,1,4)||'-'||substr(deliv_date,5,2)||'-'||substr(...
    • 박성훈
      2002.04.08 22:00
      안녕하세요? 날짜의 포맷은 제어판의 국가별설정의 영향을 받습니다. 그 부분과 관련된 사항인 것 같으...
    • 이동진
    • 2002.04.08 20:53
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 염상철
      2002.04.08 20:51
      저는..이런방법을 쓰곤 하는데염.. 쿼리를 오픈을 하지여.. With query1 do begin    &n...
    • 프로초보
      2002.04.08 23:39