Una pregunta de recursos
Una pregunta de recursos
Hola a todos
Una pregunta por si se puede hacer. En los recursos ponemos los nombres que luego salen como textos en nuestros diálogos. Mi pregunta es, ¿se pueden capturar de alguna manera esos nombres en un array?
Ejemplo de recurso
DLGTORRE DIALOG DISCARDABLE 7, -12, 355, 300
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_VISIBLE
CAPTION "Mantenimiento de Torres"
FONT 9, "MS Sans Serif"
BEGIN
CONTROL "Torre", 1, "Static", WS_GROUP, 18, 7, 40, 8
CONTROL "Codigo Cliente", 2, "Static", WS_GROUP, 140, 5, 60, 10
CONTROL "Nombre", 3, "Static", WS_GROUP, 18, 24, 40, 8
CONTROL "Ubicación", 4, "Static", WS_GROUP, 18, 42, 40, 8
CONTROL "Población", 5, "Static", WS_GROUP, 18, 58, 40, 8
CONTROL "Provincia", 6, "Static", WS_GROUP, 18, 76, 40, 8
CONTROL "Comunidad", 7, "Static", WS_GROUP, 18, 95, 45, 8
CONTROL "Fecha Alta", 8, "Static", WS_GROUP, 220, 76, 40, 8
Lo que yo quiero capturar es el nombre que está a continuación de CONTROL, y así hacer un array con esos nombres para luego por medio de dos funciones, p.e carga_nombres y
pinta_ nombres, poder ponerlos con el color del fondo del diálogo correspondiente.
El array podría quedar algo así
aArray[1] = "Torre"
aArray[2] = "Codigo Cliente"
etc...
¿Se puede?
Un saludo a todos
Pedro
Una pregunta por si se puede hacer. En los recursos ponemos los nombres que luego salen como textos en nuestros diálogos. Mi pregunta es, ¿se pueden capturar de alguna manera esos nombres en un array?
Ejemplo de recurso
DLGTORRE DIALOG DISCARDABLE 7, -12, 355, 300
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_VISIBLE
CAPTION "Mantenimiento de Torres"
FONT 9, "MS Sans Serif"
BEGIN
CONTROL "Torre", 1, "Static", WS_GROUP, 18, 7, 40, 8
CONTROL "Codigo Cliente", 2, "Static", WS_GROUP, 140, 5, 60, 10
CONTROL "Nombre", 3, "Static", WS_GROUP, 18, 24, 40, 8
CONTROL "Ubicación", 4, "Static", WS_GROUP, 18, 42, 40, 8
CONTROL "Población", 5, "Static", WS_GROUP, 18, 58, 40, 8
CONTROL "Provincia", 6, "Static", WS_GROUP, 18, 76, 40, 8
CONTROL "Comunidad", 7, "Static", WS_GROUP, 18, 95, 45, 8
CONTROL "Fecha Alta", 8, "Static", WS_GROUP, 220, 76, 40, 8
Lo que yo quiero capturar es el nombre que está a continuación de CONTROL, y así hacer un array con esos nombres para luego por medio de dos funciones, p.e carga_nombres y
pinta_ nombres, poder ponerlos con el color del fondo del diálogo correspondiente.
El array podría quedar algo así
aArray[1] = "Torre"
aArray[2] = "Codigo Cliente"
etc...
¿Se puede?
Un saludo a todos
Pedro
- Armando Picon
- Posts: 448
- Joined: Mon Dec 26, 2005 9:11 pm
- Location: Lima, Peru
Re: Una pregunta de recursos
Se puede, una ejemplo de eso, es lo se hizo en "RC2Prg.prg" de la carpeta Samples en tu instalación de FWH.Pedro wrote:Hola a todos
Una pregunta por si se puede hacer. En los recursos ponemos los nombres que luego salen como textos en nuestros diálogos. Mi pregunta es, ¿se pueden capturar de alguna manera esos nombres en un array?
Ejemplo de recurso
DLGTORRE DIALOG DISCARDABLE 7, -12, 355, 300
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_VISIBLE
CAPTION "Mantenimiento de Torres"
FONT 9, "MS Sans Serif"
BEGIN
CONTROL "Torre", 1, "Static", WS_GROUP, 18, 7, 40, 8
CONTROL "Codigo Cliente", 2, "Static", WS_GROUP, 140, 5, 60, 10
CONTROL "Nombre", 3, "Static", WS_GROUP, 18, 24, 40, 8
CONTROL "Ubicación", 4, "Static", WS_GROUP, 18, 42, 40, 8
CONTROL "Población", 5, "Static", WS_GROUP, 18, 58, 40, 8
CONTROL "Provincia", 6, "Static", WS_GROUP, 18, 76, 40, 8
CONTROL "Comunidad", 7, "Static", WS_GROUP, 18, 95, 45, 8
CONTROL "Fecha Alta", 8, "Static", WS_GROUP, 220, 76, 40, 8
Lo que yo quiero capturar es el nombre que está a continuación de CONTROL, y así hacer un array con esos nombres para luego por medio de dos funciones, p.e carga_nombres y
pinta_ nombres, poder ponerlos con el color del fondo del diálogo correspondiente.
El array podría quedar algo así
aArray[1] = "Torre"
aArray[2] = "Codigo Cliente"
etc...
¿Se puede?
Un saludo a todos
Pedro
FWH + BCC582 + WorkShop 4.5 + Resource Hacker + Mingw
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicación via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicación via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com
Repasando lo expuesto y tu respuesta, Armando, creo que no me expliqué lo suficiente.
No quiero coger los nombres cuando "estoy programando la aplicación", si no cuando la estoy ejecutando y el fichero rc ya está incrustado en el exe.
De la misma forma que tu llamas al diálogo
DEFINE DIALOG oDlg RESOURCE "DLGDIALOGO" <------ y esta llamada se hace al recurso compilado y enlazado en la aplicación, a mi me gustaría pillar los nombres del control STATIC.
He visto el rc2prg y no sé si se podrá hacer lo mismo, es decir si oDlg:aControls[1] podría ser el nombre que busco
oDlg:aControls[2] podría ser el ID
etc...
A ver si Antonio u otro compañero me lo aclara
Un saludo
Pedro
No quiero coger los nombres cuando "estoy programando la aplicación", si no cuando la estoy ejecutando y el fichero rc ya está incrustado en el exe.
De la misma forma que tu llamas al diálogo
DEFINE DIALOG oDlg RESOURCE "DLGDIALOGO" <------ y esta llamada se hace al recurso compilado y enlazado en la aplicación, a mi me gustaría pillar los nombres del control STATIC.
He visto el rc2prg y no sé si se podrá hacer lo mismo, es decir si oDlg:aControls[1] podría ser el nombre que busco
oDlg:aControls[2] podría ser el ID
etc...
A ver si Antonio u otro compañero me lo aclara
Un saludo
Pedro
- Armando Picon
- Posts: 448
- Joined: Mon Dec 26, 2005 9:11 pm
- Location: Lima, Peru
Tienes razón, entendí mal. En el foro hubo una consulta respecto a lo ismo. La respuesta más clara fue que eso se podía hacer siempre y cuando los textos fueran objetos, como un Say o un Get, pero que como Static identificado como -1 (como lo pone el WS) no se podía.Pedro wrote:Repasando lo expuesto y tu respuesta, Armando, creo que no me expliqué lo suficiente.
No quiero coger los nombres cuando "estoy programando la aplicación", si no cuando la estoy ejecutando y el fichero rc ya está incrustado en el exe.
De la misma forma que tu llamas al diálogo
DEFINE DIALOG oDlg RESOURCE "DLGDIALOGO" <------ y esta llamada se hace al recurso compilado y enlazado en la aplicación, a mi me gustaría pillar los nombres del control STATIC.
He visto el rc2prg y no sé si se podrá hacer lo mismo, es decir si oDlg:aControls[1] podría ser el nombre que busco
oDlg:aControls[2] podría ser el ID
etc...
A ver si Antonio u otro compañero me lo aclara
Un saludo
Pedro
Espero que haya alguien que si haya podido hacerlo desde ese enotnces.... Suerte
FWH + BCC582 + WorkShop 4.5 + Resource Hacker + Mingw
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicación via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicación via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Pedro,
Hazlo asi, desde la claúsula ON INIT en el ACTIVATE:
En la función Textos() a la que llamas, ya tienes el handle de ventana del diálogo, oDlg:hWnd. Y con ese handle puedes recorrer todos sus controles hijos:
Hazlo asi, desde la claúsula ON INIT en el ACTIVATE:
Code: Select all
ACTIVATE DIALOG oDlg ;
ON INIT Textos( oDlg )
Code: Select all
#define GW_CHILD 5
#define GW_HWNDNEXT 2
function Textos( oDlg )
local hCtrl := GetWindow( oDlg:hWnd, GW_CHILD )
local aTextos := {}
while hCtrl != 0
if GetClassName( hCtrl ) == "Static" // SAY
AAdd( aTextos, GetTextWindow( hCtrl ) )
endif
hCtrl = GetWindow( hCtrl, GW_HWNDNEXT )
end
return aTextos
Armando, no sé si te has fijado en el ejemplo, (que es parte de un rc auténtico) pero yo no numero al control STATIC con -1, si no con un ID al igual que los EDIT, solo que los EDIT van del 201 en adelante y los STATIC desde el 1 en adelante. Eso es para poder pintarlos con el REDEFINE SAY oSay...... ID 1 ... etc.Armando Picon wrote:Tienes razón, entendí mal. En el foro hubo una consulta respecto a lo ismo. La respuesta más clara fue que eso se podía hacer siempre y cuando los textos fueran objetos, como un Say o un Get, pero que como Static identificado como -1 (como lo pone el WS) no se podía.Pedro wrote:Repasando lo expuesto y tu respuesta, Armando, creo que no me expliqué lo suficiente.
No quiero coger los nombres cuando "estoy programando la aplicación", si no cuando la estoy ejecutando y el fichero rc ya está incrustado en el exe.
De la misma forma que tu llamas al diálogo
DEFINE DIALOG oDlg RESOURCE "DLGDIALOGO" <------ y esta llamada se hace al recurso compilado y enlazado en la aplicación, a mi me gustaría pillar los nombres del control STATIC.
He visto el rc2prg y no sé si se podrá hacer lo mismo, es decir si oDlg:aControls[1] podría ser el nombre que busco
oDlg:aControls[2] podría ser el ID
etc...
A ver si Antonio u otro compañero me lo aclara
Un saludo
Pedro
Espero que haya alguien que si haya podido hacerlo desde ese enotnces.... Suerte
Gracias por tu aporte
Un saludo
Pedro
Gracias Antonio, como siempre un buen quite.Antonio Linares wrote:Pedro,
Hazlo asi, desde la claúsula ON INIT en el ACTIVATE:En la función Textos() a la que llamas, ya tienes el handle de ventana del diálogo, oDlg:hWnd. Y con ese handle puedes recorrer todos sus controles hijos:Code: Select all
ACTIVATE DIALOG oDlg ; ON INIT Textos( oDlg )
Code: Select all
#define GW_CHILD 5 #define GW_HWNDNEXT 2 function Textos( oDlg ) local hCtrl := GetWindow( oDlg:hWnd, GW_CHILD ) local aTextos := {} while hCtrl != 0 if GetClassName( hCtrl ) == "Static" // SAY AAdd( aTextos, GetTextWindow( hCtrl ) ) endif hCtrl = GetWindow( hCtrl, GW_HWNDNEXT ) end return aTextos
Eso es lo que buscaba, pero........jo..siempre hay un pero.
El tema es que ¿los textos se pintan en el ON INIT?
me explico
Yo ahora tengo dos funciones en un dialogo
Funtion uno (coger los nombres de los says)
Local aTextos[XX] <---- xx es la cantidad de says del dialogo
aTextos[1] := "Algo"
aTextos[2] := "Algo"
aTextos[3] := "Algo"
aTextos[4] := "Algo"
aTextos[XX] := "Algo"
Return(aTextos)
Luego
Function PintaSays(oDlg, oFont, aTextos)
Local oSay[Len(aText)]
Local nInd
For nInd := 1 TO Len(aText)
REDEFINE SAY oSay[nInd] PROMPT aText[nInd] ID nInd OF oDlg ;
COLOR RGB(0,0,0),RGB(255,204,102) FONT oFont
Next
Return nil
Pregunta, ¿Se pueden poner las dos funciones en el ON INIT, aunque sea colocando el aTextos como Static del módulo?
ACTIVATE DIALOG oDlg ;
ON INIT Textos( oDlg ), PonSays(oDlg,oFont,aTextos)
o por el contrario se puede hacer
DEFINE DIALOG oDLG RESOURCE "DLGDIALOG"
PonSays(oDlg,oFont,aTextos)
...............
...............
ACTIVATE DIALOG oDlg ;
ON INIT Textos( oDlg )
Gracias
Un saludo
Pedro
Pregunta, ¿Se pueden poner las dos funciones en el ON INIT, aunque sea colocando el aTextos como Static del módulo?
Code: Select all
ACTIVATE DIALOG oDlg ;
ON INIT (Textos( oDlg ), PonSays(oDlg,oFont,aTextos) )
Gracias cmsoft, pero tengo un problema y es que al compilar me dice que no existe o no encuentra GetTextWindow, ¿se ha de definir como externa?cmsoft wrote:Pregunta, ¿Se pueden poner las dos funciones en el ON INIT, aunque sea colocando el aTextos como Static del módulo?Si lo pones entre parentesis creo que funciona...Code: Select all
ACTIVATE DIALOG oDlg ; ON INIT (Textos( oDlg ), PonSays(oDlg,oFont,aTextos) )
Un saludo
Pedro
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Prueba asi:
Y en PonSays() añade esto:
Code: Select all
ACTIVATE DIALOG oDlg ;
ON INIT PonSays( oDlg, oFont, Textos( oDlg ) )
Code: Select all
For nInd := 1 TO Len(aText)
REDEFINE SAY oSay[nInd] PROMPT aText[nInd] ID nInd OF oDlg ;
COLOR RGB(0,0,0),RGB(255,204,102) FONT oFont
oSay[nInd]:Initiate() // esto!
Next
Gracias Antonio, lo probaré, si funciona bien ya podemos poner los Says de los dialogos tomándolos directamente desde el recurso con el color del dialogo, y, si se cambia un texto no hay que tocar el prg, si no el recurso.Antonio Linares wrote:Prueba asi:Y en PonSays() añade esto:Code: Select all
ACTIVATE DIALOG oDlg ; ON INIT PonSays( oDlg, oFont, Textos( oDlg ) )
Code: Select all
For nInd := 1 TO Len(aText) REDEFINE SAY oSay[nInd] PROMPT aText[nInd] ID nInd OF oDlg ; COLOR RGB(0,0,0),RGB(255,204,102) FONT oFont oSay[nInd]:Initiate() // esto! Next
Un saludo
Pedro