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
[16098] 자문자답...
민인학 [h2h1995] 808 읽음    2002-03-07 22:29
민인학 님이 쓰신 글 :
: 제가 회사에서 프로젝토를 진행하는데...
:
: 다음과 같은 기능을 구현 할려고 합니다..
: 리스트 콤포넌트엔 1-68까지의 숫자가 있고
: 그리고 리스트 콤포넌트 옆엔 총 68핀이 그려진 핀이 있습니다...
:
: 리스트 위젯의 숫자를 클릭할때마다 선택된 핀의 위치에 표시가 되게 할려고 합니다...
: 어떤 콤포넌트를 써야되나요?
: 캔바스위젯같은걸 써야 하나요?
:
: 혹시 좋은 예제같은것이 있으면 답변 부탁드립니다...
:
: 모두들 좋은 하루 되세요...
:
:

30분동안 해메던 끝에 해결했습니다..
다음과 같이 했습니다...
일단 TImage 콤포넌트를 폼위에 생성한후
폼이 생성될때...
핀의 전체모습을 그려줍니다...

void __fastcall TIproveEditDpp::FormCreate(TObject *Sender)
{
       // DPP 핀 그리기
        TCanvas *pCanvas = DppPositionImage->Canvas;
        pCanvas->Pen->Color = clBlack;
        pCanvas->MoveTo(15, 20 );
        pCanvas->LineTo(15, 130 );
        pCanvas->LineTo(50, 140 );
        pCanvas->LineTo(50, 10 );
        pCanvas->LineTo(15, 20 );

        for( i = 0; i < 34; i++ ) {
                pCanvas->Ellipse(25, 25+(i*3), 27, 27+(i*3));
        }
        for( i = 0; i < 34; i++ ) {
                pCanvas->Ellipse(40, 25+(i*3), 42, 27+(i*3));
        }
}

다음은 리스트 박스에서 마우스나 키보드로 선택된 번호를 읽어와서...
해당하는 번호의 위치에 핀을 표시해줍니다..
(여기서 리스트 콤포넌트의 OnClick 이벤트를 사용했습니다.)

void __fastcall TIproveEditDpp::DppPositionClick(TObject *Sender)
{
        char SelectRowData[3];
        AnsiString st = DppPosition->Items->Strings[DppPosition->ItemIndex];
        sprintf( SelectRowData, "%s", st.c_str() );
        SelectRowData[2] = NULL;

        TCanvas *pCanvas = DppPositionImage->Canvas;

        int i;
        for( i = 0; i < 34; i++ ) {
                if( atoi(SelectRowData) == 68-i ) {
                        pCanvas->Pen->Color = clWhite;
                } else {
                        pCanvas->Pen->Color = clBlack;
                }
                pCanvas->Ellipse(25, 25+(i*3), 27, 27+(i*3));
        }
        for( i = 0; i < 34; i++ ) {
                if( atoi(SelectRowData) == 34-i ) {
                        pCanvas->Pen->Color = clWhite;
                } else {
                        pCanvas->Pen->Color = clBlack;
                }
                pCanvas->Ellipse(40, 25+(i*3), 42, 27+(i*3));
        }
}

이 싸이트에 와서...많은 것들을 알게 되었네요...
감사합니다...

+ -

관련 글 리스트
16086 꼭좀 봐주세요... 민인학 792 2002/03/07
16098     자문자답... 민인학 808 2002/03/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.