1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
SrceImage = (TImage*)Sender;
SelRect = Rect(X,Y,X,Y);
if(Button == mbRight)
{
SelFlag = true;
SrceImage->Canvas->Pen->Color = clBlack;
SrceImage->Canvas->Pen->Style = psDot;
SrceImage->Canvas->Pen->Mode = pmNot;
SrceImage->Canvas->Brush->Style = bsClear;
}
else
{
MoveFlag = true;
}
}
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(MoveFlag)
{
SrceImage->SetBounds(SrceImage->Left + X - SelRect.Left,
SrceImage->Top + Y - SelRect.Top,
SrceImage->Width,
SrceImage->Height);
}
if(SelFlag)
{
DrawSelRect();
SelRect.Right = X;
SelRect.Bottom = Y;
DrawSelRect();
}
}
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
MoveFlag = false;
if(SelFlag)
{
SelFlag = false;
DrawSelRect();
if((SelRect.Left != SelRect.Right) && (SelRect.Top != SelRect.Bottom))
{
TImage *Image = new TImage(this);
Image->Parent = this;
//Réorganiser les bounds de la sélection, au cas où...
if(SelRect.Left > SelRect.Right)
{
int w = SelRect.Left; SelRect.Left = SelRect.Right; SelRect.Right = w;
}
if(SelRect.Top > SelRect.Bottom)
{
int w = SelRect.Top; SelRect.Top = SelRect.Bottom; SelRect.Bottom = w;
}
TRect Dest = Rect(0,0,SelRect.Right - SelRect.Left, SelRect.Bottom - SelRect.Top);
Image->Picture->Bitmap->Width = Dest.Right;
Image->Picture->Bitmap->Height = Dest.Bottom;
Image->Picture->Bitmap->Canvas->CopyRect(Dest, SrceImage->Canvas, SelRect);
Image->OnMouseDown = Image1MouseDown;
Image->OnMouseMove = Image1MouseMove;
Image->OnMouseUp = Image1MouseUp;
Image->AutoSize = true;
Image->Left = SrceImage->Left + SelRect.Left + 8; //en retrait de 8 pixels
Image->Top = SrceImage->Top + SelRect.Top + 8; //idem
Image->BringToFront();
}
}
} |
Partager