Page 1 of 1

Problema / Bug TWINDOW y controles

PostPosted: Tue Mar 24, 2015 9:09 am
by jmartial
Hola,

Estoy teniendo un problema extrañísimo, sé como hacer una chapuza para que funcione, pero no sé de donde viene.

Si escribo esto:

DEFINE WINDOW oWnd MENU buildmenu()
ACTIVATE WINDOW oWnd MAXIMIZED

Y desde una opción del menú, llamo a:

DEFINE DIALOG oDlg RESOURCE "MIDLG"
ACTIVATE DIALOG oDlg

Da error:
Error FiveWin/3 Cannot create Dialog Box:
Resource: MIDLG

Pero si pongo al empezar:

DEFINE WINDOW oWnd MENU buildmenu()
@0,0 BITMAP oBmp2 FILE "" NOBORDER SIZE 0,0 OF oWnd
ACTIVATE WINDOW oWnd MAXIMIZED


Funciona perfectamente!!!!!

El problema es si no se ha definido un control en la ventana, es decir, hasta que no se crea un control en la ventana, no deben de inicializarse algunos valores internos de FWH que se necesitan para poder crear un diálogo desde recursos como el del ejemplo.

¿ Cómo lo soluciono Antonio ?

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 7:11 am
by Antonio Linares
Joaquín,

Puedes copiar aqui el código del recurso "MIDLG" ?

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 8:24 am
by jmartial
Buenos días Antonio,

He puesto "MIDLG", como ejemplo, me pasa con cualquier diálogo desde recursos.

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 9:30 am
by Antonio Linares
Usas algún control TBitmap desde tus diálogos ?

Que controles usas en los diálogos ?

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 10:34 am
by jmartial
Sí, me parece que en todas.

Lo de poner un control TBIPMAP con size 0, para evitar el problema provisionalmente, ha sido por azar, podría haber usado un TSAY por ejemplo.

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 2:19 pm
by Antonio Linares
Si cambias el bitmap por el say ocurre igual ?

Funciona bien ?

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 4:59 pm
by jmartial
Antonio Increíble,

Con el TSAY sigue fallando, sólo funciona si defino un TBITMAP. ¿ ?

Es decir, ese es el control que no está "CREADO o Registrado" internamente, ¿Por qué ocurre? ¿Cómo evitarlo?

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 5:05 pm
by Antonio Linares
todas las cajas de diálogo fallan ?

Deberían fallar aquellas que tengan un control TBitmap y que no esté redefinido

Re: Problema / Bug TWINDOW y controles

PostPosted: Wed Mar 25, 2015 5:16 pm
by jmartial
Cierto,

Estoy casi seguro que sólo son las que llevan un TBitmap. Son muchos diálogos y no he podido probarlos todos.

Al salir NO CIERRA 3 Dialogos NOWAIT de una Ventana

PostPosted: Thu Mar 31, 2016 6:17 pm
by gautxori
Después de mucho tiempo con una APP con FW20d de 16 bits y WXP, estamos cambiando la APP a 32 Bits FWH 16.03
Entorno Inicial
WXP
FW20d 16 Bits
DLL con Resource WorkShop de Borland

Entorno Final
Windows 10 63
FWH 16.03 32 Bits
DLL migrada a RC y pasada a]DLL 32 bits con la utilidad \fwh\dll\rc2dll32.bat

Arranco la APP, después de unos cambios cosméticos de unos recursos borland "borbtn" pasados a BTNBMP arranca
Comienzo probando el mantenimiento mas sencillo, no hay nada modificado, es el codigo y recursos original es
Tiene tres dialogos NOWAIT, y al dar al botón de Finalizar oBtnSal OF oDbarra, este se cierra pero permanecen el pantalla
los otros dos , que desaparecen si pulso ESCAPE,

Alguna Ideal de que puede esta pasando ¿?

Mi problema es que no se bien que está pasando, y toda la APP se basa en dialogos NOWAIT

Gracias anticipadas 8-)


---------------------------

Function AbmCon(oWnd)
ccp_codi:=space(3)
ccp_desc:=space(25)
ccp_sign:=space(1)
ccp_tipo:=space(1)


Set deleted on

USE "CONCEP" ALIAS Con SHARED NEW
If !NetErr()
SET INDEX TO "conind01"
Else
Return NIL
EndIf

DEFINE ICON oIconAbm RESOURCE "WorkAreas"
DEFINE Window oWndCon OF oWnd From 0,0 to MaxRow(),MaxCol();
ICON oIconAbm;
COLOR "N/W+";
TITLE OemToAnsi("Fichero De Conceptos");
BORDER NONE NOSYSMENU NOMINIMIZE NOMAXIMIZE
SET MESSAGE OF oWndCon TO "" KEYBOARD DATE CENTERED
Barra() // Dialog 1
Codigo() // Dialog 2
Datos() // Dialog 3
oDDAbmCon:Disable()
oWndCon:SetFocus()
oBtnNew:SetFocus()
ACTIVATE Window oWndCon MAXIMIZED;
ON INIT (oWnd:Disable());
VALID(DbCloseArea("Con"),oWnd:Enable())
Return nil


