Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Capturar Drag del explorer en filelistbox (https://www.clubdelphi.com/foros/showthread.php?t=59142)

vivamotos 14-08-2008 11:55:13

Capturar Drag del explorer en filelistbox
 
Saludos,

Pues quisiera hacer lo siguiente:

Tengo un FileListBox en mi programa en ejecución y quisiera yo que cuando habra una ventana del explorador de windows y cogiera un fichero de un directorio y lo arrastrará a mi programa en el filelistbox que capturara la dirección del fichero del explorador.

Alguna sugeréncia?

Grácias.

Neftali [Germán.Estévez] 14-08-2008 12:36:07

Pues aquí tienes una explicación con el código delphi y la demo para que puedas probarlo.

escafandra 14-08-2008 14:10:13

Si quieres ver una solución escrita en BC++ entonces mira esto. y también puedes encontrar otro ejemplo aquí

Saludos.

Neftali [Germán.Estévez] 14-08-2008 14:41:11

Cita:

Empezado por escafandra (Mensaje 307562)
...una solución escrita en BC++

Perdón, escribí rápido sin ver el título del foro...:o:o:o

escafandra 14-08-2008 15:34:29

Cita:

Empezado por Neftali (Mensaje 307566)
Perdón, escribí rápido sin ver el título del foro...:o:o:o

Aunque el foro sea de Builder los códigos en delphi son muy ilustrativos y no son difíciles de traducir. Yo agradezco también las respuestas en delphi a mis preguntas para Builder.

Cualquier sugerencia, creo, debe ser bien venida, por el interés y el tiempo tomado.

Saludos. :)

vivamotos 14-08-2008 16:17:47

A probarlos
 
Gracias por contestar rápido voy a ver los manuales :)

120123123 grácias

vivamotos 14-08-2008 16:57:27

Otra cosilla
 
Escuchad,

Lo que quiero hacer ahora es que solo me capture el PATH del archivo que le envio cuando este encima de un ListBox que tengo, solamente sobre ese listbox.

Grácias.

escafandra 15-08-2008 23:01:29

Bueno, no se si entiendo bien. Para capturar sólo el path, convierte el nombre de archivo a path con ExtractFilePath().

Si sólo quieres capturar en un control:
Código:

// Procesar los mensajes de la aplicación
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
  // Procesar el mensaje  WM_DROPFILES, aquí o en otra función a parte...
  if(Msg.message == WM_DROPFILES){
      char archivo[MAX_PATH];
      int n = DragQueryFile((HDROP)Msg.wParam, 0, archivo, sizeof(archivo));
      if(n>0) Procesar(archivo); // Funcion que procesa el archivo
      DragFinish((HDROP)Msg.wParam);
      Handled = true;
  }
}

Como tu escribes la función Procesar(archivo), haces lo que quieras.
Mediante esa función, que puede ser miembro de tu ListBox, capturas el nombre del path.

También puedes filtrar el mensaje WM_DROPFILES, es decir en la parte del código que responde a éste del ejemplo de arribapuedes testar que tu puntero de ratón está en tu ListBox, por ejemplo.

Código:

TPoint Point;
::GetCursorPos(&Point);
HWND W = ::WindowFromPoint(Point);
if(W == MyListBox->Handle){
  // lo que quieras.......
}

Es decir:
Código:

// Procesar los mensajes de la aplicación
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
  // Procesar el mensaje  WM_DROPFILES, aquí o en otra función a parte...
  if(Msg.message == WM_DROPFILES){
      char archivo[MAX_PATH];
      int n = DragQueryFile((HDROP)Msg.wParam, 0, archivo, sizeof(archivo));
      if(n>0){
        TPoint Point;
        ::GetCursorPos(&Point); 
        HWND W = ::WindowFromPoint(Point);
        if(W == MyListBox->Handle){
          Procesar(archivo); // Funcion que procesa el archivo
        }       
      }
      DragFinish((HDROP)Msg.wParam);
      Handled = true;
  }
}

Es decir, tienes muchas formas para conseguir que ti ListBox "capture" ese path.

Espero haberte entendido y darte la solución a tu problema.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:56:25.

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