|
다음을
Private: 에 선언을 하시구요.
TPoint FirstPoint; // 최초 위치 백업
TPoint LastPoint; // 현재 위치 백업
bool Dragging; // 드래그 중 판별
이렇게 해서 Pen Mode 를 다른걸로 바꿔 가면서 해 보세요.
그리고 이렇게 그린 그림을 창이 다른 창에 가려졌다가 나오면서 다 지워집니다.
지워지지 않고(정확하게는 다시 그리는) 하는 방법은 스스로 구현하셔야 하겠네요.
void __fastcall TForm1::FormShow(TObject *Sender)
{
// 노란색 라인을 긋겠다.
Canvas->Pen->Color = clYellow;
// 선의 굵기 설정
Canvas->Pen->Width = 2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
// 왼쪽 마우스가 다운 된 경우만
if (Shift.Contains(ssLeft))
{
// 최초 위치를 백업한다.
FirstPoint.x = X;
FirstPoint.y = Y;
// 이전 위치도 최초 위치이다.
LastPoint.x = X;
LastPoint.y = Y;
// 최초 위치로 펜의 위치를 옮긴다.
Canvas->MoveTo(X, Y);
// 드래그 할 준비 완료
Dragging = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
// 드래그 중이었으면 이전에 그린 그림을 영구적으로 그린다.
if (Dragging)
{
Canvas->Pen->Mode = pmCopy;
Canvas->MoveTo(FirstPoint.x, FirstPoint.y);
Canvas->LineTo(X, Y);
}
// 드래그를 종료한다.
Dragging = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
// 드래그 중이면 마우스 가는데로 그림을 그린다.
if (Dragging && Shift.Contains(ssLeft))
{
// 펜의 모드를 결정한다.
Canvas->Pen->Mode = pmNot;
// 이전에 그린 임시 라인을 삭제한다.
Canvas->MoveTo(FirstPoint.x, FirstPoint.y);
Canvas->LineTo(LastPoint.x, LastPoint.y);
// 새로 임시 라인을 그린다.
Canvas->MoveTo(FirstPoint.x, FirstPoint.y);
Canvas->LineTo(X, Y);
// 현재 지점을 백업한다.
LastPoint.x = X;
LastPoint.y = Y;
}
}
//---------------------------------------------------------------------------
^^* 님이 쓰신 글 :
: 안냐세영...
: 이미지에다가 선을 그릴라구 하는대영...
: 이미지 캔바스에 펜모드를 pmNotXor루 놓구 선그리기를 하믄 선이 따라다닌다구 하는디...
: 제대루 안대네영...
: 예제 가틍거 헉시 있으신분~~
: 부탁 드림다...
|