Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2011
Panasys Panasys is offline
Miembro
NULL
 
Registrado: ago 2007
Posts: 88
Poder: 12
Panasys Va por buen camino
Arrastrar y Soltar

Hola a todos, he leido varios hilos de Drag & Drop y se ve algo complejo, he buscado en Gugle y he encontrado algo bastante sencillo.

Paso a contar, tengo una aplicacion que el usuario va a configurar a su necesidad ciertas imagenes en un panel contenedor colocandolas en la posicion que mejor le queden a su configuracion.

Para eso encontre este codigo que con una imagen anda de maravillas:


Código Delphi [-]
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TImage then
 begin
    TImage(Source).Left := X;
    TImage(Source).Top := Y;
 end;
 
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TImage) ;
end;

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

end.


Bien, pense, si esto funciona tambien podria funcionar esto: (le agregue un TPanel) y con el TPanel la imagen no funciona y el panel se mueve de maravillas !

Código Delphi [-]
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TImage then
 begin
    TImage(Source).Left := X;
    TImage(Source).Top := Y;
 end;
 
 if Source is TPanel then
 begin
    TPanel(Source).Left := X;
    TPanel(Source).Top := Y;
 end;
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TImage) ;
  Accept := (Source is TPanel) ;
end;

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

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if ssCtrl in Shift then Panel1.BeginDrag(True) ;
end;

end.


Pues que no estoy viendo para poder mover el panel y la imagen en el mismo form o dentro de un mismo panel?

Es mas necesito mover como 8 imagenes y por lo menos 4 paneles pero por que no lo puedo hacer con varios componentes?

"Ya verifique el DragMode, con solo la imagen o solo el panel funciona ok, pero con estos dos componentes solo funciona el panel"

Alguna idea? Gracias de antemano y un abrazo.

Javier
Responder Con Cita
  #2  
Antiguo 09-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.211
Poder: 31
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 Panasys.

Cita:
Pues que no estoy viendo para poder mover el panel y la imagen en el mismo form
Para mover cualquier control en el form, incluyendo un TPanel, asigna esto al evento OnMouseMove de cada TControl que desees mover:
Código Delphi [-]
procedure TForm.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
const
   SC_DRAGMOVE = $F012;
begin
  ReleaseCapture;
  TControl(Sender).perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 09-08-2011 a las 01:33:50.
Responder Con Cita
  #3  
Antiguo 09-08-2011
Panasys Panasys is offline
Miembro
NULL
 
Registrado: ago 2007
Posts: 88
Poder: 12
Panasys Va por buen camino
Excelente... Gracias!
Responder Con Cita
  #4  
Antiguo 09-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.211
Poder: 31
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 Panasys.

Mis disculpas . Se me escapó que en el código que pusiste se verifica que esté presionada la tecla Ctrl, para lograr el mismo efecto sería:
Código Delphi [-]
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if ssCtrl in Shift then
  begin
    ReleaseCapture;
    (Sender as TControl).Perform(WM_SYSCOMMAND, $F012,0);
  end;
end;

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 09-08-2011 a las 20:58:01.
Responder Con Cita
  #5  
Antiguo 10-08-2011
Panasys Panasys is offline
Miembro
NULL
 
Registrado: ago 2007
Posts: 88
Poder: 12
Panasys Va por buen camino
Si Señor ahora si !

Funciona perfecto !

Aunque no hace falta que presione CTRL, arrastra y suelta sin problemas.

Muchas gracias.

Un abrazo.

Javier
Responder Con Cita
  #6  
Antiguo 10-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.239
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
El código original debe funcionar. El único problema que le veo es en

Código Delphi [-]
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TImage) ;
  Accept := (Source is TPanel) ;
end;

Si lo que arrastras es una imagen, la primera línea indica al formulario que debe aceptar el objeto, pero la segunda línea lo contradice puesto que Source es una imagen y no un panel.

El código debería ser así:

Código Delphi [-]
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TImage) or (Source is TPanel) ;
end;

Sin ánimos de demeritar, creo que es mejor adherirse a los eventos de la VCL que ir a "bajo nivel".

// Saludos
Responder Con Cita
  #7  
Antiguo 10-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.211
Poder: 31
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
Cita:
Empezado por roman Ver Mensaje
Sin ánimos de demeritar, creo que es mejor adherirse a los eventos de la VCL que ir a "bajo nivel".
Tenés toda la razón. (Eso aún sin hablar de la pérdida de compatibilidad que acarrea)

Vicios que uno tendría que sacarse...

La única y pobre escusa que puedo argumentar es mi haraganería, probás que algo funciona y...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 11-08-2011
Panasys Panasys is offline
Miembro
NULL
 
Registrado: ago 2007
Posts: 88
Poder: 12
Panasys Va por buen camino
Jajajajaaaa... eso es lo bueno de estar entre programadores, yo solo tire una consulta para ver por donde ir y me llovieron respuestas una mejor que la otra !!!

Gracias !!!

Ahora no solo he aprendido a arrastrar y soltar sino como hacerlo y las diferencias entre distintos procedimientos. Es mas de lo que esperaba.

Un abrazo amigos !.

Javier
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Arrastrar y soltar en un TreeView Gabriel2 OOP 3 09-12-2005 13:57:03
Arrastrar y soltar en un TreeView... User_baja1 Varios 1 18-04-2005 13:39:50
Arrastrar y soltar con DBGrids NickName Varios 2 22-03-2005 02:20:03
Arrastrar y Soltar!!! chechu Varios 6 21-10-2004 20:26:35
arrastrar y soltar imagen haZe Varios 2 03-03-2004 17:06:10


La franja horaria es GMT +2. Ahora son las 21:45:36.


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