![]() |
Arrastrar y soltar archivos (Drag and Drop)
Hola,
¿Hay alguna forma en Powercobol de arrastrar un archivo a un objeto (por ejemplo, una Listview) y capturar el nombre y/o la ubicación del archivo? El objetivo sería arrastrar imágenes desde una carpeta de Windows a una aplicación Powercobol. Actualmente uso esta función: Código COBOL:
Gracias, Jose |
@Joseg, nunca he investigado el tema, pero tenemos un ejemplo en el foro: https://www.cobolforo.es/showthread....ight=drag+drop
A ver qué tal. ;) |
Cita:
|
@Joseg, no lo he probado pero por lo que veo no es tan difícil. Mira esto a ver si te sirve:
|
Cita:
COPY y PAST puedo hacer (CTR+C / CTRL+V). Gracias |
1 Archivos Adjunto(s)
@Joseg, lo he probado (la opción de WinAPI) y funciona perfectamente. :bien:
Lo primero, creas un fichero nuevo en el directrio del proyecto y lo llamas MyWndProc.cbl. Luego lo añades en el proyecto (import) y le pegas el siguiente contenido: Código COBOL:
Luego en el evento "Opened" del Form, pones esto: Código COBOL:
No olvides de poner la directiva de compilación ALPHAL(WORD) tanto en las propiedades de los Scripts de Eventos como en las del fichero myWndProc.cbl. Necesitarás la librería que va en adjuntos. Y listo, a mi me funciona! P.D. me da que a nuestro amigo @Nitzer le va a gustar también esto :mola: |
¡¡¡Asombroso!!! Muchas gracias
:bien: Cita:
|
1 Archivos Adjunto(s)
Hola.
Está a dar-me um erro na compilação. Podem ajudar-me? Gracias |
Hola @Paulo , que error de compilación te da ? :help:
Saludos ... |
1 Archivos Adjunto(s)
Cita:
Em anexo envio imagem com o erro Gracias |
@Paulo, se te habrá olvidado añadir la librería shell32.lib en tu proyecto, va dentro del ZIP
Veo que has puesto la directiva ALPHAL(WORD) porque el nombre de la función aparece en Camel-Case, pero sin la librería no va a compilar porque no sabe dónde está la función. Si has añadido la librería y te sigue dando error, tienes que hacer REBUILD ALL para recompilarlo todo y funcionará. |
1 Archivos Adjunto(s)
Cita:
Hola Kuk Adicionei a livraria shell32.lib, fiz o rebuild all, mas o erro continua... |
@Paulo, es que la función DragAcceptFiles no es así, sólo lleva 2 parámetros, y tú le has añadido un parámetro demás y es por eso que no compila, debe ser así:
Código COBOL:
Y tú tienes 2 veces el pow-true: Código COBOL:
|
Gracias Kuk,
Tanto verifiquei a rotina e não vi esse erro. |
@Paulo, de nada compañero, ya nos cuentas y si puedes enséñanos cómo te ha quedado ;)
|
Hola , estoy implementado Arrastrar y soltar archivos (Drag and Drop) sin procedure-pointer
obteniendo la direccion de la funcion , la consulta cual seria la mejor forma de atrapar el nombre del archivo arrastrado , lo estoy haciendo con un cmtimer pero no se si es la forma correcta :piensa::piensa::piensa: Código COBOL:
Código COBOL:
|
@fastpho, no sé si he entendido bien tu pregunta, pero en este caso hacemos algo parecido a lo de buscar y traer enfrente un programa. Es decir que le pasamos una función como parámetro, la cual se ejecuta cuando ocurra el evento correspondiente. Con lo cual, no necesitas un Timer, puedes hacer lo que necesitas en la propia función "MyWndProc" que se ejecuta, como decía, automáticamente cuando ocurra el evento.
|
@Kuk , no me explicado bien , desde el ProcDragFile.cbl obtengo el archivo arrastrado
con la funcion DragQueryFileA : Código COBOL:
en la variable dropFileName tengo el nombre del archivo ahora como le paso ese dato al formulario que tiene en este caso un control cmImage , la unica forma que encontre es metiendo un control timer en el formulario, en la variable que se llama EXP-FILE-NAME que esta declarada como External Global en el formulario y en el ProcDragFile.cbl como External Luego en el timer tengo : Código COBOL:
Esta implementacion me esta funcionando , pero tengo el timer consumiendo cpu Saludos... |
@fastpho, ah vale, ya lo entiendo.
Pues mira, tengo una solución que no vas a entender pero funciona (en mi caso por lo menos). En "Opened" de tu Form pones esto: Código COBOL:
En "MyWndProc" añades esto en la Working: Código COBOL:
Y en la procedure, en el IF MSG = WM_DROPFILES le añades este código, no intentes entenderlo, simplemente pégalo tal cual: ;) Código COBOL:
Rebuild ALL y ejecuta, a ver si funciona. Si no funciona, dime qué error te da. |
@Kuk me anduvo perfecto lo unico que añadi fueron los valores de :
Código COBOL:
Muchas Gracias :mola::mola: Saludos ... |
@fastpho, sí, efectivamente se me han olvidado las variables en la Working de "MyWndProc", acabo de editar el post original :mm:
Me alegro de que te haya funcionado! :beber: P.S. a @Nitzer le va a gustar todo esto :) |
@fastpho, se me ha ocurrido una manera más elegante de hacerlo.
En "Opened" de tu form pones: Código COBOL:
En "MyWndProc" haces esto: Código COBOL:
A ver qué tal, a mi me funciona. Y el código me gusta más, porque el CALL a "XPOW-..." es un poco chapuza. ;) [HR][/HR] El ejemplo limpio queda así: "Opened" del form: Código COBOL:
"MyWndProc": Código COBOL:
|
1 Archivos Adjunto(s)
@Kuk me funciona esta opcion tambien sin usar procedure-pointer, y es mas elegante digamos esta opcion,
lo unico es que tuve que modificar algunas lineas por que en la version 5.0 de PowerCobol para acceder a objetos se debe usar : Código:
REPOSITORY.y para poder convertir la referencia a la Clase Ole se debe usar : Código COBOL:
Muchas Gracias por tu tiempo Saludos :beber: [ATTACH=CONFIG]1010[/ATTACH] |
@fastpho, declarando "OLE" también fucniona en PowerCOBOL v9 y v10. :bien:
Lo que no me gusta es que el CmImage de Power no funciona con nada salvo *.JPG y en un formato concreto de JPEG, que los hay diferentes y sigue siendo JPEG pero no los muestra todos. De GIF o PNG ya no digo nada... Es muy pobre este control. |
1 Archivos Adjunto(s)
@fastpho, madre mía el tonto que hemos hecho......... :D :D :D
Acabo de fijarme y CmImage tiene una propiedad llamada DropEnabled, que si la marcas, no hace falta ni WinAPI ni COM/OLE, funciona solito :mm: :rofl: [ATTACH=CONFIG]1011[/ATTACH] |
@Kuk , si lo probe tildando la opcion DropEnabled y tambien funciona sin la
necesidad de OLE/API , y como decis lo malo del cmimage no toma .png por ejemplo u otros formatos mas modernos De todas maneras , DragQueryFileA, sirve por ejemplo para arrastrar archivos en general a un listview u otro objeto , tiene su sentido todo esto, me parece a parte de arrastrar imagenes. Saludos... |
@fastpho, sí efectivamente sirve para muchas cosas, pero para el propósito inicial, con un solo clic nos valía :D
Pero bueno, así hemos aprendido cosas nuevas también :bien: |
Hola Amigos: ahi estuve probando esto y está espectacular, Felicitaciones.
Ahora una pregunta, esto mismo se puede hacer en RMCobol con WOW? Saludos Fito... |
@Fito, yo nunca he tenido RM así que no te puedo decir nada al respecto. Habrá que ir probando y a ver, lo mismo lo hacemos funcionar.
No sé si RM permite llamadas a la WinAPI (o cualquier librería C exterior), si es así, lo más seguro es que lo vamos a poder hacer. Es decir, lo principal, que es el SubClassing de la WinAPI. Luego lo de invocar algo desde la función, será por OLE u otra cosa, es lo de menos. Encontraremos también la manera de hacerlo. Te propongo que hagas pruebas, si te salta algún error o no funciona de manera esperada, lo tratamos juntos y vamos viendo :beber: Lo único, si lo hacemos que sea en el apartado de RM, no aquí, para no mezclar las churras con las merinas ;) |
Hola Carlitos:
En realidad yo no programo en RM, fue un colega que le mostré esto y como él tiene todo en RM me preguntó y trasladé su inquietud. Te digo más, ni siquiera tengo RM instalado en, mi máquina. Gracias por responder. Abrazo... Fito... |
@Fito, bueno pues tu compi si está en el foro, lo podemos ver con él, o que se registre si no es el caso. Es un tema interesante y ayudaré en lo que pueda. :bien:
|
| La franja horaria es GMT +2. Ahora son las 02:05. |
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.