|
void __fastcall TForm2::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TPoint pp;
GetCursorPos(&pp);
pp = Image1->ScreenToClient(pp);
int itRed = Image1->Canvas->Pixels[X][Y] & 0xFF,
itGreen = Image1->Canvas->Pixels[X][Y] >> 8 & 0xFF,
itBlue = Image1->Canvas->Pixels[X][Y] >> 16 & 0xFF;
Panel1->Caption = Format("%d" , ARRAYOFCONST(((int)itRed)));
Panel2->Caption = Format("%d" , ARRAYOFCONST(((int)itGreen)));
Panel3->Caption = Format("%d" , ARRAYOFCONST(((int)itBlue)));
// 드래그 중이었으면 이전에 그린 그림을 영구적으로 그린다.
if(Dragging)
{
Canvas->Pen->Mode = pmNotXor;
Canvas->MoveTo(X, Y);
Canvas->LineTo(X, Y);
LastPoint.x = X;
LastPoint.y = Y;
}
// 드래그를 종료한다.
Dragging = false;
}
void __fastcall TForm2::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TPoint pp;
GetCursorPos(&pp);
pp = Image1->ScreenToClient(pp);
// 왼쪽 마우스가 다운 된 경우만
if (Shift.Contains(ssLeft))
{
// 최초 위치를 백업한다.
FirstPoint.x = X;
FirstPoint.y = Y;
// 이전 위치도 최초 위치이다.
LastPoint.x = X;
LastPoint.y = Y;
// 최초 위치로 펜의 위치를 옮긴다.
Canvas->MoveTo(X, Y);
Canvas->Pen->Mode = pmNotXor;
Canvas->Brush->Style = bsClear;
// 드래그 할 준비 완료
Dragging = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
TPoint pp;
GetCursorPos(&pp);
pp = Image1->ScreenToClient(pp);
// 드래그 중이면 마우스 가는데로 그림을 그린다.
if (Dragging && Shift.Contains(ssLeft))
{
// 펜의 모드를 결정한다.
Canvas->Pen->Mode = pmNotXor;
Canvas->Brush->Style = bsClear;
// 이전에 그린 임시 라인을 삭제한다.
//Canvas->MoveTo(X, Y);
//Canvas->LineTo(X, Y);
// 새로 임시 라인을 그린다.
Canvas->MoveTo(X, Y);
Canvas->LineTo(X, Y);
// 현재 지점을 백업한다.
LastPoint.x = X;
LastPoint.y = Y;
}
}
이렇게 나와 있는 코딩 했는데 마우스 좌표가 이상한 거 같아요
일단 GetCusorPos로 했다가 안되서 이미지 함수에 있는 x,y로 했습니다. 결과는 똑같구요
현상이 그릴때 현재 마우스 위치보다 몇백 정도 위에 그려지더라고요
ui는 폼가장위에 메뉴바가 있구요
그 밑에 바로 이미지가 있습니다
|