Static Function Barra()
DEFINE DIALOG oDBarra OF oWndCon RESOURCE "ABM_CONCE_BARRA"
REDEFINE BUTTON oBtnNew ID 101 OF oDbarra ACTION Nueva()
REDEFINE BUTTON oBtnMod ID 102 OF oDbarra ACTION If(!Empty(ccp_codi),Modificar(),oBtnMod:SetFocus())
REDEFINE BUTTON oBtnDel ID 103 OF oDbarra ACTION If(AvisoDel(),Eliminar(),oBtnDel:SetFocus())
REDEFINE BUTTON oBtnBus ID 104 OF oDbarra ACTION (cOpcion:="B",ClearVars(),Cerrar_Opciones(),oDCAbmCon:Enable(),ocp_codi:SetFocus())
REDEFINE BUTTON oBtnSig ID 105 OF oDbarra ACTION Siguiente()
REDEFINE BUTTON oBtnAnt ID 106 OF oDbarra ACTION Anterior()
REDEFINE BUTTON oBtnSal ID 120 OF oDbarra ACTION oWndCon:End()
ACTIVATE DIALOG oDbarra NOWAIT;
VALID (oBtnSal:Click(),.T.)
return nil

Static Function Codigo()
DEFINE DIALOG oDCAbmCon OF oWndCon RESOURCE "ABM_CONCE_CODIGO"
REDEFINE BUTTON oBtnCon ID 802 OF oDCAbmCon ACTION If(HelpCon(),VolHelp(.t.),VolHelp(.f.))
REDEFINE GET ocp_codi VAR ccp_codi ID 801 OF oDCAbmCon VALID Opcion()
ocp_codi:bRclicked:=({||If(HelpCon(),VolHelp(.t.),VolHelp(.f.))})
ACTIVATE DIALOG oDCAbmCon NOWAIT;
VALID (ccp_codi:=space(3),ocp_codi:Refresh(),Abrir_Opciones(),oDCAbmCon:Disable(),oBtnBus:SetFocus(),.F.)
oDCAbmCon:Disable()
Return nil

Static Function Datos()
DEFINE DIALOG oDDAbmCon OF oWndCon RESOURCE "ABM_CONCE_DATOS"
REDEFINE GET ocp_desc VAR ccp_desc ID 802 OF oDDAbmCon
REDEFINE GET ocp_sign VAR ccp_sign ID 803 OF oDDAbmCon VALID Signo()
REDEFINE GET ocp_tipo VAR ccp_tipo ID 804 OF oDDAbmCon VALID Tipo()
REDEFINE BUTTON oBtnSi ID 812 OF oDDAbmCon ACTION Aceptar()
REDEFINE BUTTON oBtnNo ID 813 OF oDDAbmCon ACTION Cancelar()
Cerrar_SiNo()
ACTIVATE DIALOG oDDAbmCon NOWAIT;
Valid (oBtnNo:Click,.F.)
oDDAbmCon:Disable()
return nil

Re: Problema / Bug TWINDOW y controles

PostPosted: Thu Mar 31, 2016 7:01 pm
by Antonio Linares
He modificado tu ejemplo asi y aqui funciona bien. Por favor construyélo y comprueba si a ti tambien te funciona bien:

Code: Select all  Expand view
#include "FiveWin.ch"

Function Main()

DEFINE Window oWndCon From 0,0 to MaxRow(),MaxCol();
TITLE OemToAnsi("Fichero De Conceptos");
BORDER NONE NOSYSMENU NOMINIMIZE NOMAXIMIZE

SET MESSAGE OF oWndCon TO "" KEYBOARD DATE CENTERED
Barra() // Dialog 1
Codigo() // Dialog 2
Datos() // Dialog 3
ACTIVATE Window oWndCon MAXIMIZED

Return nil

Static Function Barra()
local oBtnSal
DEFINE DIALOG oDBarra OF oWndCon // RESOURCE "ABM_CONCE_BARRA"
@ 2, 2 BUTTON oBtnSal OF oDbarra ACTION oWndCon:End()
ACTIVATE DIALOG oDbarra NOWAIT;
VALID (oBtnSal:Click(),.T.)
return nil

Static Function Codigo()
DEFINE DIALOG oDCAbmCon OF oWndCon // RESOURCE "ABM_CONCE_CODIGO"
ACTIVATE DIALOG oDCAbmCon NOWAIT;
VALID ( oBtnBus:SetFocus(),.F. )
Return nil

Static Function Datos()
DEFINE DIALOG oDDAbmCon OF oWndCon // RESOURCE "ABM_CONCE_DATOS"
// Cerrar_SiNo()
ACTIVATE DIALOG oDDAbmCon NOWAIT;
Valid (oBtnNo:Click,.F.)
return nil

Re: Problema / Bug TWINDOW y controles

PostPosted: Fri Apr 01, 2016 5:11 pm
by gautxori
Buenas tardes Antonio, he incorporado este código en el programa , he añadido los recursos de la DLL y así "pelao" funciona, voy a ir incorporando código poco a poco para ver donde puede estar el fallo

Muchas gracias.
...
...
...

CONTINUO las pruebas
He conseguido que funcione
El cambio mas importante es este

Antes
Function AbmCon(oWnd)
ccp_codi:=space(3)
DEFINE Window oWndCon OF oWnd From 0,0 to MaxRow(),MaxCol();
Ahora
Function AbmCon()
ccp_codi:=space(3)
DEFINE Window oWndCon From 0,0 to MaxRow(),MaxCol();

Y LA LLAMADA al programa AbmCon
Antes
REDEFINE BTNBMP RESOURCE "1102" oBtnCon ID 102 OF oDlgMenuP ACTION AbmCon(oWnd)
Ahora
REDEFINE BTNBMP RESOURCE "1102" oBtnCon ID 102 OF oDlgMenuP ACTION AbmCon()

Pregunto :No se conceptualmente es correcto , es por continuar cambiando el resto de programas en la misma línea ¿?

Gracias por todo

Re: Problema / Bug TWINDOW y controles

PostPosted: Fri Apr 01, 2016 7:23 pm
by Antonio Linares
Si OF oWnd es nil entonces FWH lo proporciona por defecto

asi que basicamente las dos funcionan bien