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
[51355] DrawGrid로 파형 그리기 문의
장준식 [] 2022 읽음    2007-11-26 18:42
안녕하세요..

볼렌드 C++ 빌더 2주 사용자입니다.  역시나 초보 ㅋㅋ

지금 DrawGrid를 이용해서 신호를 그리는 프로그램을 작성하고 있습니다.

파형에 대한 정의를 입력하면 신호가 grid에 표시되는 건 어느 정도 됐습니다.

그런데 문제가 주기가 긴 신호를 표시할때 그리드의 폭이 좁으면 당연히 스크롤바를 이용해서 이동을 해야겠지요.

DrawCell method가 셀별로 좌표를 잡다보니 문제가 좀 발생하네요..

그리드는 54개 행과 100개의 열로 구성이 되어있습니다. 한 열에 20포인트를 그리도록 되어 있구요.
따라서 총 2000포인트를 그리게 되어 있습니다. 한 화면에 보이는 그리드 포인트는 약 880 포인트 정도 되구요
스크롤바를 움직일때 마다 처음에는 0번 부터 880까지 보이게 하고 스클롤바를 오른쪽으로 당기면 20번 데이터부터 900번 데이터가 표시되도록 하고 싶습니다.

이부분 소스는 아래와 같습니다.

if((ARow > 0 && ARow < 55) && ACol > 0){
    for(int i = 0; i< 880;i++){
       //GraphPointY는 Y 좌표 값들이 들어 있구요 이걸 DrawGrid에 맞게 변환을 해야겠죠.. pPointData가 Grid에 그려질 좌표값들입니다.
       pPointData[ARow-1][i+columWidth*(ACol-1)].y = Rect.Bottom - GraphPointY[ARow-1][i+columWidth*(ACol-1)];
      // X 좌표는 DrawGrid의 가장 왼쪽 좌표로 고정 시켜 놨구요 이게 LeftPoint 거기서부터 880 포인트까지 구성합니다.
      pPointData[ARow-1][i+columWidth*(ACol-1)].x = LeftPoint + i;
   }
   이 데이터를 가지고 880 개의 데이터를 그립니다. 원래는 셀별로 들어가는 것만 그려야 하지만(20포인트) 렇게 하면 각 셀의 가장 오른쪽 그릴때 깨져서 부드럽지가 않은 관계로 그냥 880 포인트 한방에 다 그려버립니다. 이렇게 하니 깔끔하게 나오네요.
   pPattenEditorCanvas->Polyline(&pPointData[ARow-1][(ACol-1)*columWidth], 880);
}
여기서 문제는 마지막 라인의 Polyline에서 원하는 좌표만 그리고 싶은데 ACol이 계속 변하는 관계로 그래프가 엉망으로 나옵니다. 아시는 분은 무슨 말인지 아실겁니다. DrawCell의 특성상 그럴수 밖에 없죠.. 어떻게 좋은 방법 좀 있으면 조언 좀 부탁 드립니다.

+ -

관련 글 리스트
51355 DrawGrid로 파형 그리기 문의 장준식 2022 2007/11/26
51363     Re:DrawGrid로 파형 그리기 문의 장성호 1475 2007/11/26
51365         Re:Re:DrawGrid로 파형 그리기 문의 장준식 1161 2007/11/27
51368             Re:Re:Re:DrawGrid로 파형 그리기 문의 장성호 1399 2007/11/27
51367             자문자답하네요 ㅋㅋ 장준식 1092 2007/11/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.