Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Mover un Bitmap con el ratón (https://www.clubdelphi.com/foros/showthread.php?t=14232)

keglevich 14-09-2004 12:14:39

Mover un Bitmap con el ratón
 
¡Saludos a toda la peña!
A ver si alguien sabe como mover un bitmap con el ratón, es decir, hacer click sobre el bitmap y mientras esté pulsado moverlo por la pantalla sin parpadeos ni cosas raras. Lo de drag&drop no me gusta porque necesito que el bitmap se vea mientras lo muevo y que pueda solapar a otros bitmaps, cosa que con el drag no puedo hacer...lo dicho, gracias de antemano

Talegor!

Neftali [Germán.Estévez] 14-09-2004 13:43:06

Hace tiempo salió una consulta similar en los foros, así que que adjunto el código a ver si te sirve. Crea un Form con dos TImage; Si te fijas, utiliza las mismas tres rutinas de gestion del ratón para todos los TImage. No hace falta usarlo así exactamente, pero te puede dar ideas.
El código de la Unit quedaría así:

Código Delphi [-]
unit Unit1_Drag_Controls;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, RxGIF, jpeg;
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    Capturing:Boolean;
    MouseDownSpot:TPoint;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
 

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Capturing then begin
    TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
    TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then begin
    ReleaseCapture;
    Capturing := false;
    TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
    TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
//  if ssCtrl in Shift then begin
    Capturing := true;
    MouseDownSpot.X := x;
    MouseDownSpot.Y := Y;
//  end;
end;
end.

keglevich 14-09-2004 16:16:31

PerfeSto
 
¡¡Muchas gracias Neftalí, funciona perfectamente!! :D


La franja horaria es GMT +2. Ahora son las 10:48:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi