|
민인학 님이 쓰신 글 :
: 제가 회사에서 프로젝토를 진행하는데...
:
: 다음과 같은 기능을 구현 할려고 합니다..
: 리스트 콤포넌트엔 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));
}
}
이 싸이트에 와서...많은 것들을 알게 되었네요...
감사합니다...
|