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
[20497] Re:감사하구요~ 또 궁금한게 있어서요^^
김백일 [cedar] 902 읽음    2002-07-29 22:21
이용주 님이 쓰신 글 :
: 김백일님 저의 질문에 대해서 답변 감사드립니다.
: 헤헤. 그런데 그거 해결하는데 시간이 조금 걸릴듯..^^;;
: 또 다들 질문이 있어서 이렇게 글을 적습니다.

'다들'이 아니고 '다른'이겠죠. -_-a

: 다음의 소스를 보면서 설명드리죠..
: if(rx_power != pre_rxpower)
:   {
:    if(rx_power <= -20 && rx_power >= -30)
:    {
:       //gRxPower = -25;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 189, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,192,0);
:    }
:    else if(rx_power <= -31 && rx_power >= -40)
:    {
:       //gRxPower = -35;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 201, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,204,0);
:
:    }
:    else if(rx_power <= -41 && rx_power >= -50)
:    {
:       //gRxPower = -45;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 213, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,216,0);
:    }
:    else if(rx_power <= -51 && rx_power >= -60)
:    {
:       //gRxPower = -55;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 225, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,228,0);
:    }
:    else if(rx_power <= -61 && rx_power >= -70)
:    {
:       //gRxPower = -65;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 237, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,240,0);
:    }
:    else if(rx_power <= -71 && rx_power >= -80)
:    {
:       //gRxPower = -85;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 249, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,252,0);
:    }
:    else if(rx_power <= -81 && rx_power >= -90)
:    {
:       //gRxPower = -85;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 261, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,264,0);
:    }
:    else if(rx_power <= -91 && rx_power >= -100)
:    {
:       //gRxPower = -95;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 273, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,276,0);
:    }
:    else if(rx_power <= -101 && rx_power >= -106)
:    {
:       //gRxPower = -103;
:       //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 285, "-");
:       EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,288,0);
:
:    }
:    pre_rxpower = rx_power;
:    gRx_ColCounter++;
:    //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 201, "-");
:    //EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6+6*gRx_ColCounter,192,0);
:   }
: 제가 구현한 소스입니다. 양껏 허덥하다는걸 알죠^^;;

이런식으로 동일한 코드를 if ... else의 나열로 쓰는 것보다는
적당한 계산식을 만들어서 한 번만 쓸 수 있을 겁니다.

: 이것은 Thread에서 구현된것인데요.. 이렇게 하면 지속적으로 gRx_ColCounter의 값을 지속시키면서 폼의 drawgrid(EtcTestForm->dgPowerResult)에 이미지를 추가시킵니다.
: 근데 이미지가 추가된 다음에 이창을 잠시 내렸다가 다시 활성화 시키니까 추가되었던 이미지들이 다 사라지고 새롭게 추가되는것만 나타나는군요..
: 이것을 방지하는방법이 없을까요??

뭔가 착각을 하신듯...

TStringGrid의 경우는 자체적으로 문자열을 가지고 있어서,
마치 문자열의 2차원 배열을 쓰듯이 문자열들을 저장시키면 되지만,

TDrawGrid는 동작 방식이 전혀 다릅니다.
각 셀이 OnDrawCell 이벤트를 받을 때, 이 이벤트 핸들러에서 셀을 그려주게 되는 것이죠.

즉, 셀의 각 Canvas에는 아무 것도 저장시킬 수가 없습니다. 매번 새로 그려줘야 합니다!

그렇다면 방법은 하나,
각 셀에 그려질 데이타를 저장할 자료구조의 2차원 배열을 따로 만들어야 합니다.
만약 크기가 가변적으로 변한다면 보통의 배열보다는 STL의 vector나 deque를 쓰실 것을 권합니다.
구현 방법은 다음 링크를 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=8

쓰레드에서는 이 자료구조에 데이터를 넣는 코드를 넣으시고,
TDrawGrid 각 셀의 OnDrawCell 이벤트 핸들러에서는 이 자료구조를 읽어서 그려주는 코드를 넣으면 됩니다.

: 그리고 이렇게 왼쪽에서 오른족으로 쭉 그려지다 보면, 화면을 넘어가게 되는데요.. 화면이 넘어갈때 증가함에 따라 화면이 따라서 넘어가게 하는 방법이 있나요?? 위에서 아래로는 TopRow값을 조정하니까 되던데.. 답변 부탁드립니다.
: 그럼 날 더운데 더위 조심하세요.. 이만..

+ -

관련 글 리스트
20494 감사하구요~ 또 궁금한게 있어서요^^ 이용주 740 2002/07/29
20497     Re:감사하구요~ 또 궁금한게 있어서요^^ 김백일 902 2002/07/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.