@Joseg, lo he probado (la opción de WinAPI) y funciona perfectamente.
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:
IDENTIFICATION DIVISION.
PROGRAM-ID. "MyWndProc".
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OldWndProc IS EXTERNAL PIC S9(9) COMP-5.
01 WM_DROPFILES PIC S9(9) COMP-5 VALUE H"0233".
01 P1 POINTER.
01 HWND REDEFINES P1 PIC S9(9) COMP-5.
01 P2 POINTER.
01 MSG REDEFINES P2 PIC 9(9) COMP-5.
01 P3 POINTER.
01 WPARAM REDEFINES P3 PIC S9(9) COMP-5.
01 P4 POINTER.
01 LPARAM REDEFINES P4 PIC S9(9) COMP-5.
01 dropFileName pic x(250).
01 fileSize pic 9(4) comp-5.
LINKAGE SECTION.
77 PARM1 PIC S9(9) COMP-5.
77 PARM2 PIC 9(9) COMP-5.
77 PARM3 PIC S9(9) COMP-5.
77 PARM4 PIC S9(9) COMP-5.
PROCEDURE DIVISION WITH STDCALL USING PARM1 PARM2 PARM3 PARM4.
MOVE FUNCTION ADDR(PARM1) TO P1
MOVE FUNCTION ADDR(PARM2) TO P2
MOVE FUNCTION ADDR(PARM3) TO P3
MOVE FUNCTION ADDR(PARM4) TO P4
IF MSG = WM_DROPFILES
call "DragQueryFileA" with stdcall using by value WPARAM
by value 0
by reference dropFileName
by reference fileSize
display "Fichero: " dropFileName
END-IF
CALL "CallWindowProcA" WITH STDCALL USING BY VALUE OldWndProc
BY VALUE HWND
BY VALUE MSG
BY VALUE WPARAM
BY VALUE LPARAM
GOBACK
.
Luego en el evento "Opened" del Form, pones esto:
Código COBOL:
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 wsHwnd pic s9(9) comp-5.
01 ptrMyWndProc procedure-pointer.
01 newWndProc redefines ptrMyWndProc pic s9(9) comp-5.
01 OldWndProc is external pic s9(9) comp-5.
01 GWLP-WNDPROC pic s9(9) comp-5 value -4.
PROCEDURE DIVISION.
set ptrMyWndProc to entry "MyWndProc@16"
move "hwnd" of pow-self to wsHwnd
call "GetWindowLongA" with stdcall using by value wsHwnd
by value GWLP-WNDPROC
returning OldWndProc
call "SetWindowLongA" with stdcall using by value wsHwnd
by value GWLP-WNDPROC
by value newWndProc
call "DragAcceptFiles" with stdcall using by value wsHwnd
by value pow-true
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
