Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Arrastrar imagen (https://www.clubdelphi.com/foros/showthread.php?t=40988)

david.rguez 05-03-2007 13:31:31

Arrastrar imagen
 
Estoy tratando de que en tiempo de ejecución, se pueda recolocar un TImage de la pantalla, de forma que el usuario pueda organizar las distintas imágenes como mejor se maneje.

He puesto el DragMode a automático, pero no me permite moverlas. Es decir, si arrastro, el cursor me cambia al símbolo de prohibición y, si tengo asignado un OnEndDrag, ejecuta ese procedimiento (al soltar el botón del ratón), pero no permite moverlo del lugar donde esté.

¿Qué más hay que hacer para que permita el movimiento?

Neftali [Germán.Estévez] 05-03-2007 13:48:58

En mi página, en la sección de trucos hay uno titulado "Mover controles de un form en Runtime", donde se muestra como mover una imagen, un shape,... con el ratón.
Échale un vistazo; Puedes descargar el código y compilarlo (Delphi 6).

david.rguez 05-03-2007 14:11:25

He utilizado tu código, pero me sigue sin permitir arrastrar.

Es decir, si yo pincho sobre la imagen y muevo el ratón manteniéndolo pulsado, el cursor cambia al icono de prohibición (el círculo con una barra diagonal) y no se mueve la imagen.

Neftali [Germán.Estévez] 05-03-2007 14:38:02

En el ejemplo que te comento no se usa "Drag and Drop"; Si no debes arrastrar entre diferentes controles, sino que sólo debes mover, desactiva esa característica, no te hace falta.

david.rguez 05-03-2007 14:43:28

He quitado eso y funciona perfectamente ahora, gracias :)

Ahora ya solo me falta implementar que se almacene permanentemente la nueva posición, que no es ningún problema.

Ahora, a título de curiosidad... ¿hay alguna forma de que desaparezca ese antiestético parpadeo mientras se mueve? Creo haber leído algo del doble-buffer, pero jamás logré que desapareciese (es un TImage moviéndose por encima de un TPanel (el cuál puede tener otra TImage a modo de ilustración de fondo (esto ya es a elección del cliente)).

seoane 05-03-2007 14:45:46

Dependiendo de la versión de delphi con la que trabajes, puedes disponer de la propiedad DoubleBuffered que soluciona este problema:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered:= TRUE;
end;

david.rguez 05-03-2007 14:47:46

Cita:

Empezado por seoane
Dependiendo de la versión de delphi con la que trabajes, puedes disponer de la propiedad DoubleBuffered que soluciona este problema:
Código Delphi [-]procedure TForm1.FormCreate(Sender: TObject); begin DoubleBuffered:= TRUE; end;

Trabajamos en Delphi 2005. Eso lo probé hace un par de meses, (lo dejamos durante un tiempo hasta tener instrucciones más precisas del cliente y nos dedicamos a otras partes), pero no había ningún cambio perceptible :S


La franja horaria es GMT +2. Ahora son las 08:39:34.

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