PDA

Ver la Versión Completa : Mover la imagen con el raton, pero con API de Win32


dec
01-07-2006, 00:11:34
Vi el Truco enviado por FER, este es parecido, pero utilizando la API.

Se puede utilizar para cualquier objeto que tenga los eventos Drag y sobre un Form, Panel, ScrollBox, etc.. Además sólo se utiliza el evento OnMouseDown del Objeto.

En este ejemplo utilizaremos un TImage sobre un TScrollBox:

Antes en las propiedades del TImage debemos colocar:


DragMode en dmManual


Y si quieres:


Cursor en crHandPoint


En el evento MouseDown:


procedure TForm.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
// Variables para Guardar las posiciones de la imagen y del ratón
ImagenPos, MousePos: TPoint;
begin
ImagenPos.X := Image1.Width;
ImagenPos.Y := Image1.Height;

// DragDetect se activa si es que existe movimiento de arrastre
// con el ratón en el area definida por el ScrollBox1 y en la posicion ImagePos
While DragDetect(ScrollBox1.Handle, ImagenPos) do
begin
// Pedimos la Posicion actual del Cursor
GetCursorPos(MousePos);
// Se convierte la posicion general a la posicion dentro del
// ScrollBox1 y se guarda en MousePos
Windows.ScreenToClient(ScrollBox1.Handle, MousePos);
Image1.Left:=MousePos.X-15;
Image1.Top :=MousePos.Y-15;

// Si deseas ver la imagen durante el arrastre incluye esta linea
Application.ProcessMessages;
End;
end;


Nota: Al cambiar la posicion de la imagen, te daras cuenta que le disminuyo 15 pixels a cada posicion, es porque por lo general agarramos el objeto del punto medio del mismo y como el movimiento se basa en la posicion del mouse, la imagen en un primer momento se movería sobre la punta superior izquierda del puntero de mouse y no de donde lo agarraste.

Sugiero que se debería disminuir la mitad de las dimensiones del objeto a cada posicion.