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
[18669] Re:Re:감사합니다. 제가 테스트하고 있는 부분 소스 올립니다.
정기원 [] 789 읽음    2002-05-20 16:02
Image1.cpp 3.8KB 테스트 소스
감사합니다. 유영인님. 제가 다른것땜에 이제야 글을 보았습니다.
오전내내 이래저래 테스트 했는데 똑같네요.
제가 테스트하는 소스는 다음과 같고, 내용은 폼위에 폼 전체를 덮는 지도 그림을 올려두고
다시 지도 그림위에 조그마한 장비를 표현하는 사각형 그림을 올립니다. 그리고 조그마한
사각형 장비들을 서로 선으로 연결하고 연결된 선에 문제가 발생하면 문제가 있는 선의 색상을
특정색으로 변경하고자 하는 작업입니다. 그리고 초기에 화면 생성될때 기본적으로 서로 연결된
상태로 나타나야 하며 어떤 이벤트때에 선의 색상을 변경합니다.
아래 Image1은 bmp로 된 지도 그림으로 Picture속성에서 로드하였고
Align 속성을 Client로 했습니다. 또한 그림은 모두 칼라가 입혀져 있는 그림 지도입니다.
Image2와 Image3은 Image1위에 올려둔 사각형의 장비로 폼이 생성될때 초록색으로 칠했습니다.
Image1, Image2, Image3 Component의 모든 속성은 처음 세팅된 기본값으로 했습니다.
Button1을 누르면 선의 색상이 지정된 색으로 변경되어야 하는데 엉뚱한 색으로 되는군요 .
Pen의 Style과 Mode를 모두 변경하면서 테스트 했는데도 똑 같습니다.
저의 테스트 프로그램을 첨부 화일로 첨부 했습니다.
한번 읽어 보시고 조언을 부탁합니다.
그럼 감사드리며 수고하십시요.

//시험 소스
#include <vcl.h>
#pragma hdrstop

#include "Image1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TCanvas *pCanvas = Image2->Canvas;
    TCanvas *pCanvas2 = Image3->Canvas;

    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 );

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TCanvas *pCanvas = Image2->Canvas;
    TCanvas *pCanvas2 = Image3->Canvas;

    pCanvas->Brush->Color = clRed;
    pCanvas->Brush->Style = bsSolid;
    pCanvas->Rectangle(0,0,Image2->Width, Image2->Height);

    Image1->Canvas->Pen->Mode = pmNotXor;
    Image1->Canvas->Pen->Style = psSolid;
    Image1->Canvas->Pen->Color = clRed;
    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 );
}
//---------------------------------------------------------------------------



