Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2011
Panasys Panasys is offline
Miembro
 
Registrado: ago 2007
Posts: 88
Poder: 18
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.508
Poder: 36
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 02:33:50.
Responder Con Cita
  #3  
Antiguo 09-08-2011
Panasys Panasys is offline
Miembro
 
Registrado: ago 2007
Posts: 88
Poder: 18
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.508
Poder: 36
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 21:58:01.
Responder Con Cita
  #5  
Antiguo 10-08-2011
Panasys Panasys is offline
Miembro
 
Registrado: ago 2007
Posts: 88
Poder: 18
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.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Respuesta



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 14:57:03
Arrastrar y soltar en un TreeView... User_baja1 Varios 1 18-04-2005 14:39:50
Arrastrar y soltar con DBGrids NickName Varios 2 22-03-2005 03:20:03
Arrastrar y Soltar!!! chechu Varios 6 21-10-2004 21:26:35
arrastrar y soltar imagen haZe Varios 2 03-03-2004 18:06:10


La franja horaria es GMT +2. Ahora son las 21:43:27.


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
Copyright 1996-2007 Club Delphi