C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[43674] Re:Re:Re:Re:TChart 문제 (Logarithmic)
쩡이 [] 1116 읽음    2006-02-14 11:31
연이은 답변 감사드려요. ㅡ0ㅡ;
Synchronize()를 사용하고는 있습니다만, 의문점이..
현재 차트가 있는 폼의 함수를 불러오는 식으로 사용하고 있습니다.

Synchronize(Update);
...
TThread::Update()
{
   ....
   fChart->GraphScan(i1, i2, i3, i4);  //차트의 데이터 변경 함수
}
이런 방식으로 사용하고요..

Synchronize()를 사용할 때 권고사항이 이런 것으로 알고 있습니다.
TThread::Update()
{
   form1->Label1->Caption= 1234;
}
이렇게 직접 다뤄야 하는지,
제가 사용하는 것처럼 여러 단계를 거치더라도 (함수가 다른 함수를 부르고...)
Synchronize() 하위에 묶여있으면 괜찮은 것인지 궁금합니다.
오늘도 좋은 하루 되세요...



외랑 님이 쓰신 글 :
: 다시 질문 올려주셨군요..
: 첨부하신 오류메세지는 메모리 오류인거구요,
: Desired Increment 란 항목은 지정하고 싶은 증가치 를 설정하는 겁니다.
: 0인 경우는 자동으로 설정하고자 하는 것이구요...
: chtCurrent가 Chart이름인듯 한데,
:  // 요렇게 사용하실 수 있고 sValueX는 옵션입니다. 안줘도 무방하다는 말이지요
: chtCurrent->Series[0]->AddXY(iValueX, iValueY, "", clBlue);
:
:  if(iValueX>10)
:  {  // X축 인덱스가 10 넘으면
:          chtCurrent->Series[0]->Delete(0);    // 제일 처음의 데이타리스트를 지운다.
:          chtCurrent->BottomAxis->SetMinMax(chtCurrent->Series[0]->MinXValue(),
:                                        chtCurrent->Series[0]->MaxXValue());    //이렇게 하시면 자동으로 최소, 최대값으로
:  }
: 또 하나의 의문을 적으셨는데, 쓰레드에서 이 함수를 호출하신다고 하셨는데...
: 쓰레드에서 이처럼 화면 업데이트와 관련된 일을 할때는 상당히 주의를 요하구요..
: 여기서는 데이타 추가하면 자동적으로 화면업데이트가 일어나는 것으로 저도 정확히
:  Synchronize(GraphScan); 으로 써야 하는지 모르겠습니다만,
: VCL을 쓰레드에서 사용하는 것으로 생각해야 할 것 같아..  Synchronize()함수를 쓰시길
: 권합니다.
:
: 제 생각에는 Chart가 아닌 다른 이유로 오류가 나는 듯 합니다.
: 데이타로 쓰이는 포인터나 메모리 쪽을 주의 깊게 살펴보시기 바랍니다.
: 흔히 리스트를 사용할 때 메모리 오류를 범하기 쉽다는 것을 주의하시고,
: 소스를 차근 차근 살펴보시면서 점검해 보시길 권합니다.
:
: 도움이 별로 안되서 ^^* 그만 물러갑니다.
:
:
: 쩡이 님이 쓰신 글 :
: : 외랑님! 답변 감사드립니다.
: : Logarithmic이 로그함수였군요. 켁 ㅡ.ㅡ;
: : 예전 프로그램이 문제를 일으켰을 때 떴던 오류메세지를 캡쳐해서 첨부파일로 올립니다.
: : 이 두가지 메세지가 번갈아가면서 나타납니다.
: :
: : 지금 새롭게 알아낸 것인데 Desired Increment에 0을 넣었을 때, 이런 문제가 발생합니다.
: : 1을 넣으면 정상작동하고요.
: : 소스부분입니다.
: :
: : void __fastcall TfrmTemp::GraphScan(unsigned int Value)
: : {
: :     iValueX++;          // unsigned int 선언
: :     iValueY= Value;  // unsigned int 선언
: :
: :     AnsiString sValueX= FormatDateTime("HH:NN", Now());
: :     chtCurrent->SeriesList->Series[0]->AddXY(iValueX, iValueY, sValueX, clBlue);
: :
: :     if(iValueX>10) {  // X축 인덱스가 10 넘으면
: :         chtCurrent->SeriesList->Series[0]->Delete(0);
: :         chtCurrent->BottomAxis->SetMinMax(iValueX-9, iValueX);
: :     }
: : }
: :
: : 스레드에서 GraphScan()을 호출해서 차트를 그리고요.
: : 차트가 안보여질 때는 어떠한 값이 차트로 들어가도 잘 작동합니다.
: : 차트를 보고 싶을 때, 버튼을 클릭해서 ShowModal()로 폼을 띄울려는 그 순간,
: : ShowModal() 부분에서 Break가 걸리면서 에러메세지를 띄웁니다.
: : 프로그램을 처음으로 실행시키고, 처음으로 ShowModal로 볼 때, 일어나는 문제인데요.
: : 그 때 당시에 Y축으로 들어간 값이 대략 1200 이상의 값이 들어가 있으면 이런 현상이 나타납니다.
: :
: : Desired Increment을 조정해서 프로그램이 정상적으로 동작은 하는데 불안하네요.
: : 질문을 정리하면 X축, Y축의 입력값에 제한이 있는가,
: : 2의 32승까지는 값을 받아야하거든요.
: : 그리고 Desired Increment가 Y축 라벨의 값 표시 폭으로 이해하고 있는데,
: : 이런 것으로 인해 말씀드린 문제가 나타나는 것인지요?
: : 혹 문제점이 있어서 말씀해주시면 감사하겠습니다.
: : 좋은 하루 되세요.
: :
: :
: :
: : 외랑 님이 쓰신 글 :
: : : 쩡이님의 질문에 대한 답변
: : : : 처음에는 Y축 값으로 약1200이상 들어가면 프로그램이 오류메세지를 띄우면서 멈춰버렸습니다.
: : : - Y의 값이 1200보다 커지면 오류인가요? 질문을 잘 모르겠어요.. 조금 더 자세히 질문해 주시면 답변해드릴수 있을지도 모르겠습니다.
: : : : Y축 라벨이 50씩 값이 올라가는데요. 위쪽으로 갈수록 모여져서(?) 그려집니다.
: : : - Log를 사용하시면 당연히(?) 모여져서 그려집니다. Y값의 log값으로 생각해 보시면... 이해하실 수 있으실겁니다.
: : : 이는 Log함수의 특징이라 그렇습니다. 전 영역중 큰쪽이든 작은쪽이든 한쪽을 자세히(? 관심영역을) 보이고 싶을때 쓸수있습니다.
: : : Chart부분 소스를 보여주시면 좀 더 상세한 답변을 드릴수 있을지 모르겠네요..^^*
: : : 그럼 하시는 일 성공하시길 바랍니다.
: : :
: : :
: : : 쩡이 님이 쓰신 글 :
: : : : C++Builder 6 사용자입니다.
: : : : 빌더에 기본적으로 들어있는 TChart를 이용해서 그래프를 나타낼려고 합니다.
: : : : 처음에는 Y축 값으로 약1200이상 들어가면 프로그램이 오류메세지를 띄우면서 멈춰버렸습니다.
: : : : (저와 비슷한 문제를 겪은 질문이 몇 개 있더군요.)
: : : : 그래서 차트를 더블클릭하면 나타나는 Editing 창의 Axis/Scales 안의 Left Axis에 Logarithmic (대수?)
: : : : 이 옵션을 사용하니 커다란 값도 입력은 잘 받습니다.
: : : :
: : : : 질문드리고자하는 내용은..첨부파일을 보시면
: : : : Y축 라벨이 50씩 값이 올라가는데요. 위쪽으로 갈수록 모여져서(?) 그려집니다.
: : : : 균일하게 그리게하고 싶은데요.
: : : : 다른 컴포넌트와 충돌이 나는가 싶어 다른 컴퓨터에 빌더 하나만 달랑 설치해도 마찬가지입니다.
: : : : 어찌할지 모르겠습니다. 혹시 원래 그런건지도 모르겠구요.
: : : : 아시는 분은 알려주시면 감사하겠습니다.
: : : : 오늘 하루도 즐거이~

+ -

관련 글 리스트
43642 TChart 문제 (Logarithmic) 쩡이 956 2006/02/13
43649     Re:TChart 문제 (Logarithmic) 외랑 983 2006/02/13
43660         Re:Re:TChart 문제 (Logarithmic) 쩡이 932 2006/02/13
43662             Re:Re:Re:TChart 문제 (Logarithmic) 외랑 1987 2006/02/13
43674                 Re:Re:Re:Re:TChart 문제 (Logarithmic) 쩡이 1116 2006/02/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.