Ver Mensaje Individual
  #7  
Antiguo 10-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jose Roman.

Te hice un ejemplo que usa sólo componentes estándar de Delphi, dos Timage, un TShape y dos TButton :
Código Delphi [-]
...

implementation

var
  P: TPoint;
  inSelect: Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Shape1.Pen.Color := clWhite;
  Shape1.Pen.Style := psDot;
  Shape1.Visible   := False;
  inSelect         := False;
  with Image1 do
  begin
    OnMouseDown:= nil;
    OnMouseMove:= nil;
    OnMouseUp  := nil;
  end;
end;

procedure TForm1.btnLoadImageClick(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
    with Image1 do
    begin
      Picture.LoadFromFile(OpenPictureDialog1.FileName);
      OnMouseDown:= Image1MouseDown;
      OnMouseMove:= Image1MouseMove;
      OnMouseUp  := Image1MouseUp;
    end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  InSelect:= ssCtrl in Shift;
  if InSelect then
  begin
    P.X:= X;
    P.Y:= Y;
  end
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  R: TRect;
begin
  if inSelect then
  begin
    with TImage(Sender) do
      R:= Rect(Left+P.X, Top+P.Y, Left+X, Top+Y);
    Shape1.BoundsRect := R;
    Shape1.Brush.Style:= bsClear;
    Shape1.Visible    := True;
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  pic: TPicture;
  bmp: TBitmap;
  img: TImage;
begin
  if inSelect and ( P.X < X )and( P.Y < Y ) then
  begin
    img:= TImage(Sender);
    pic:= TPicture.Create;
    try
      pic.Assign(img.Picture);
      bmp:= TBitmap.Create;
      try
        bmp.Height:= img.Picture.Height;
        bmp.Width := img.Picture.Width;
        bmp.Canvas.Draw(0, 0, Pic.Graphic);
        bmp.Canvas.CopyRect(Rect(0, 0, X-P.X, Y-P.Y),
          bmp.Canvas, Rect(P.X, P.Y, X, Y));
        bmp.Width := Abs(X-P.X);
        bmp.Height:= Abs(Y-P.Y);
        Image2.Picture.Bitmap.Assign(bmp);
      finally
        bmp.Free;
      end;
    finally
      pic.Free;
    end;
  end;
  Shape1.Visible:= False;
  InSelect:= False;
end;

procedure TForm1.btnCleanSelectionClick(Sender: TObject);
begin
  Image2.Picture:= nil;
end;

Para comenzar a realizar la selección debes tener la tecla Ctrl presionada (una vez comenzada la podes soltar):


Cuando levantas el botón izquierda del mouse se copia la seleccion a Image2:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita