Q&A

  • [제발 도와주세요]계층을 어떻게 표현할지...?
어제에 이어 또 요청합니다..

좀 도와주세요.. 제 생사가 달려있어요..



ListView2에서 treeview1로 드래그&드롭 했을때



결과는

┼─A01 공구

│ └ A01A10 *****

│ └ A01A1010 ******

┟─B01 &&

│ └ B01A10 &&&&

│ └B01A1010 &&&&&



이런식이어야 하는데..



아래 코딩의 결과는

┼─A01 공구

│ └ A01A10 *****

│ └ A01A1010 ******

│ └ B01A1010 &&&&&

┟─B01 &&

│ └ B01A10 &&&&

│ └ B01A1010 &&&&&



이런 식으로 나오거든요..

왜 근런지.. 모르겠어요..



procedure Tces002pf.TreeView1DragDrop(Sender, Source: TObject; X,

Y: Integer);

var

TargetNode, SourceNode :TTreeNode;

SelectedItem : TListItem;

Str, techcd, jobareacd: String;

i, k: integer;

begin

inherited;

// Treeview1.Items.Clear;

SelectedItem := nil;

TargetNode := nil;

TargetNode := Treeview1.GetNodeAt(X, Y);



case TargetNode.Level of

0: begin

techcd := Copy(TargetNode.Text,1,1);

jobareacd := Copy(TargetNode.Text,2,2);

end;

1: begin

techcd := Copy(TargetNode.Parent.Text,1,1);

jobareacd := Copy(TargetNode.Parent.Text,2,2);

end;

2: begin

techcd := Copy(TargetNode.Parent.Parent.Text,1,1);

jobareacd := Copy(TargetNode.Parent.Parent.Text,2,2);

end;

end;

SelectedItem := ListView2.Selected;

i := 0;

k := 0;

if (TargetNode <> nil) then

begin

for i := 0 to (ListView2.SelCount-1) do

begin

if s = copy(SelectedItem.Caption, 1,3) then

begin

targetNode := nil;

TargetNode := Treeview1.GetNodeAt(X, Y);

TargetNode := Treeview1.Items.Item[0];

Inc(k);

Str := Techcd+Jobareacd+SelectedItem.Caption+' '+SelectedItem.SubItems[0];

TreeView1.Items.AddChild(TargetNode, str);

JobTypeQ.Append;

JobTypeQ.FieldValues['Pjtcd'] := GPjtcd;

JobTypeQ.FieldValues['Techcd'] := TechQ.FieldValues['Techcd'];

JobTypeQ.FieldValues['Jobareacd'] := TechQ.FieldValues['Jobareacd'];

JobTypeQ.FieldValues['JobTypecd'] := SelectedItem.Caption;

JobTypeQ.FieldValues['JobTPnm'] := SelectedItem.SubItems[0];

JobTypeQ.FieldValues['Dongcnt'] := TechQ.FieldValues['Dongcnt'];

JobTypeQ.FieldValues['prtseq'] := Count2;

JobTypeQ.FieldValues['Prtgrp'] := TechQ.FieldValues['prtgrp'];

JobTypeQ.FieldByName('Ajobtpcd').AsString := '';

JobTypeQ.FieldByname('SumFlag').AsInteger := 0;

JobTypeQ.Post;

Count2 := Count2+1;

S := copy(SelectedItem.Caption, 1,3);

end

else begin

targetNode := nil;

TargetNode := Treeview1.GetNodeAt(X, Y);

s := SelectedItem.Caption;

with JobCodeQ do

begin

close;

sql.clear;

sql.Add('select * ');

Sql.Add('from ces002ct ');

