| 12
 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