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
[18863] Re:켄버스를 엉뚱한 곳에서 가져왔으니 당연히 그렇게 되겠죠..
김상구.패패루 [] 739 읽음    2002-05-25 00:01
뭐 자세히 보지는 않았지만 원래 소스에서 잘 되던건, 백그라운드 이미지가 창에 Client 등으로 붙어 있는 경우였기 때문이겠네요.
문제는 Image->Left를 참조하는 부분인데, 원래 이미지의 좌표가 0,0인 경우에는 제대로 동작하겠죠.
그런데 백그라운드 이미지가 창의 전체를 덮지 않는 경우에는 얘기가 달라지죠.
만일 캔버스를 메인창의 것을 가져왔다면 당연히 제대로 동작하겠지만 이미지의 위치를 보정하게 해 놓고 정작 캔버스는 이미지의 것을 가져왔으니 이미지의 Left,Top좌표만큼 옵셋된 위치에 선이 그려지겠네요.


정기원 님이 쓰신 글 :
: 감사합니다.
: 저번에 이미지 콤포넌트들간에 라인을 긋고 이벤트에 따라
: 색깔 변경하는것을 문의드렸고 가르켜주신데로 테스트 하니 잘 되더군요.
: 그런데 실제 적용을 하니까 라인이 엉뚱한데서 그려지네요.
: 이것때문에 또 몇일 고민하다가 다시 염치없이 올립니다.
: 무엇이 문제인지 한번 보아 주세요. 결과를 화일로 첨부하였습니다. 차이점은
: 테스트 환경과 적용환경은 똑 같고, 단지 테스트 환경은 새로운 폼을 생성하여 폼의 변화 없이
: 사용하였고 또한 백그라운드 이미지(아래 소스에서 Image1를 나타냄)를 있는그대로 사용하였습니다.
: 실제 적용화면은 폼의 크기와 백그라운드 이미지(아래 소스에서 image를 나타냄)를 줄여서 작업 했습니다. 
: 테스트한 소스와 실제 적용한 소스 일부를 올립니다. 한번 보아 주세요.
:
: --- 테스트 한 소스 --->
:     TCanvas *pCanvas = Image2->Canvas;
:     TCanvas *pCanvas2 = Image3->Canvas;
:      
:     Image1->Picture->Bitmap->PixelFormat = pf24bit;
:
:     pCanvas->Brush->Color = clGreen;
:     pCanvas->Brush->Style = bsSolid;
:     pCanvas->Rectangle(0,0,Image2->Width, Image2->Height);
:
:     pCanvas2->Brush->Color = clGreen;
:     pCanvas2->Brush->Style = bsSolid;
:     pCanvas2->Rectangle(0,0,Image3->Width, Image3->Height);
:
:     Image1->Canvas->Pen->Mode   = pmCopy;
:     Image1->Canvas->Pen->Style = psSolid;
:     Image1->Canvas->Pen->Color = clBlack;
:     Image1->Canvas->Pen->Width = 2;
:
:     Image1->Canvas->MoveTo(Image2->Left + Image2->Width/2, Image2->Top + Image2->Height);
:     Image1->Canvas->LineTo(Image3->Left + Image3->Width/2, Image3->Top );
: <결과> : 성공
: <-----------------------------------------------------
: ---- 실제 적용 코드 ---->
:         TCanvas *pCanvas = Image1->Canvas;
:         TCanvas *pCanvas1 = Image2->Canvas;
:         TCanvas *pCanvas2 = Image3->Canvas;
:    
:         image->Picture->Bitmap->PixelFormat = pf24bit;
:
:         pCanvas->Brush->Color = clGreen;
:         pCanvas->Brush->Style = bsSolid;
:         pCanvas->Rectangle(0,0,Image1->Width, Image1->Height);
:
:         pCanvas1->Brush->Color = clGreen;
:         pCanvas1->Brush->Style = bsSolid;
:         pCanvas1->Rectangle(0,0,Image2->Width, Image2->Height);
:
:         pCanvas2->Brush->Color = clGreen;
:         pCanvas2->Brush->Style = bsSolid;
:         pCanvas2->Rectangle(0,0,Image3->Width, Image3->Height);
:
:         image->Canvas->Pen->Mode = pmCopy;
:         image->Canvas->Pen->Style = psSolid;
:         image->Canvas->Pen->Color = clGreen;
:         image->Canvas->Pen->Width = 1;
:
:        
:         //서울<->경인간 연결
:         image->Canvas->MoveTo((Image1->Left + (Image1->Width/2)), (Image1->Top + Image1->Height));
:         image->Canvas->LineTo((Image2->Left + (Image2->Width/2)), Image2->Top );
:         //서울<->강원간 연결
:         image->Canvas->MoveTo(Image1->Left + Image1->Width, Image1->Top + Image1->Height/2);
:         image->Canvas->LineTo(Image3->Left, Image3->Top  + Image3->Height/2);
:
: <위 코드의 결과 >
:   - 위 함수의 MoveTo와 LineTo가 잘 안되는지 엉뚱한곳에 그려집니다.
:     결과를 화일로 첨부하였습니다.
:
:    조언 부탁드립니다.
:
: 벌써 금요일의 밤입니다.
: 여기 들러시는 모든분들 좋은 주말 되십시요.
:
: 미리 답변에 감사 드립니다.
: 수고들 하십시요.

+ -

관련 글 리스트
18856 유영인님! 테스트는 잘 되는데 실제 적용시는 잘 안되요? 무엇이 문제인지요 정기원 774 2002/05/24
18863     Re:켄버스를 엉뚱한 곳에서 가져왔으니 당연히 그렇게 되겠죠.. 김상구.패패루 739 2002/05/25
18899         김상구님 답변 정말 감사합니다. 이제 해결 되었네요(내용무) 정기원 721 2002/05/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.