Ir al contenido



Foto

Drag & Drop de Imágenes desde Windows a Delphi


  • Por favor identifícate para responder
3 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 23 septiembre 2009 - 06:16

Aquí aprenderemos a arrastrar y soltar (Drag & Drop) imágenes desde el Explorador de Windows y/o desde el Escritorio hacia un TImage en Delphi :D, creamos un nuevo proyecto y colocamos un panel y un TImage, debería quedar algo parecido a esto:

Imagen Enviada


Ahora procederemos a colocar los procedimientos y objetos en el private del formulario, quedaría así:



delphi
  1. type
  2.   TForm1 = class(TForm)
  3.     Panel1: TPanel;
  4.     Image1: TImage;
  5.     procedure FormCreate(Sender: TObject);
  6.   private
  7.     { Private declarations }
  8.     PanelOriginal : TWndMethod;
  9.     procedure PanelWindowProc (var Msg : TMessage) ;
  10.     procedure PanelImageDrop (var Msg : TWMDROPFILES) ;
  11.   public
  12.     { Public declarations }
  13.   end;



Ahora inicializamos el Panel para que podamos realizar las acciones de Drag & Drop:



delphi
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3.   PanelOriginal := Panel1.WindowProc;
  4.   Panel1.WindowProc := PanelWindowProc;
  5.   DragAcceptFiles(Panel1.Handle,true) ;
  6. end;



Ahora vamos a crear el código de los procedimientos declarados anteriormente:

PanelWindowProc



delphi
  1. procedure TForm1.PanelWindowProc(var Msg: TMessage) ;
  2. begin
  3.   if Msg.Msg = WM_DROPFILES then
  4.     PanelImageDrop(TWMDROPFILES(Msg))
  5.   else
  6.     PanelOriginal(Msg) ;
  7. end;



PanelImageDrop



delphi
  1. procedure TForm1.PanelImageDrop(var Msg: TWMDROPFILES) ;
  2. var
  3.   numFiles : longInt;
  4.   buffer : array[0..MAX_PATH] of char;
  5. begin
  6.   numFiles := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) ;
  7.   if numFiles > 1 then
  8.   begin
  9.     ShowMessage('Sólo puedes insertar una imagen a la vez!') ;
  10.   end
  11.   else
  12.   begin
  13.     DragQueryFile(Msg.Drop, 0, @buffer, sizeof(buffer)) ;
  14.     try
  15.       Image1.Picture.LoadFromFile(buffer) ;
  16.     except
  17.       on EInvalidGraphic do ShowMessage('Formato de imagen no soportado, o no es una imagen!') ;
  18.     end;
  19.   end;
  20. end;



Compilamos el proyecto y arrastremos una imagen hacia el TPanel y veremos que se realiza el proceso de Drag & Drop y se carga la imagen ;).

Espero que lo disfruten (y).

Saludos.
  • 0

#2 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 23 septiembre 2009 - 06:56

Hola
Muy bueno.
Lo único que le agregaría es la posibilidad de que la imagen se ajuste y las barras.
Claro, digo: Si alguien sabe como hacerlo....... :D :D
Excelente amigo, gracias por el aporte. (y)
Saludos
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.855 mensajes
  • LocationMadrid - España

Escrito 23 septiembre 2009 - 11:56

Buen ejemplo, amigo.  (y)

Saludos.
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 septiembre 2009 - 08:01

Hola
Muy bueno.
Lo único que le agregaría es la posibilidad de que la imagen se ajuste y las barras.
Claro, digo: Si alguien sabe como hacerlo....... :D :D
Excelente amigo, gracias por el aporte. (y)
Saludos


Para que la imagen se ajuste coloca la propiedad Strecth del objeto Image a True.
  • 0