FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Drag Drop TImage
Hola todos.
La cuestión que hoy se me plantea es la siguiente: Utilizo un TImage como contenedor de otro TImage que creo de forma dinámica. La idea, es que este nuevo TImage creado de forma dinamica pueda hacérsele Drag and Drop dentro del TImage que hace las veces de contenedor. Todo me funciona, es decir, crear dinámicamente el TImage, que este se vea dentro del contenedor, y que incluso, cargue la imágen. Pero a la hora de dar las pautas para que se pueda hacer drag and drop, no sé como manejar los eventos de un objeto que se crea en tiempo de ejecución. Muestro el código de todo lo que hago... //A partir de un Listbox, creo de forma dinámica el TImage, que a partir de aquí, se llamará "NewPedal" Código:
procedure TForm1.LstModelDblClick(Sender: TObject); var imgPath: string; NewPedal: TImage; begin if LstModel.Selected [0] then imgPath := ExtractFilePath(ParamStr(0)) + 'Rec\Boss\Boss AC-3.jpg'; NewPedal := TImage.Create(Self); with NewPedal do begin Parent := Self; SetBounds(30, 200, 800, 800); Picture.LoadFromFile(imgPath); end; end; Código:
procedure TForm1.ImgGroundDragDrop(Sender, Source: TObject; X, Y: Integer); //El tema del DragDrop begin if Source is TImage then begin TImage(Source).Left := X; TImage(Source).Top := Y; end; end; procedure TForm1.ImgGroundDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); //Más del DragDrop sobre el Imageground begin Accept := (Source is TImage); end; Que hice: Intenté hacerlo igual a como lo haría con un TIMge ya creado, pero por todos lados el compilador (Delphi 2010) me tira error. Hice esto, y no tira error, pero igual nada pasa: Código:
procedure TForm1.NewPedalMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var NewPedal: TImage; begin if Button = mbLeft then NewPedal.BeginDrag(True) ; end; Un gran saludo, y mil gracias, Julián |
#2
|
||||
|
||||
Hola Julián.
Probá asignando el evento en la creación del TImage.
Saludos. Última edición por ecfisa fecha: 20-09-2010 a las 04:40:38. |
#3
|
|||
|
|||
Hola Ecfisa.
Míl gracias por la pronta respuesta, y la ayuda. Verás, incialmente intenté hacerlo, pero definitivamente el compilador genera un error, ya que falta declarar qué es "NewPedalMouseDown; El asunto, y pienso que por ahí es la cosa, sería algo como esto: Hay que escribir correctamente el evento OnMouse Down, para el objeto TImage que se está creando de forma dinámica. Este objeto, se llama "NewPedal", pero lo que aún no logro compremder es: Si ya lo he declarado también como una variable global - Creo haberlo hecho bien con esto: Código:
var Form1: TForm1; NewPedal: TImage; Ahora bien, si se pudiese escribir en su defecto una función que indique que se se le dá click izquierdo, el TImage creado dinamicamente debe hacer Drag & Drop.... y luego llamar a esa función.... Bueno, qúe podría hacer para solventar este problema? Con ese problema, he quedado bloqueado :-) Si la pregunta es: ¿Por que lo créo dinamicamente? Es que en este programa que desarrollo trabajaré aproximadamente con unas 300 referencias diferentes. Por eso creo, el mejor camino es crear en Runtime el objeto, y de forma global darle a este la posibilidad de hacer drag drop sin importar que tipo de imágen cargue... Míl gracias, y haber como soluciono esto. Un gran abrazo, Ecfisa!!! Julián Última edición por Robin1 fecha: 20-09-2010 a las 05:55:57. |
#4
|
||||
|
||||
Hola de nuevo.
Cita:
Dentro del form, declará el procedimiento como private: Podés declararlo como public, pero no creo que convenga en este caso. Saludos. Última edición por ecfisa fecha: 20-09-2010 a las 16:29:39. |
#5
|
|||
|
|||
Hola Ecfisa, nuevamente, míl gracias por la ayuda. Te cuento que definitivamente, no funciona. Es decir, el compilador no genera error, la imagen se carga, pero no hace Drag & Drop.
Verás, tengo una tienda de pedales de guitarra. Se me ocurrió la bonita idea de crear (no soy programador profesional, pero llevo algunos años trasteando con Delphi y me ha servido mucho en mi negocio. Lo que quiero es que el usuario entre al programa, y valla conformando su cadena de pedales para ir viendo como le queda conformada. De ahí la necesidad del Drag & Drop. Veamos: ¿Qué modo utilizarías para crear en tiempo de ejecución un TIMage que carge un .jpg y que puedas hacerle Drag Drop? Digámos que mi problema, se resume a eso. Un gran abrazo, y mil gracias nuevamente por la ayuda!!! Julián |
#6
|
||||
|
||||
Hola nuevamente Julián.
Mirá, yo trabajo don Delphi 7 pero supongo que no tendría que haber diferencia en esto con Delphi 2010. Hice una prueba que funciona bién, seguramente tengas que adaptarla a tu necesidad; pero tal vez algo te pueda servir. El ejemplo consta de un TImage destino, creado en diseño dentro de un TPanel (para visualizar donde dejo la imágen) y otro TImage origen creado en en ejecución.
Nota: No realizé la liberación de los recursos por que no hace al funcionamiento, pero lógico que deberías liberarlos al finalizar. Espero te ayude en algo. Saludos. Última edición por ecfisa fecha: 20-09-2010 a las 20:14:28. |
#7
|
||||
|
||||
Hola Julián.
Me quede pensando en tu caso... y se me ocurrió algo. Al ejemplo anterior, agregale en diseño un TImage más: ImgContenedor, este va a ser el contenedor de la imágen principal. a la que vás a agregar los pedales. (Por lo que deberá tener un tamaño adecuado para 'contener' a ImgDestino) Para el ejemplo yo ubiqué ImgDestino en la esquina superior izquierda del ImgContenedor, vos situalo donde quieras. En ImgOrigen irías mostrando las imágenes de distintos pedales, para que realizen el Drag & Drop. Tendrías que modificar dos eventos en el ejemplo anterior: FormCreate y ImagenDestinoDragDrop: FormCreate:
ImagenDestinoDragDrop:
Así se superpone ImgDestino a ImgContenedor. Saludos. Última edición por ecfisa fecha: 20-09-2010 a las 20:59:38. |
#8
|
|||
|
|||
Hola Ecfisa. Bueno inicialmente me gustaría agradecerte por el interés, y la ayuda. En verdad esto me sirve mucho para solucionar el asunto de la consulta.
Estoy poco a poco implementando el código que me hás entregado. Definitivamente era muy diferente a como al principio, había imaginado. Mira, te pongo una captura de cómo, inicialmente había planeado el programa en tiempo de diseño: Me parece muy interesante, también, el enfoque de la nueva idea que le dás, es decir, yo inicialmente tal y como ves en el diseño, había pensado en que el usuario eligiera de un ListBox los pedales...Sería mejor, tal y como dices, que lo haga a partir de capturas reales. En las próximas horas, terminaré de implementar el código, y te diré que tal me fue, pero quise antes anticiparme, para agradecerte lo que ya es muy muy significativo de tu parte, y amplio en ayuda, para solventar el bonito proyecto para los pedales... Por cierto y Off Topic: Había leído hace unos días, que con el nuevo Delphi, podria crear ejecutables para distribuir en Mac y otras plataformas. Es que pensaba en que no todos los clientes pueden tener Windows, y no faltará el usuario de Mac que le gustaría probarlo... En fin eso, si, te daré créditos en el programa. Ni más faltaba Ecfisa, gracias de nuevo, y trabajaré en el código en horas de la mañana. Un gran abrazo, Julián Franco |
#9
|
||||
|
||||
De nada Julián.
Los créditos son todos tuyos que sos el que te pasaste el 99,99% del tiempo pensando y armando el programa. No creo que una centésima parte del mismo merezca mi inclusión ... Me alegra haberte podido ayudar en algo. Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Drag and Drop... | dvlt | .NET | 0 | 07-02-2008 09:42:59 |
Drag & Drop | DanForever | Varios | 2 | 01-06-2006 14:24:25 |
Drag&Drop !!! | rafstyle | OOP | 6 | 27-07-2004 04:39:41 |
Drag&Drop | xflo | Lazarus, FreePascal, Kylix, etc. | 0 | 13-10-2003 19:31:22 |
Drag & Drop | cone220 | Varios | 1 | 26-05-2003 19:06:34 |
|