Q&A

  • 트리뷰에서 시간표현문제에 관하여 질문드립니다.
안녕하세요..

한 가지 풀리지 않는 문제가 있어 도움을 받고자 올립니다.

트리뷰를 이용해서 세계시간을 나타내는 간단한 프로그램을 해보고 있는데요..

나라이름을 선택하면 그나라와 우리나라와의 시차를 계산해서 표시해주는 간단한거죠..

근데 나라이름을 서브노드로 두고 대륙이름을 탑노드로 두어서 구현했는데 문제는 탑노드에 해당하는 걸 클릭했을때 아무변화가 없도록 하고싶은데 현재시간에서 1시간이 빠진 값으로 표현되는 겁니다. 예를 들어 아시아의 태국이 시차가 -2이라면 프로그램이 시작되면 처음에는 우리나라시각이 나타나고 태국을 클릭하면 계산된 값이 나타납니다. 여기서 아시아를 클릭하면 -1이 계산된 값이 나타난다 이거죠. 저는 아시아를 선택하기 이전의 값이 그대로 나타나길 원하는데.. 어떻게 하면 해결될까요?

참고로 소스를 같이 올리니까 보시고 많은 조언 부탁드리께요..



procedure TForm2.FormShow(Sender: TObject);

var

Topnode: TTreenode;

subNode: TTreenode;

begin

timer1.Enabled := true;

tv.Items.Clear ;

topnode:=tv.Items.AddChild(nil, '아시아');

subnode:=tv.items.AddChild(topnode, '일본');

subnode.stateIndex := 0;

subnode:=tv.items.AddChild(topnode,'태국,자카르타(인도네시아)');

subnode.stateindex := -2;

subnode:=tv.items.AddChild(topnode,'베트남,캄보디아');

subnode.stateindex := -2;

subnode:=tv.items.AddChild(topnode,'방글라데시');

subnode.stateindex := -3;

subnode:=tv.items.AddChild(topnode,'파키스탄');

subnode.stateindex := -4;



topnode:= tv.Items.AddChild(nil,'북미');

subnode:=tv.items.AddChild(topnode,'LA,산타모니카(미국)');

subnode.stateindex := -17;

subnode:=tv.items.AddChild(topnode,'시애틀,샌프란시스코(미국)');

subnode.stateindex := -17;



tv.Selected := tv.TopItem;

end;



procedure TForm2.Timer1Timer(Sender: TObject);

var

CurrentDateTime: TDateTime; // 현재의 시간

ResultDateTime: TDateTime; // 시차가 계산된 시간

begin

CurrentDateTime := Now;

if TimeTerm < 0 then // TimeTerm 이게 시차

ResultDateTime := CurrentDateTime - EncodeTime(-1 * TimeTerm, 0, 0, 0)

else

ResultDateTime := CurrentDateTime + EncodeTime(TimeTerm, 0, 0, 0);



label1.Caption :=datetostr(resultdatetime)+ ' ' + ' ' + timetostr(resultdatetime);



end;





procedure TForm2.TVChange(Sender: TObject; Node: TTreeNode);

begin

if tv.Selected = tv.topitem then timeterm := 0

else timeterm:=node.StateIndex;



end;



end.

1  COMMENTS
  • Profile
    최용일 2000.05.22 21:12
    안녕하세요. 최용일입니다.



    procedure TForm2.TVChange(Sender: TObject; Node: TTreeNode);

    begin

    if Tv.Selected.Level > 1 then

    begin

    if tv.Selected. = tv.topitem then timeterm := 0

    else timeterm:=node.StateIndex;

    end;

    end;



    ^^ 항상 즐코하세요.



    최진석 wrote:

    > 안녕하세요..

    > 한 가지 풀리지 않는 문제가 있어 도움을 받고자 올립니다.

    > 트리뷰를 이용해서 세계시간을 나타내는 간단한 프로그램을 해보고 있는데요..

    > 나라이름을 선택하면 그나라와 우리나라와의 시차를 계산해서 표시해주는 간단한거죠..

    > 근데 나라이름을 서브노드로 두고 대륙이름을 탑노드로 두어서 구현했는데 문제는 탑노드에 해당하는 걸 클릭했을때 아무변화가 없도록 하고싶은데 현재시간에서 1시간이 빠진 값으로 표현되는 겁니다. 예를 들어 아시아의 태국이 시차가 -2이라면 프로그램이 시작되면 처음에는 우리나라시각이 나타나고 태국을 클릭하면 계산된 값이 나타납니다. 여기서 아시아를 클릭하면 -1이 계산된 값이 나타난다 이거죠. 저는 아시아를 선택하기 이전의 값이 그대로 나타나길 원하는데.. 어떻게 하면 해결될까요?

    > 참고로 소스를 같이 올리니까 보시고 많은 조언 부탁드리께요..

    >

    > procedure TForm2.FormShow(Sender: TObject);

    > var

    > Topnode: TTreenode;

    > subNode: TTreenode;

    > begin

    > timer1.Enabled := true;

    > tv.Items.Clear ;

    > topnode:=tv.Items.AddChild(nil, '아시아');

    > subnode:=tv.items.AddChild(topnode, '일본');

    > subnode.stateIndex := 0;

    > subnode:=tv.items.AddChild(topnode,'태국,자카르타(인도네시아)');

    > subnode.stateindex := -2;

    > subnode:=tv.items.AddChild(topnode,'베트남,캄보디아');

    > subnode.stateindex := -2;

    > subnode:=tv.items.AddChild(topnode,'방글라데시');

    > subnode.stateindex := -3;

    > subnode:=tv.items.AddChild(topnode,'파키스탄');

    > subnode.stateindex := -4;

    >

    > topnode:= tv.Items.AddChild(nil,'북미');

    > subnode:=tv.items.AddChild(topnode,'LA,산타모니카(미국)');

    > subnode.stateindex := -17;

    > subnode:=tv.items.AddChild(topnode,'시애틀,샌프란시스코(미국)');

    > subnode.stateindex := -17;

    >

    > tv.Selected := tv.TopItem;

    > end;

    >

    > procedure TForm2.Timer1Timer(Sender: TObject);

    > var

    > CurrentDateTime: TDateTime; // 현재의 시간

    > ResultDateTime: TDateTime; // 시차가 계산된 시간

    > begin

    > CurrentDateTime := Now;

    > if TimeTerm < 0 then // TimeTerm 이게 시차

    > ResultDateTime := CurrentDateTime - EncodeTime(-1 * TimeTerm, 0, 0, 0)

    > else

    > ResultDateTime := CurrentDateTime + EncodeTime(TimeTerm, 0, 0, 0);

    >

    > label1.Caption :=datetostr(resultdatetime)+ ' ' + ' ' + timetostr(resultdatetime);

    >

    > end;

    >

    >

    > procedure TForm2.TVChange(Sender: TObject; Node: TTreeNode);

    > begin

    > if tv.Selected = tv.topitem then timeterm := 0

    > else timeterm:=node.StateIndex;

    >

    > end;

    >

    > end.