 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
snupoo Lt Cmdr


Registrado: 19 Feb 2004Mensajes: 108Ubicación: Merida yucatan Mexico
|
Publicado: Vie 05 Jun, 2015 7:34 pm Asunto: Drag&Drop |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Dom 07 Jun, 2015 1:29 pm Asunto: |
|
|
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 |
|
 |
snupoo Lt Cmdr


Registrado: 19 Feb 2004Mensajes: 108Ubicación: Merida yucatan Mexico
|
Publicado: Lun 08 Jun, 2015 10:00 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|