Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
오현수님 꼭좀 봐주세요...
답변에 대해서 진심으로 감사드리고요..
소스를 주실수 있으면 꼭좀 주셨으면 합니다....
제가 전혀 모르거든요..
그럼, 좋은 주말되십시오...
2
COMMENTS
오현수
•
1999.11.16 04:35
나도질문 wrote:
> 답변에 대해서 진심으로 감사드리고요..
> 소스를 주실수 있으면 꼭좀 주셨으면 합니다....
> 제가 전혀 모르거든요..
> 그럼, 좋은 주말되십시오...
[나도 질문]님께
오늘 뉴즈그룹에서 아주 쓸만한 예제를 찾았습니다.
http://www.SavageSoftware.com.au/download/BdeFibTree.zip
에서 구하실수 있습니다.
아직 사용해 보지는 않았는데 소스를 보니, 함수 4개로 구성되어 있는데
무척 편리한 방법같습니다. Bookmark를 사용하니 검색을 다시해야 하는
번거로움도 없을것 같구요.
0
0
삭제
수정
댓글
오현수
•
1999.11.14 08:09
나도질문 wrote:
> 답변에 대해서 진심으로 감사드리고요..
> 소스를 주실수 있으면 꼭좀 주셨으면 합니다....
> 제가 전혀 모르거든요..
> 그럼, 좋은 주말되십시오...
[나도 질문]님 보세요.
원리는 다음과 같습니다.
TTreeView의 노드정보는
TreeNode에 들어 있는데 TreeNode의 프로퍼티중 Data가
Pointer를 참조할 수 있습니다.
Data에 직접 원하는 값을 넣으면 일은 간단하겠지만
범용의 목적을 위해 객체의 주소만을 가지게 됩니다.
우선 TreeView와 DB의 Table의 각 레코드들을 연결시키기 위해서는
레코드의 정보를 Data프로퍼티에 넣어야 하는데요, 여러 가지 방법이
있을 것 같은데 저는 TStringList를 이용했습니다.
StringList에 레코드의 키(key)값을 저장한 다음, StringList[]의 포인터를
Data프로퍼티에 넣는 거죠(좀 어렵나요?)
이렇게 한 후 TreeView의 OnChanging 이벤트에서
선택된 TreeNode의 Data에서 값을 읽어온 후
그 값(Key)로 Table등에서 검색을 실시하는 거죠. 물론 이 Table은
DBGrid나 기타 DB-controls에 연결이 되어 있어야 선택한
항목이 보여지겠죠.
(이해가 되셨으면 좋겠는데..)
아래의 코드는 제가 지금 하고있는 DB의 내용중
질문하신 내용과 관련된 부분을 조금 따오고, 수정한 내용입니다.
(소스가 좀 지저분 한 것 같아서 내용을 말씀드리면 학교 시설물을
각 구분별로 Tree를 구성하고 해당 시설물을 선택하면 그 내용을 DB-control에
보여주게 되는 부분입니다.)
(참고로 저는 DBMS로 Interbase-Server를 사용하고 있습니다. )
DB의 내용을 읽어와서 TreeView를 구성하는 부분입니다.
-------------------------------------------------------------
var
sPrevItem : string;
RNode, CNode, node : TTreeNode;
index : integer;
begin
if instiList = nil then
begin
//시설물의 키값을 저장할 StringList입니다.
//(다른 부분에서도 참조 되므로 전역변수로 선언되어 있어야 합니다.)
instiList := TStringList.Create;
end;
sPrevItem := '';
Query.Close();
//master라는 테이블로 부터 ino,name,part의 세 필드를
//part와 ino의 순서로 읽어들이고 있습니다.
with Query do begin
SQL.Clear();
SQL.Add('SELECT ino, name, part FROM master');
SQL.Add('ORDER BY part, ino');
end;
Query.Open();
instiList.Clear(); // TStringList의 내용을 Clear합니다.
//tvInstiList <- TTreeView입니다.
tvInstiList.Items.BeginUpdate(); //노드를 추가하기전 반드시 넣어주세요(속도 증가.)
tvInstiList.Items.Clear(); // 이전의 TreeView 노드를 제거합니다.
RNode := tvInstiList.Items.Add(nil, '구분별');
CNode := nil;
// part별로 Tree를 생성합니다.
repeat
if sPrevItem <> Query.FieldByName('part').AsString then
begin
CNode := tvInstiList.Items.
AddChild(RNode, Query.FieldByName('part').AsString);
CNode.ImageIndex := 1;
sPrevItem := Query.FieldByName('part').AsString;
end;
node := tvInstiList.Items.AddChild(CNode,
Format('%6s동 :%s',[ Query.FieldByName('ino').AsString,
Query.FieldByName('name').AsString ]) );
//StringList에 키값을 저장하고
index := instiList.Add(Query.FieldByName('ino').AsString);
//포인터 형으로 변환후 대입
node.Data := PString(instiList[index]);
Query.Next();
until Query.Eof;
tvInstiList.Items.EndUpdate();
Query.Close();
-----------------------------------------------------------------
//TreeView의 OnChanging 이벤트에 대한 처리입니다.
procedure TMainForm.tvInstiListChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
//Node는 마우스나 커서에의해 선택된 노드가 되므로
//Node.Data의 값을 얻어오면 됩니다.
//이때 주의 할 것은 위에서 Pointer형으로 넣었으므로
//String형으로 다시 변환을 해야 합니다.
//그리고 FindKey들의 함수를 써서 검색을 하면 됩니다.
//아래의 것은 제가 DataBank란 묘듈안에 FindMasterRecord란 function을 만들어 놓은 것입니다.
//간단하게 하자면
// Table.FindKey(['ino'], Stirng(Node.Data) )란 식으로 쓰면 되겠죠.
AllowChange := DataBank.FindMasterRecord( String(Node.Data));
end;
이외에 추가나 삭제등의 처리가 필요하고요
제가 Test한 결과로는 DB로부터 tree를 만들때 OnChanging 이벤트가
발생해서 검색을 실시합니다. 그러므로 속도가 무지하게 느려집니다.
그러므로 Tree의 노드를 추가할때는 OnChanging가 되지 않도록
코드를 해야만 합니다. 저는 추가시 OnChaneing를 Disable시키고 있습니다.
도움이 되었으면 좋겠네요.
좋은 주말 되세요..
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
이주흥
•
1999.11.13 21:00
1
COMMENTS
/
0
LIKES
오라클 Unix 와 NT버전 의 차이점.
오정운
•
1999.11.16 08:59
이주흥 wrote: > 안녕하세요... > 질문만 드리는 흥입니다.. > 오라클에 대해 궁금한게 있어서요.. > ...
JANG
•
1999.11.13 20:57
1
COMMENTS
/
0
LIKES
이정욱님 Thank you~~~
이정욱
•
1999.11.13 21:10
네. 자주 오셔서 답변도 해주시고 그러세요. 자유게시판, 지역게시판에서도 자주 뵈었으면 하는군요. 고럼....
미선
•
1999.11.13 20:44
1
COMMENTS
/
0
LIKES
검색방법에 대해서
이주흥
•
1999.11.13 21:04
미선 wrote: > 라디오 버튼을 이용해서 검색을 하려고 하는데요... > 1. edit에 검색할 단어 입력 > 2. ...
hopeship
•
1999.11.13 20:35
2
COMMENTS
/
0
LIKES
select 절에서 count(*) 함수를 썼는데...
오현수
•
1999.11.13 21:04
hopeship wrote: > 안녕하십니까. 희망선입니다. > 한가지 질문 사항이 있는데요. > > with DM.UserQu...
정은표
•
2000.12.30 11:02
오현수 wrote: > hopeship wrote: > > 안녕하십니까. 희망선입니다. > > 한가지 질문 사항이 있는데요. ...
초보자
•
1999.11.13 20:29
1
COMMENTS
/
0
LIKES
질문] 숫자값만 받아들이는 루틴을 사용하다가...
이정욱
•
1999.11.13 20:51
Key 가 #8 일때도 먹게 해주시면 됩니다. 이 외에 엔터키는 #13 입니다. 초보자 wrote: > 도와주세...
울보
•
1999.11.13 20:24
1
COMMENTS
/
0
LIKES
C/S버전의 Internet 컴포넌트를 스탠다드 버전
jang
•
1999.11.14 03:06
울보 wrote: > 엉엉엉... > > 클라이언트/서버 버전에 있는 인터넷 관련 컴포넌트들을 스탠다드 버전에...
박광식
•
1999.11.13 20:05
2
COMMENTS
/
0
LIKES
질문]memo 컴포넌트의 입력라인 제한 방법
이정욱
•
1999.11.13 21:17
If Memo1.Lines.Count > 4 then begin Memo1.Lines.Delete(0); Memo1.SelStart := Length...
진정한초보
•
1999.11.16 23:41
이정욱님 그런데... 중간 어느 라인에서 임의로 글자를 몇자 지우고 엔터키를 쳤을시 그댜로 넘어가는데...
조창범
•
1999.11.13 19:48
1
COMMENTS
/
0
LIKES
엑셀로 레포트를 작성하는방법?
오현수
•
1999.11.14 08:59
조창범 wrote: > 델파이로 작성된 쿼리를 가지고 프린트를 할때 엑셀의 미리보기 화면으로 먼저 보여주기...
BisBuck
•
1999.11.13 19:42
1
COMMENTS
/
0
LIKES
모든 Form최소화
이정욱
•
1999.11.13 21:09
Application.Minimize; 를 사용해 보세요. BisBuck wrote: > 프로그램을 만들었어여... > 음 예를...
양윤호
1999.11.13 19:30
0
COMMENTS
/
0
LIKES
Registry명령어중 WriteBinaryData 사용에 대해...
황선희
•
1999.11.13 18:57
1
COMMENTS
/
0
LIKES
DateTimePicker를 사용할 때
이정욱
•
1999.11.13 21:18
음.. 이상하군요.. 전 잘되는데요... 현재 사용하시는 델파이 버전을 말씀해 주세요. 황선희 wrote: ...
smkimpnt
•
1999.11.13 18:42
1
COMMENTS
/
0
LIKES
급!급! 설치하면서....
오현수
•
1999.11.14 09:04
smkimpnt wrote: > 설치도중에 PVCS를 찾을수 없다고 나오는데, 이 PVCS가 어떤 기능을 하는건지? > 또 ...
초보자
•
1999.11.13 17:59
1
COMMENTS
/
0
LIKES
panel에 대한 질문 드립니다.
JANG
•
1999.11.24 02:36
초보자 wrote: > 안녕하세요. > 저번에 질문드린 dbcombobox에 대한 빠른 답변 감사드립니다. > 또다른 ...
JANG
•
1999.11.13 18:13
1
COMMENTS
/
0
LIKES
TWAIN 지원 화상카메라 component 를 찾씁니다.
이정욱
•
1999.11.13 20:46
네. 한델(www.delphi.co.kr) 홈페이지 자료실에 올려 놓았습니다. 도움이 되셨기를... JANG wrote: ...
권은주
•
1999.11.13 13:22
1
COMMENTS
/
0
LIKES
TDatamodule공유는?
김고진
•
1999.11.15 20:00
권은주 wrote: > > Q&A목록에서 아무리 찾아봐도 해당되는 명꽤한 답변이 없어 질문드립니다. > 물...
김태성
•
1999.11.13 13:15
1
COMMENTS
/
0
LIKES
화상카메라로 화면에 화상을 표시하는 방법좀
이경문
•
2000.04.19 17:22
http://www.torry.ru/video.htm에서 TVideo Compoent가 짱입니다.
나도질문
•
1999.11.13 10:47
2
COMMENTS
/
0
LIKES
오현수님 꼭좀 봐주세요...
답변에 대해서 진심으로 감사드리고요.. 소스를 주실수 있으면 꼭좀 주셨으면 합니다.... 제가 전혀 모르거든요.. 그럼, 좋은 주말되십시오...
오현수
•
1999.11.16 04:35
나도질문 wrote: > 답변에 대해서 진심으로 감사드리고요.. > 소스를 주실수 있으면 꼭좀 주셨으면 합니...
오현수
•
1999.11.14 08:09
나도질문 wrote: > 답변에 대해서 진심으로 감사드리고요.. > 소스를 주실수 있으면 꼭좀 주셨으면 합니...
CHOBO
•
1999.11.13 07:43
1
COMMENTS
/
0
LIKES
이재식님..답변 감사합니다..그런데..다시한번더..
이재식
•
1999.11.15 03:21
안녕하십니까? 잘 보았습니다. 지금쯤이면 잘 해결하셨을 거라고 생각됩니다. 제가 메일을 보냈는데...
긴급
•
1999.11.13 06:36
1
COMMENTS
/
0
LIKES
도서관리 프로젝트를 만드는 데요...
이재식
•
1999.11.13 06:56
긴급 wrote: > 얼마전 부터 도서&비디오 관리 프로젝트를 만들거든요. > 그런데 책을 대여할 때에 회원 ...
박경서
•
1999.11.13 06:07
1
COMMENTS
/
0
LIKES
델파이와 비베중에서?
조복기
•
1999.11.13 22:34
안녕하세요..경서님~ 델파이와 비베를 비교하는문건은 여러사이트, 그리고 여러 피씨통신관련 동호회...
나도질문
1999/11/13 10:47
Views
275
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 답변에 대해서 진심으로 감사드리고요..
> 소스를 주실수 있으면 꼭좀 주셨으면 합니다....
> 제가 전혀 모르거든요..
> 그럼, 좋은 주말되십시오...
[나도 질문]님께
오늘 뉴즈그룹에서 아주 쓸만한 예제를 찾았습니다.
http://www.SavageSoftware.com.au/download/BdeFibTree.zip
에서 구하실수 있습니다.
아직 사용해 보지는 않았는데 소스를 보니, 함수 4개로 구성되어 있는데
무척 편리한 방법같습니다. Bookmark를 사용하니 검색을 다시해야 하는
번거로움도 없을것 같구요.