유영인 [Chris] 님이 쓰신 글 :
: 혹시 다른 속성값 정해주신건 없으신가요..? -_-a
:
: 그림이 있는 상태로 테스트 한건데...
:
: 루틴이 길지 않아 관련된 부분을 전부 올려주신다면..
:
: 금방 해결책을 찾으실 수 있으실껍니다.
:
:
: 정기원 님이 쓰신 글 :
: : 감사합니다. 유영인님
: : 폼위에 바로 이미지 콤포넌트를 올려서 아래 코드와 저의 코드를
: : 테스트하니 잘 됩니다. 그러나
: : 폼위에 TImage coponent올려서 속성을 Client로 하고
: : Picture로 bmp화일을 로드하여 둔 상태에서 다시 로드된 그림 위에
: : TImage를 추가하여 아래처럼 코딩하니까 선의 색이 기존에 로딩된
: : 그림의 색과 섞여 잘 나오지 않습니다. 저는 폼 바탕에 무조건 이미지를
: : 로딩하고 그 위에서 작업을 해야 하는데 어떻게 해야 할까요?
: : 정말 갑갑합니다.
: : 한번더 감사 드립니다. 수고하세요
: : 유영인 [Chris] 님이 쓰신 글 :
: : : :      Image1->Canvas->Pen->Color = clBlack;
: : :
: : : 위의 코드 아래에 이 줄을 각각 붙여주세요. (2군데겠죠?)
: : :
: : :  Image1->Canvas->Pen->Mode  = pmCopy;
: : :  Image1->Canvas->Pen->Style = psSolid;
: : :
: : : 그리고, 생각나는게, event 처리가 반복이 된다면, 각각의 라인은 Width가 틀리기 때문에 색깔이 섞여서 보이는 현상이 발생될 수 있습니다. (만약 처리가 빠르다면요..)
: : :
: : : 만약 위 코드를 집어넣어도 안되신다면, 다른 부분에서의 그리기나 기타 다른 부분에서의 충돌을 살펴보십시오.
: : :
: : : 아래 코드는 버튼을 누르면 흰줄을 노란줄로 바꾸는 코드로 기원님이 쓰신 코드와 같은 코드입니다. 아래 코드를 새 Application을 만드신뒤 테스트 하시고, 어느 부분에서 틀어졌는지 한번 짚어보시는것도 좋으실것 같네요.
: : :
: : :
: : : //---------------------------------------------------------------------------
: : :
: : : #include <vcl.h>
: : : #pragma hdrstop
: : :
: : : #include "Unit1.h"
: : : #define  X                   10
: : : #define  Y                   10
: : :
: : : //---------------------------------------------------------------------------
: : : #pragma package(smart_init)
: : : #pragma resource "*.dfm"
: : : TForm1 *Form1;
: : : //---------------------------------------------------------------------------
: : : __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
: : : {
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TForm1::FormActivate(TObject *Sender)
: : : {
: : :
: : :  Image1->Canvas->Pen->Mode  = pmCopy;
: : :  Image1->Canvas->Pen->Style = psSolid;
: : :
: : :  Image1->Canvas->Pen->Color = clWhite;
: : :  Image1->Canvas->Pen->Width = 1;
: : :  Image1->Canvas->MoveTo(X, Y);
: : :  Image1->Canvas->LineTo(X + 100, Y + 100);
: : :
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : {
: : :
: : :  Image1->Canvas->Pen->Mode  = pmCopy;
: : :  Image1->Canvas->Pen->Style = psSolid;
: : :
: : :  Image1->Canvas->Pen->Color = clYellow;
: : :  Image1->Canvas->Pen->Width = 2;
: : :  Image1->Canvas->MoveTo(X, Y);
: : :  Image1->Canvas->LineTo(X + 100, Y + 100);
: : :
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : :
: : :
: : : 정기원 님이 쓰신 글 :
: : : : 이곳에 들러시는 모든분들 안녕하십니까?
: : : : 항상 많은 도움을 받아 갑니다. 늘 감사 드리구요.
: : : : 2일전에 Image1->Canvas->Pen->?에서 선의 색깔을 변경하는 방법에 대해
: : : : 질의를 드렸고 몇분이 답을 주셨습니다만 여전히 선의 색깔이 변하지 않아
: : : : 다시 문의 드립니다. 저는 Image Component를 가지고 작업하는것이 처음이라
: : : : 많이 막힙니다. 부디 도움 주시기를 부탁드립니다.
: : : :
: : : : 저번에 불사새님의 도움으로 무사히 TImage에서 도형과 선을 그렸습니다.
: : : : 그런데 또 막혔습니다. 막힌곳은 이벤트에 따라 기존에 그려진 선의 색깔을
: : : : 변경하고 싶어서 선의 색상을 달리 했는데 변경된 선의 색상으로 나타나지 않고
: : : : 기존 색과 겹쳐진 색으로 나옵니다. 이를 해결할 방법은 없나요?
: : : : 없다면 기존 선을 지우고 다시 그리면 될것 같은데 지울 수는 없나요?
: : : :
: : : : 일단 Form에 image component를 두고 이의 Align 특성을 Client로 했습니다.
: : : : 그리고 bmp로 된 그림을 로드하였고 로드된 이미지 그림 위에 다시 몇개의
: : : : Image component를 올려 놓고 이들 이미지를 서로 연결하는 선을 그렸습니다.
: : : : 각 연결된 선의 색깔을 어떤 이벤트에 따라 변경하고자 합니다.
: : : : 저의 코드 일부가 다음과 같이 했습니다.
: : : : ----------------------------------------
: : : :      Image1->Canvas->Pen->Color = clBlack;
: : : :      Image1->Canvas->Pen->Width = 1;
: : : :      Image1->Canvas->MoveTo(X, Y);
: : : :      Image1->Canvas->LineTo(X+100, Y+100);
: : : :
: : : :      if(event) {
: : : :                Image1->Canvas->Pen->Color = clRed;
: : : :                Image1->Canvas->Pen->Width = 2;
: : : :                Image1->Canvas->MoveTo(X, Y);
: : : :                Image1->Canvas->LineTo(X+100, Y+100);
: : : :      }
: : : : -----------------------------------------------
: : : : 위와 같이 했는데 선의 색깔이 붉은색으로 안 나옵니다.
: : : : 어떻게 하면 되는지요.
: : : : 많은 조언 부탁 드립니다.
: : : : 그럼 모든분들 오늘도 즐거운 하루가 되시길....
: : : :

+ -

관련 글 리스트
18631 불사새님,임페리얼님,경호님, 타 고수님들 좀 도와 주십시요? 정기원 845 2002/05/17
18632     Re:불사새님,임페리얼님,경호님, 타 고수님들 좀 도와 주십시요? 유영인 [Chris] 871 2002/05/17
18639         감사합니다. 그러나 바탕에 로드된 이미지 그림때문에 안되는것 같습니다. 정기원 865 2002/05/17
18643             Re:감사합니다. 그러나 바탕에 로드된 이미지 그림때문에 안되는것 같습니다. 유영인 [Chris] 870 2002/05/18
18669                 Re:Re:감사합니다. 제가 테스트하고 있는 부분 소스 올립니다. 정기원 789 2002/05/20
18670                     Re:Re:Re:감사합니다. 제가 테스트하고 있는 부분 소스 올립니다. 유영인 [Chris] 901 2002/05/20
18679                         정망 감사 합니다 유영인님. 해결 되었습니다. 낮은 비트 문제였군요. 너무너무 감사합니다(내용 무) 정기원 1061 2002/05/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.