Sql.Add('Where Jobtypecd = '''+s+''' ');

Open;

end;

s := copy(SelectedItem.Caption, 1,3);

Treeview1.Items.AddChildObject(TargetNode, Techcd+jobareacd+s+' '+JobCodeQ.FieldValues['Jobtpnm'],SourceNode);

TargetNode := Treeview1.Items.Item[k];

inc(k);

Str := Techcd+Jobareacd+SelectedItem.Caption+' '+SelectedItem.SubItems[0];

TreeView1.Items.AddChild(TargetNode, str);

JobTypeQ.Append;

JobTypeQ.FieldValues['Pjtcd'] := GPjtcd;

JobTypeQ.FieldValues['Techcd'] := TechQ.FieldValues['Techcd'];

JobTypeQ.FieldValues['Jobareacd'] := TechQ.FieldValues['Jobareacd'];

JobTypeQ.FieldValues['JobTypecd'] := copy(SelectedItem.Caption, 1,3);

JobTypeQ.FieldValues['JobTPnm'] := jobCodeQ.FieldValues['Jobtpnm'];

JobTypeQ.FieldValues['Dongcnt'] := TechQ.FieldValues['Dongcnt'];

JobTypeQ.FieldValues['prtseq'] := Count2;

JobTypeQ.FieldValues['Prtgrp'] := TechQ.FieldValues['prtgrp'];

JobTypeQ.FieldByName('Ajobtpcd').AsString := '';

JobTypeQ.FieldByname('SumFlag').AsInteger := 0;

JobTypeQ.Post;

Count2 := Count2+1;

JobTypeQ.Append;

JobTypeQ.FieldValues['Pjtcd'] := GPjtcd;

JobTypeQ.FieldValues['Techcd'] := TechQ.FieldValues['Techcd'];

JobTypeQ.FieldValues['Jobareacd'] := TechQ.FieldValues['Jobareacd'];

JobTypeQ.FieldValues['JobTypecd'] := SelectedItem.Caption;

JobTypeQ.FieldValues['JobTPnm'] := SelectedItem.SubItems[0];

JobTypeQ.FieldValues['Dongcnt'] := TechQ.FieldValues['Dongcnt'];

JobTypeQ.FieldValues['prtseq'] := Count2;

JobTypeQ.FieldValues['Prtgrp'] := TechQ.FieldValues['prtgrp'];

JobTypeQ.FieldByName('Ajobtpcd').AsString := '';

JobTypeQ.FieldByname('SumFlag').AsInteger := 0;

JobTypeQ.Post;

Count2 := Count2+1;

S := copy(SelectedItem.Caption, 1,3);

end;

if Listview2.SelCount = 1 then

SelectedItem := Nil

else

SelectedItem := (Source as TListView).GetNextItem(SelectedItem, sdBelow, [isSelected]);

end;

end;

end;

3  COMMENTS
  • Profile
    이순희 1999.04.15 08:34
    안녕하세요...

    테이블에 시작시간과 끝시간에 대한 두개의 필드가 있습니다.

    두개의 필드에 대해 (끝시간-시작시간)의 값을 계산하고 싶습니다.

    즉, 시간간격을 계산하고 싶습니다.

    참고로 시작시간과 끝시간에 대한 데이터 type은 Time으로 두었습니다.

    답변 부탁드립니다..



  • Profile
    bluepine 1999.04.17 01:18
    이순희 wrote:

    > 안녕하세요...

    > 테이블에 시작시간과 끝시간에 대한 두개의 필드가 있습니다.

    > 두개의 필드에 대해 (끝시간-시작시간)의 값을 계산하고 싶습니다.

    > 즉, 시간간격을 계산하고 싶습니다.

    > 참고로 시작시간과 끝시간에 대한 데이터 type은 Time으로 두었습니다.

    > 답변 부탁드립니다..

    >



    안녕하세요, 미숙한 놈입니다.^^'

    델파이 헬퍼에서 답변한 것을 다시 적습니다.

    저도 초보자이지만 제가 아는 한도내에서

    답변을 해드리겠습니다.

    많은 도움이 된다면 참 좋겠어요..



    음, 계산필드란 말을 들어보셨는지요.

    계산필드를 사용하면 해결이 될것 같군요.



    방법은,

    첫번째로

    TTable(혹은 TQuery) 컴포넌트를 더블 클릭하면 필드 편집기가 보일 겁니다.

    보인다면, 필드 편집기에서 오른쪽 마우스 버튼을 클릭하세요.

    그럼, 팝업메뉴가 나타면서 Add Fields와 New Field란 메뉴가 보일 겁니다.

    그럼 New Field를 선택하고 나온 폼에서

    Name , Type(여기에서는 Time을 선택하면 되겠죠?)와 Size를 입력한후

    Field Type을 Calcurated로 선택합니다.

    그런 후, OK버튼을 누르시면 추가된 계산필드가 필드 편집기에 나타나죠?



    자, 그럼 두번째로

    두개의 필드값을 계산해서 이 계산 필드에 값을 넣도록 하면 됩니다.

    그러기 위해서는 OnCalcFields이벤트를 편집하면 됩니다.



    OnCalcFields이벤트는 TTable(or TQuery)컴포넌트의 이벤트에서 찾을 수

    있으며,

    코드를 살짝 함 보시도록 하죠.



    //테이블 컴포넌트의 이름이 UseTime이라 해보죠.

    //계산필드는 calcTime이라 하고요.



    procedure TForm1.UseTimeCalcFields(DataSet: TDataset);

    var

    startTime : TDateTime;

    lastTime : TDateTime;

    resultTime : TDateTime;

    begin

    startTime := UseTime.FieldByName('startTime').AsDateTime;

    lastTime := UseTime.FieldByName('lastTime').AsDateTime;

    resultTime := lastTime - startTime;



    UseTime.FieldByName('calcTime').AsDateTime :=

    resultTime;

    end;



    맞는지 모르겠군요.

    직접해보시고 안되면 다시 연락주세요..



    그럼, 좋은 하루 되세요.

    ^^



  • Profile
    글쎄요. 1999.04.15 19:02
    이순희 wrote:

    > 안녕하세요...

    > 테이블에 시작시간과 끝시간에 대한 두개의 필드가 있습니다.

    > 두개의 필드에 대해 (끝시간-시작시간)의 값을 계산하고 싶습니다.

    > 즉, 시간간격을 계산하고 싶습니다.

    > 참고로 시작시간과 끝시간에 대한 데이터 type은 Time으로 두었습니다.

    > 답변 부탁드립니다..

    >



    필드타입을 Date나 DateTime으로 바꾸시는 것이 좋아요.

    그래서 올바른 계산을 하실 수 있습니다.

    다음과 같은 함수를 사용해보셔요.





    Unit

    SysUtils

    선언부

    ////////////////////////////////////////////////////////////////////////////////

    function CalcTimeToSec( FromTime, ToTime: TDateTime ) : String;

    function CalcDateTimeToSec( FromTime, ToTime: TDateTime ) : LongInt;

    구현부

    ////////////////////////////////////////////////////////////////////////////////

    function CalcTimeToSec( FromTime, ToTime: TDateTime ) : String;

    begin

    Result := FormatDateTime( 'hh:nn:ss', ( ToTime - FromTime ) );

    end;



    ////////////////////////////////////////////////////////////////////////////////

    function CalcDateTimeToSec( FromTime, ToTime: TDateTime ) : LongInt;

    var

    FromTimeStamp, ToTimeStamp : TTimeStamp;

    begin

    FromTimeStamp := DateTimeToTimeStamp( FromTime );

    ToTimeStamp := DateTimeToTimeStamp( ToTime );



    Result := (ToTimeStamp.Date - FromTimeStamp.Date) * 24 * 60 * 60 + ( ( ToTimeStamp.Time div 1000 ) - ( FromTimeStamp.Time div 1000 ) );

    end;



    ////////////////////////////////////////////////////////////////////////////////

    • 정남용
    • 1999.04.16 01:29
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김정선
      1999.04.23 00:51
      저두 같은 문제로 올렸는데 고맙게도 web@ns.nilex.co.kr라는 분이 메일을 보내왔더라구요.. Autoexec.bat...
    • 이정욱
      1999.04.17 02:26
      저도 역시 이런 문제 때문에 고생을 한적이 있었습니다. 전 엑세스 DB를 사용했을때 문제였죠. 그래서 결...
    • 김정선
      1999.04.16 22:56
      저두 같은 문제가 있었어요.. 아시는 분 꼭좀 가르쳐 주세요 전 델파이4.0 오라클 8.0.5버젼을 가지고 ...
    • 이주흥
    • 1999.06.25 04:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.06.25 11:50
      100% VCL 이라면 따로 배포할 필요가 없습니다. 모든것은 생성된 EXE파일안데 들어가게 됩니다. 100% VCL...
    • 하명훈
    • 1999.06.25 04:17
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 문창완
      1999.04.17 00:42
      네모나 이미지의 각꼭지를 적당하게 라운드 처리하고싶습니다. 도와주세요... 멘날 질문만 하는 사람입...
    • 안치봉
      1999.04.17 01:17
      문창완 wrote: > 네모나 이미지의 각꼭지를 적당하게 > 라운드 처리하고싶습니다. > 도와주세요... > ...
    • 문창완
      1999.04.17 01:49
      안치봉 wrote: > 문창완 wrote: > > 이미지의 각꼭지를 적당하게 > > 라운드 처리하고싶습니다. > > ...
    • 안치봉
      1999.04.17 02:14
      문창완 wrote: > 안치봉 wrote: > > 문창완 wrote: > > > 이미지의 각꼭지를 적당하게 > > > 라운드 ...
    • 문창완
      1999.04.17 03:07
      정말 감사합니다... 조금만 복잡한 글만나요면... 프로그래밍 하는 사람으로써 세계화에 뒤쳐지지않을려...
    • 문창완
    • 1999.04.17 00:42
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.17 01:17
      문창완 wrote: > 네모나 이미지의 각꼭지를 적당하게 > 라운드 처리하고싶습니다. > 도와주세요... > ...
    • 문창완
      1999.04.17 01:49
      안치봉 wrote: > 문창완 wrote: > > 이미지의 각꼭지를 적당하게 > > 라운드 처리하고싶습니다. > > ...
    • 안치봉
      1999.04.17 02:14
      문창완 wrote: > 안치봉 wrote: > > 문창완 wrote: > > > 이미지의 각꼭지를 적당하게 > > > 라운드 ...
    • 문창완
      1999.04.17 03:07
      정말 감사합니다... 조금만 복잡한 글만나요면... 프로그래밍 하는 사람으로써 세계화에 뒤쳐지지않을려...
    • 변상준
    • 1999.06.25 01:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 행인1
      1999.06.25 02:10
      변상준 께서 말씀하시기를... > 컴포넌트명 앞의 'T'의 의미는 무엇입니까 ? "델파이에서는 일반적으로...
    • 신인재
      1999.06.25 02:06
      음냐.... T는 컴포넌트라기보다는 델파이의 클래스명을 정의할때 전통적으로 쓰이는 것이지요. 이...
    • 엠마
    • 1999.04.17 00:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.04.17 07:08
      엠마 wrote: > 입력폼에서 전화번호입력을 maskedit로 지역번호 4자리 국번4,전화번호4로 입력해 테이블에...
    • bluepine
      1999.04.17 01:37
      엠마 wrote: > 입력폼에서 전화번호입력을 maskedit로 지역번호 4자리 국번4,전화번호4로 입력해 테이블에...
    • 경험자
      1999.06.25 04:34
      이수진 께서 말씀하시기를... > 퀵리포트를 미리보기 하지않고 바로 프린터로 출력할때 생기는 문제입니다...
    • 하남수
      1999.06.25 02:28
      사용은 안해봤지만 다음 프러퍼티를 사용하면 되지 않을까요... QuickRep1.PrinterSettings.LastPage
    • 구창민
      1999.04.16 07:33
      이순희 wrote: > 안녕하세요... 또 질문 올리네요.. > 저번 답변 고마웠습니다.. 그런데.. 근본적인 문제...
    • bluepine
      1999.04.17 01:23
      구창민 wrote: > 이순희 wrote: > > 안녕하세요... 또 질문 올리네요.. > > 저번 답변 고마웠습니다.. ...
    • 이상준
    • 1999.06.24 22:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.06.24 23:52
      이상준 께서 말씀하시기를... > Stringgrid에서 특정Cell에 데이타를 입력하는 데 조건을 주고 싶습니다. ...
    • 유애선
    • 1999.06.24 22:08
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이순희
      1999.04.15 08:34
      안녕하세요... 테이블에 시작시간과 끝시간에 대한 두개의 필드가 있습니다. 두개의 필드에 대해 (끝시간...
    • bluepine
      1999.04.17 01:18
      이순희 wrote: > 안녕하세요... > 테이블에 시작시간과 끝시간에 대한 두개의 필드가 있습니다. > 두개...
    • 글쎄요.
      1999.04.15 19:02
      이순희 wrote: > 안녕하세요... > 테이블에 시작시간과 끝시간에 대한 두개의 필드가 있습니다. > 두개...
    • 양윤호
    • 1999.06.24 21:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.06.25 02:42
      양윤호 께서 말씀하시기를... > 윈도우즈 95와 98의 CD를 넣은 상태에서 직접 전화접속 어댑터와 전화접속...
    • 문창완
    • 1999.04.17 00:42
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.06.24 21:30
      preview화면에서 괜찮은데 인쇄를 하면은, 글자가 가로고 커져 나옵니다. 항상 그런것은 아니고 특정...
    • 안치봉
      1999.04.17 01:17
      문창완 wrote: > 네모나 이미지의 각꼭지를 적당하게 > 라운드 처리하고싶습니다. > 도와주세요... > ...
    • 문창완
      1999.04.17 01:49
      안치봉 wrote: > 문창완 wrote: > > 이미지의 각꼭지를 적당하게 > > 라운드 처리하고싶습니다. > > ...
    • 안치봉
      1999.04.17 02:14
      문창완 wrote: > 안치봉 wrote: > > 문창완 wrote: > > > 이미지의 각꼭지를 적당하게 > > > 라운드 ...
    • 문창완
      1999.04.17 03:07
      정말 감사합니다... 조금만 복잡한 글만나요면... 프로그래밍 하는 사람으로써 세계화에 뒤쳐지지않을려...
    • bds
    • 1999.06.24 20:27
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 하늘
    • 1999.04.16 20:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.17 00:47
      글쎄요... 광고/홍보란에 한번 써보세요. 하늘 wrote: > 안녕하세요... > 델파이로 만든 가계부 프...
    • heewoony
    • 1999.06.24 20:11
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하남수
      1999.06.25 00:05
      heewoony 께서 말씀하시기를... > 퀵레포트에서 라벨을 출력하려구합니다. > 근데. 출력 용지는 연속연...
    • 하남수
      1999.06.25 00:05
      heewoony 께서 말씀하시기를... > 퀵레포트에서 라벨을 출력하려구합니다. > 근데. 출력 용지는 연속연...
    • 엠마
    • 1999.04.17 00:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.04.17 07:08
      엠마 wrote: > 입력폼에서 전화번호입력을 maskedit로 지역번호 4자리 국번4,전화번호4로 입력해 테이블에...
    • bluepine
      1999.04.17 01:37
      엠마 wrote: > 입력폼에서 전화번호입력을 maskedit로 지역번호 4자리 국번4,전화번호4로 입력해 테이블에...