Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
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 26-01-2004
Avatar de Trigger
Trigger Trigger is offline
Miembro
 
Registrado: nov 2003
Ubicación: Barranquilla (Colombia)
Posts: 79
Poder: 21
Trigger Va por buen camino
Ni idea del drag and drop

Saludos, lo que quiero hacer hacer un drag and drop entre los items de dos listbox, me explico tengo unos items en el listbox1, los selecciono con el mouse y los arrastro hasta el listbox2 y alli los sultos la idea es que los añada, como hacerlo no se por que nuca he manejado drag and drop

Agradeceria cualquier ayuda que pudiesen brindarme....

Ok
__________________
Trigger
Responder Con Cita
  #2  
Antiguo 26-01-2004
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
F1

Ahora que si la tecla está muy dura aquí te va una idea:

Lo más sencillo es poner la propiedad DragMode del objeto que quieres arrastrar en dmAutomatic. En este caso el objeto que arrastras es ListBox1 ya que los ítemes en sí no son objetos.

Con esta propiedad podrás observar que al intentar arrastrar el ListBox1 el cursor del ratón automáticamente cambia su forma al flechita con la hojita.

Esto es en cuanto al objeto que se arrastra. Por otro lado debes manejar los eventos OnDragOver y OnDragDrop del objeto destino (en este caso ListBox2).

OnDragOver se genera cuando hay un objeto arrastrándose sobre él. Este evento tiene tres parámetros importantes:

Sender - que es el objeto que genera el evento, es decir ListBox2 ya que sobre él estás arrastrando.

Source - que es el objeto que se está arrastrando, es decir ListBox1.

Accept - este es un parámetro por referencia y tu ajustas su valor dependiendo de si deseas o no aceptar el objeto que te quieren soltar ya que no necesariamente es ListBox1: podrías tener otros objetos arrastrándose:

Código:
procedure ListBox2DragOver(...):
begin
  Accept := (Source = ListBox1);
end;
Si aceptas el objeto entonces se genera el evento OnDragDrop al momento en que se "suelte" el objeto.

En este evento es donde deberás hacer la inserción de los ítemes de ListBox1.

OnDragDroptambién tiene los parámetros Sender y Source iguales a los de OnDragOver de manera que puedes hacer un moldeo:

TListBox(Source) para acceder al ListBox que se arrastra. Claro que puedes usar directamente ListBox1 pero haciendo el moldeo a través de Source podrás habilitar ListBox2 para que reciba ítemes de más de un ListBox origen.

¿Cómo insertas los ítems?

Bueno, teniendo acceso a ListBox1 sólo debes recorrer sus ítemes en un ciclo. En cada vuelta del ciclo verificas si el ítem está selecionado (ListBox1.Selected[Indice] es true) y en dado caso usas ListBox2.Items.Add para insertarlo.

Si quieres más control sobre dónde insertar los ítemes (con Add los insertas al final de la lista) puedes usar los parámetros X,Y del evento OnDragDrop así como el método ItemAtPos para determinar sobre qué item se soltaron los ítemes:

Código:
DropIndex := ListBox2.ItemAtPos(Point(X, Y), true);
Esto pondría DropIndex igual al ítem sobre el cual sueltas los ítemes que arrastraste. Así con el método ListBox2.Items.Insert (en lugar de Add) insertarías los ítemes en dicha posición.

// Saludos
Responder Con Cita
  #3  
Antiguo 26-01-2004
Avatar de Trigger
Trigger Trigger is offline
Miembro
 
Registrado: nov 2003
Ubicación: Barranquilla (Colombia)
Posts: 79
Poder: 21
Trigger Va por buen camino
Wink

Muchas gracias roman, esa si es una explicacion empezara a trabajar en ello
__________________
Trigger
Responder Con Cita
  #4  
Antiguo 31-07-2008
radge radge is offline
Miembro
 
Registrado: may 2008
Posts: 147
Poder: 16
radge Va por buen camino
Cita:
Empezado por roman Ver Mensaje

¿Cómo insertas los ítems?

Bueno, teniendo acceso a ListBox1 sólo debes recorrer sus ítemes en un ciclo. En cada vuelta del ciclo verificas si el ítem está selecionado (ListBox1.Selected[Indice] es true) y en dado caso usas ListBox2.Items.Add para insertarlo.

Si quieres más control sobre dónde insertar los ítemes (con Add los insertas al final de la lista) puedes usar los parámetros X,Y del evento OnDragDrop así como el método ItemAtPos para determinar sobre qué item se soltaron los ítemes:


// Saludos


Buenas , gracias por tu "tutorial" estoy probando esto con delphi5 , me he quedado encallado en lo del ciclo , se recorrer el listbox por los indices , pero no como recuperar los valores que tengo almacenados.

Alguna idea ?


Me he quedado trabado aki , a ver k os parece.


Código Delphi [-]
procedure TfrmdesglosePedido.destiListboxDragDrop(Sender, Source: TObject;
  X, Y: Integer);
var DropIndex : integer;
var I : integer;
begin
   for I := origenListbox.Items.Count - 1 downto 0 do
      begin
         if origenListbox.Selected[i] = True then
            begin
                //añadimos al 2 listbox
                destiListbox.Items.Add(inttostr(I));
                //borramos del 1º listbox
                origenListbox.Items.delete(I);
            end;
      end;
end;

gracias , radge

Última edición por radge fecha: 31-07-2008 a las 09:46:23.
Responder Con Cita
  #5  
Antiguo 01-08-2008
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
Hola,

En lugar de

Código Delphi [-]
destiListbox.Items.Add(inttostr(I));

pon

Código Delphi [-]
destiListbox.Items.Add(origenListbox.Items[i]);

// Saludos
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


La franja horaria es GMT +2. Ahora son las 01:16:16.


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