|
![]() Hola a todos. Ya puse un post sobre este asunto en el otro foro, pero no he logrado desde entonces arreglar el tema.
Estoy intentando crear una funcion COBOL para imitar/sustituit o lo que es lo mismo hacer subclassing de CallWindoProc. Para ello hay que simular algo asi: Código CPP:
Lo hago de la siguiente manera: Código COBOL:
Pero no recibe los parametros bien y no logro entender por que. A veces recibe los recibe, pero solo 1 campo por cada llamada y no los 4 a la vez, y encima lo hace casi siempre en el primer campo, otras veces no recibe nada... En teoria llamamos al WinAPI con STDCALL y va bien, o sea que en teoria deberia funcionar bien con WITh stdcall en PROCEDURE pero no se por que no funciona... A lo mejor alguna opcion de compilacion? He mirado el manual pero no he visto nada que pueda cambiar algo en esto. ![]() NORMAS DEL FORO - obligatorias de conocer para TODOS. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale ![]() |
![]() |
![]() |
Ha dicho Gracias : 1 |
Kuk (12 de marzo de 2015)
|
|
![]() Rapinto, en princpio lo que intento es simular MDI Form en PowerCOBOL.
En realidad, cada Form en PowerCOBOL se compone de:
Pero a nivel del compilador en modo Diseño, nosotros pensamos que es un Form. Si en en un Form haces GetParent, obtienes el hwnd del ParentForm. Lo que yo hago para simular MDI, es ChildForm.SetParent = ParentForm.hwnd y asi el ParentForm se hace Container del ChildForm. El problema es que cuando haces click en ChildForm, el ParentForm pierde focus, y vice versa. Hablé con gente de C++/Delphi + WinAPI. Me dijeron que en este caso hay que hacer subclassing de la ventana. Es decir:
Código COBOL:
Código COBOL:
Rui, el codigo no es exacto, lo acabo de escribir de memoria (estoy en el trabajo). Pero entenderas lo que hago. Es sustiuir CallWindoProc por MyWndProc, camptar WindowMessage, si es desactivar Focus visual, muevo 0, y llamo default CallWindoProc con PTR-OldWndProc. A ver que opians. ![]() NORMAS DEL FORO - obligatorias de conocer para TODOS. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale ![]() |
![]() |
![]() |
|
![]() Kuk,
Estive a analisar melhor e encontrei este texto: AllAPI.net - Your #1 source for using API-functions in Visual Basic! que explica Subclassing muito bem. (Tem exemplo a funcionar bem com a source em VB6). Segundo este texto, o que estás a fazer parece-me numa primeira analise correto. Mas vou continuar a ver melhor. Se descobrires mais alguma coisa diz-me. Saludos, Rui |
![]() |
![]() |
Ha dicho Gracias : 1 |
Kuk (13 de marzo de 2015)
|
|
![]() Rapinto, ando un poco mal de tiempo, pero lo que he pensafo de probar es en modo OO COBOL. Es decir, crear aplicacion con la opcion 2. Ahi a lo mejor funciona...
Lo que no entiendo es que si llamamos API-s con STDCALL bien, significa que la CALL-CONVENTION es correcta para WinAPI. Pero (!!!), al ser llamada MyWndProc, recibe parametros pero no todos, y en campos diferentes. Lo que he podido detectar ha sido que a veces (no siempre), es como si por cada campo hay 1 llamada. Es decir:
En lugar de llamarse 1 vez con los 4:
Lo que a mi me dice que:
Añadido despues de 13 horas 38 minutos Rui, he encontrado esto en el NetCOBWinUsersGuide.pdf: ![]() NORMAS DEL FORO - obligatorias de conocer para TODOS. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale ![]() Última edición por Kuk fecha: 13 de marzo de 2015 a las 22:56. Razón: Post añadido |
![]() |
![]() |
|
![]() Al final he hecho una DLL en C++ a la cual paso el OldWndProc y en la cual he definido MyWndProc.
Funciona 100%! Asi que he podido simular MDI MainForm en PowerCOBOL! ![]() ![]() NORMAS DEL FORO - obligatorias de conocer para TODOS. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale ![]() |
![]() |
![]() |
|
![]() eslopes, aquí lo tienes
![]() Pero ojo, no es MDI realmente, es sólo una simulación. Lo que se hace es que la ventana "MDI" no pierda foco visualmente. Como verás en los marcos amarillos, visualmente los 2 ControlBox están activos. ![]() NORMAS DEL FORO - obligatorias de conocer para TODOS. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale ![]() |
![]() |
![]() |
|
![]() eslopes, claro, de eso se trata. La ventana principal se hace Parent de las ventanas Child. Si muevo la ventana Principal, se mueven todas las ventanas.
![]() NORMAS DEL FORO - obligatorias de conocer para TODOS. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale ![]() |
![]() |
![]() |
Ha dicho Gracias : 1 |
eslopes (26 de agosto de 2015)
|
![]() |
Tags |
callback , mdi , wndproc |
Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes) | |
Herramientas | |
|
|
Archivo - COBOL Foro | Contactar con Nosotros - COBOL Foro |