0% encontró este documento útil (0 votos)
71 vistas18 páginas

Implementación de Drag & Drop en Delphi

Cargado por

carlos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
71 vistas18 páginas

Implementación de Drag & Drop en Delphi

Cargado por

carlos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Drag & Drop

(arrastrar y soltar)
Este proceso está definido entre:
La Componente donde comienza el
arrastre.
Propiedad DragMode := dmAutomatic;
La Componente donde se “suelta”.
Eventos:
– OnDragOver : indicar aquí de qué componentes
recibe.
– OnDragDrop : qué se hace con la información.
Ejemplo : El texto del LabeledEdit se
puede arrastrar y soltar en el ListBox

Propiedad
DragMode := dmAutomatic

Eventos
OnDragOver
OnDragDrop

Drag_and_Drop1.dpr
OnDragOver del ListBox
Forma General
procedure TForm1.ListBox1DragOver(
Sender, Source: TObject;
X, Y: Integer; State: TDragState;
var Accept:Boolean);
begin
El Componente
evento debe que recibe
analizar
Componente donde si la
la información
componente (dondeestá
receptora
comenzó
end; dispuesta el arrastre
a aceptar la
se “suelta”).
información.
OnDragOver del Listbox
(de quien recibe)
procedure TForm1.ListBox1DragOver(
Sender, Source: TObject;
X, Y: Integer; State: TDragState;
var Accept:Boolean);
begin
Accept := Source is TLabeledEdit;
end; Si Accept := TRUE aceptará de
cualquier componente.
OnDragDrop
(qué se hace con la información)
procedure TForm1.ListBox1DragDrop(
Sender, Source: TObject;
X, Y: Integer);
Var Linea : TLabeledEdit; Componente
Dónde comenzó
Lista : TListBox; que recibe
el arrastre
begin
Linea := Source as TLabeledEdit;
Lista := TListBox( Sender);
Lista.Items.add( Linea.Text );
Linea.Text := '';
end;
Drag & Drop
 Verificar el funcionamiento de la
aplicación.
 Puede ver que durante el arrastre
aparecen dos tipos de cursor:
 Sobre las componentes no
habilitadas.
 Sobre el ListBox (el único

componente habilitado)
Modificación para borrar las
líneas del ListBox
 Modificar el ejercicio anterior para
permitir seleccionar una línea del
ListBox que será borrada al ser
arrastrada sobre el formulario.

 Ver que en el ListBox la propiedad


DragMode := dmAutomatic
OnDragOver de Form1
(sólo recibe del ListBox)
procedure TForm1.FormDragOver(
Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
begin
Accept := Source is TListBox;
end;
OnDragDrop de Form1
(borra la línea seleccionada)
procedure TForm1.FormDragDrop(
Sender, Source:TObject;
X,Y:Integer);
begin
{ borra la línea seleccionada }
(Source as TListBox).DeleteSelected;
end;
Ejemplo : Drag_and_Drop2.dpr

Para cada Edit poner la propiedad


Dragmode = dmAutomatic
Evento DragOver del
Formulario
procedure TForm1.FormDragOver(Sender,
Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
//decir de quién recibe el formulario
Accept := Source is TEdit;
end;
Evento DragDrop del
Formulario
procedure TForm1.FormDragDrop(
Sender, Source: TObject; X, Y: Integer);
begin
//cómo se hace el arrastre?
Form1.Caption:=(Source as TEdit).Text;
end;
Inicio del Drag & Drop
 El uso de la propiedad DragMode para iniciar el
arrastre puede interferir con el funcionamiento
normal del mouse.
 Ej: en un Edit no se puede usar el mouse para
pasarle el foco.
 Es conveniente dejar DragMode en dmManual y
usar los eventos que responden al mouse para
iniciar el arrastre con el método BeginDrag
Ejemplo : Drag_and_Drop3.dpr

Propiedad Evento OnMouseDown


Dragmode = dmManual Edit1.BeginDrag(False)

Veamos los parámetros del método BeginDrag


Método BeginDrag
 Comienza el arrastre desde un control cuando la
propiedad DragMode es dmManual.
procedure BeginDrag(Immediate: Boolean;
Threshold: Integer = -1);

 Si Immediate = TRUE, el arrastre comienza


inmediatamente.
 Si Immediate = FALSE, el arraste comienza cuando el
mouse se desplaza la cant.de pixels indicada por
Threshold.
Método BeginDrag
 ElElarrastre
2do.param se indica
inicia la
 Ejemplos cantidad de pixels que
inmediatamente
debe desplazarse el
 Edit1.BeginDrag( TRUE );
mouse para comenzar
 Edit1.BeginDrag( FALSE ); el arrastre.
 Es opcional.
 Edit1.BeginDrag( FALSE, -2 );
 Si no está o es <0, se
 Edit1.BeginDrag( FALSE, 10 ); toma el valor por
defecto.
Si el 1er. parámetro es FALSE, el
arrastre NO comienza inmediatamente
Ejemplo : Drag_and_Drop3.dpr
 Puede usarse el parámetro Sender para
escribir un único evento
procedure TForm1.Edit1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
TEdit( Sender ).BeginDrag( False );
end;
Ejemplo : Drag_and_Drop3.dpr
 Si el arrastre debe comenzar con el botón
derecho del mouse
procedure TForm1.Edit1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ssRight in Shift then
TEdit(Sender).BeginDrag(False);
end;
Conj.de botones presionados

También podría gustarte