Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Drag&Drop

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Drag&Drop Responder citando

Saludos a todos.

Estoy tratando de implementar esta característica en mis aplicaciones pero hasta ahora no he podido, he revisado los temas de este foro y de otros, pero no me han dado resultados, incluso encontré un artículo donde viene todo explicado incluso hay un ejemplo el cual eh copiado y nada (pueden encontrar el link al final).

El problema es que el evento nunca se dispara ya probé con BCB6 y con RAD XE7 pero con los dos pasa exactamente lo mismo.

Espero que alguien me pueda orientar en que estoy haciendo mal.

[url=http://bcbjournal.org/articles/vol1/9709/What_a_drag!.htm?PHPSESSID=053fb9b24a850e83884bc6a6367ebc8c]Articuló[/url]

Como nota adicional mi sistema operativo es w8.1.
_________________
[img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Posiblemente tu problema esté en que tu S.O. es Win7 ó Win8 y tu IDE o tu App se ejecuta como administrador. En ese caso debes desactivar el filtro de mensajes con la API ChangeWindowMessageFilter, dicho filtro está activado por seguridad.

Lo que sigue es un ejemplo hecho con BCB5:
Un Formulario con un TListBox en el que puedes arrastrar y soltar un número determinado de archivos.

Código:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
  TListBox *ListBox1;
  void __fastcall FormCreate(TObject *Sender);
private:
  void __fastcall AppMessage(tagMSG &Msg, bool &Handled);
public:      // User declarations
  __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Código:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

// Para usar WM_DROPFILES en Win7 y Win8 sobre aplicaciones administrador
#define MSGFLT_ADD  1
#define WM_COPYGLOBALDATA 0x0049
typedef BOOL (__stdcall *PChangeWindowMessageFilter)(UINT  message, DWORD dwFlag);
PChangeWindowMessageFilter _ChangeWindowMessageFilter;



//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // Para usar WM_DROPFILES en Win 7 y Win8 como administrador
  _ChangeWindowMessageFilter = (PChangeWindowMessageFilter)GetProcAddress(GetModuleHandle("User32.dll"), "ChangeWindowMessageFilter");
  if(_ChangeWindowMessageFilter){
    _ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
    _ChangeWindowMessageFilter(WM_COPYGLOBALDATA, MSGFLT_ADD);
  }

  // Para aceptar arrastrar archivos.
  DragAcceptFiles(Handle, true);

  // Asignación del procesador de mensajes para la aplicación y sus ventanas
  Application->OnMessage = AppMessage;

  ListBox1->Items->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
  if(Msg.message == WM_DROPFILES){
    char archivo[MAX_PATH];
    // Para recibir todos los archivos arrastrados
    int n = DragQueryFile((HDROP)Msg.wParam, 0xFFFFFFFF, archivo, sizeof(archivo));
    for(int i=0; i<n; i++){
      // Recibo cada archivo...
      DragQueryFile((HDROP)Msg.wParam, i, archivo, sizeof(archivo));
      ListBox1->Items->Add(archivo);
    }
    DragFinish((HDROP)Msg.wParam);
    Handled = true;
  }
}
//---------------------------------------------------------------------------




Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchísimas gracias.

Agregando el código que pones logre que funcionara.

Saludos.
_________________
[img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.