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
[26717] [답변] 파스칼 소스의 이해(수정)
정성훈.해미 [sage5nor] 1088 읽음    2003-08-13 19:20
안녕하세요..
오랜만입니다.

: [질문1]
: 근데 먼저..
: procedure TForm1.ButtonKind(PenMode :TPenMode);
: 이 부분이요..
: 인스펙터의 Event부분 어디를 찾아봐도.. ButtonKind란 부분은 없더라구요..?
: 그래서 애초에 프로시저를 만들라고 하는거 보고..
: 그냥 아예 만들었거든요..
:
: 근데 그렇다면..
: 헤더 파일에..
: void __fastcall ButtonKind(TPenMode *PenMode);
: 함수 선언을 해줬는데 이거 맞는건가요?

[답변 1]
위의 함수는 이벤트 함수가 아니고 사용자가 임의로 만든 함수입니다.
따라서 헤더 파일에 선언하고 소스파일에 정의하면 됩니다.
헤더부분에 TForm1 클래스의 public: 부분에
void __fastcall ButtonKind(TPenMode PenMode); // 추가

//주의: TPenMode *PenMode 아님.... 아래의 에러요인..


: [질문2]
: 위의 델파일 코드를 나름대로 C++에 맞게 코드를 변형했는데..
:
: void __fastcall TForm1::ButtonKind(TPenMode *PenMode)
: {
: Image1->Canvas->Pen->Mode = PenMode;
:
: if(DrawBtn->Down)
: {
:  Image1->Canvas->LineTo(MPoint x, MPoint y);
: }
: .
: .
: .
: }
:
: 이게 당연히 안되니깐 틀리는 것이겠지만,, 뭐가 문제인지..@_@;
: 컴파일 시키면..
: Image1->Canvas->Pen->Mode = PenMode; 가 붉은색으로 되면서..

:
: [C++ Warning] Unit1.cpp(37): W8018 Assigning TPenMode * to TPenMode
: [C++ Error] Unit1.cpp(37): E2034 Cannot convert 'TPenMode *' to 'TPenMode'
: [C++ Error] Unit1.cpp(41): E2451 Undefined symbol 'MPoint'
: 라고 오류 메세지가 나오거든요..
:

[답변 2]
: [C++ Warning] Unit1.cpp(37): W8018 Assigning TPenMode * to TPenMode
: [C++ Error] Unit1.cpp(37): E2034 Cannot convert 'TPenMode *' to 'TPenMode'
위의 경고와 에러는
궁합이 않맞아서(TPenMode포인터 형식을 그냥 TPenMode로 변환 할수 없다는 에러...등등) 그런 것입니다.
함수의 인수를 TPenMode PenMode 이렇게 해주면 해결 됩니다.

즉, 정의 부분도

void __fastcall TForm1::ButtonKind(TPenMode PenMode)
{
  //내용
}

이렇게 해야 됩니다.

마지막 에러
: [C++ Error] Unit1.cpp(41): E2451 Undefined symbol 'MPoint'
는 MPoint 변수가 없다는 얘기군요.

파스칼 소스를 잘 보면.... 알 수 있습니다.

ButtonKind함수내에 다음의 변수들이 사용되었습니다.
MPoint
StartDot

위의 것들의 사용을 보면
MPoint.X, MPoint.Y
이런식으로 쓰엿습니다.
이것은 구조체입니다.
C++에 이런 그조체는 TPoint입니다.( TPoint형식은 F1도움말 참고)
Form에 전역으로 위의 변수를 선언하세요.

TPoint MPoint, StartDot; //추가:전역으로 선언

이것들은 마우스 이벤트로 받으면 됩니다.

[예]
마우스 다운이벤트에
StartDot.x = X;
StartDot.y = Y;

마우스 무브 이벤트에
MPoint.x = X;
MPoint.y = Y;

마우스업 이벤트에
ButtonKind(PenMode); //PenMode값은 따로 설정하세요...

대충 이렇게 들어가는 것일겁니다.

시간이 엄써서...이만...
나머지는 다른 분이 해 주실 것으로 믿고 해미는 여기서 접습니다..

빠빠이...



+ -

관련 글 리스트
26715 그림판 만들기에서 브러시와 펜의 속성 지정..?(그림판 소스없나요??) 요구르트 2032 2003/08/13
26717     [답변] 파스칼 소스의 이해(수정) 정성훈.해미 1088 2003/08/13
26721         해미님-> 파스칼 소스의 이해(수정)->200%부족 --; (또 시작임다^^*) 요구르트 985 2003/08/14
33079             Re:해미님-> 파스칼 소스의 이해(수정)->200%부족 --; (또 시작임다^^*) 정성훈.해미 808 2003/08/14
33078             Re:해미님-> 파스칼 소스의 이해(수정)->200%부족 --; (또 시작임다^^*) 꼴.시크릿 894 2003/08/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.