PDA

Ver la Versión Completa : Arrastrar archivo a un TEdit para leer su ruta


aguml
04-01-2018, 19:42:46
Hola amigos, ahora mismo he conseguido el soltar un archivo sobre cualquier parte del form y leer su ruta y lo hice con este código: https://www.clubdelphi.com/foros/showthread.php?t=54696
Pero la idea es poder hacer que solo acepte el archivo el textbox deseado y que el icono de prohibido aparezca en el resto del form y sus componentes. ¿Sería eso posible?¿Cómo?

Neftali [Germán.Estévez]
05-01-2018, 11:55:14
Variando un poco el ejemplo de la página puedes conseguir lo que necesitas.

Defines en el formulario estas clases:

TDragDropEdit = class(TEdit);
TEdit = class(TDragDropEdit)
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
end;

TForm1 = class(TForm)
Edit1: TEdit;
...


Y en la implementación tendrás algo como esto:


procedure TEdit.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array[0..MAX_PATH] of Char;
RutaArchivoTemp : String;
begin
try
if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then begin
Self.Text := 'Archivo => ' + CFileName;
Msg.Result := 0;
end;
finally
DragFinish(Msg.Drop);
end;
end;


El el create defines que el que acepta es tu control:


procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Self.Edit1.Handle, True);
end;

aguml
05-01-2018, 12:27:05
Cómo sería eso en c++builder?

Neftali [Germán.Estévez]
05-01-2018, 12:42:02
Ahí te tendrá que ayudar otro compañero, yo me quedo en Delphi, pero no debe ser complicado.

movorack
05-01-2018, 14:21:05
Tambien uso Delphi, pero creería que el truco está en el handle que determinas al aceptar el arrastre de archivos.

ecfisa
06-01-2018, 01:41:54
Hola.

Revisa los siguientes enlaces:

Drag and Drop from Explorer to a Tree View (http://www.bcbjournal.org/bcbcaq/?loc=views&caq=32)
What a drag! (http://bcbjournal.org/articles/vol1/9709/What_a_drag!.htm?PHPSESSID=392dcad841e9fb29482d088872c28814)
DragQueryFile (C++ BUILDER 6 Developer's guide) (https://books.google.com.ar/books?id=74QctX2heRsC&pg=PA156&lpg=PA156&dq=C%2B%2B+BUILDER+dragqueryfile&source=bl&ots=130_ZTFNa-&sig=yNVqg8ujrqDrsffNSsezw--0dbQ&hl=es-419&sa=X&ved=0ahUKEwjgnfX8i8LYAhXKiJAKHTd_Ba8Q6AEIWjAG#v=onepage&q=C%2B%2B%20BUILDER%20dragqueryfile&f=false)


Saludos :)

aguml
06-01-2018, 22:48:08
Muchas gracias! El primer enlace creo que prácticamente lo que quiero y solo tengo que cambiar el componente y poco más.

Neftali [Germán.Estévez]
08-01-2018, 08:48:59
Tambien uso Delphi, pero creería que el truco está en el handle que determinas al aceptar el arrastre de archivos.

En parte sí, pero sólo con eso no basta.
Ya que en ese caso el mensaje que se está capturando en el ejemplo original (WM_DROPFILES) no llega, por eso es necesario realizar la otra parte.

NOTA: Por un error en la edición, este mensaje originalmente salió dentro del de [movorack]. Lo corrijo y lo añadio a uno nuevo.