In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Funciones Msg...

Foro de Xailer profesional en español
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Hola,
Sería muy práctico, poder enviar un par de parámetros mas a las funciones
Msg...
Por ej. un parámetro de botón con foco...
Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir ese
diálogo con el foco en el botón Cancel, o en el que enviáramos como tercer
parámetro, dependiendo de nuestras necesidades.
Y... otro... para los que hacemos versiones MultiLenguaje...
Un Array con los títulos de los botones...
MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
Así no nos hace falta disponer del lenguaje de Windows con el de nuestra
aplicación, sinó que nuestra aplicación puede "hablar" en 'Català' y el
Windows lo podemos tener en 'Español'.
Son dos parámetros fáciles de implementar, y... quien quiera, que los use...
¿no?
Un Saludo,
Xevi.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Sería muy práctico, poder enviar un par de parámetros mas a las funciones
> Msg...
>
> Por ej. un parámetro de botón con foco...
> Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir
> ese diálogo con el foco en el botón Cancel, o en el que enviáramos como
> tercer parámetro, dependiendo de nuestras necesidades.
Todas estas funciones son variantes de la función del API MessageBox(). Lo
que puedes hacer es usar directamente esta función con los valores que
necesites. P.ej:
MessageBox( ::Handle, "Mensaje", "Titulo", nOr( MB_YESNOCANCEL,
MB_DEFBUTTON3, MB_ICONQUESTION ) )
o su versión abreviada (no se pasa el handle de la ventana):
MsgBox( "Mensaje", "Titulo", nOr( MB_YESNOCANCEL, MB_DEFBUTTON3,
MB_ICONQUESTION ) )
> Y... otro... para los que hacemos versiones MultiLenguaje...
> Un Array con los títulos de los botones...
> MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
> Así no nos hace falta disponer del lenguaje de Windows con el de nuestra
> aplicación, sinó que nuestra aplicación puede "hablar" en 'Català' y el
> Windows lo podemos tener en 'Español'.
Me temo que MessageBox() no permite especificar el texto de los botones. No
obstante, lo que se puede hacer es usar MessageBoxEx(), que permite indicar
el idioma. Pero habría que hacer el wrapper:
XA_FUNC( MESSAGEBOXEX )
{
hb_retnl( MessageBoxEx( (HWND) hb_parnl( 1 ),
hb_parc( 2 ),
hb_parc( 3 ),
hb_parnl( 4 ),
(WORD) hb_parnl( 5 ) ) );
}
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Pues voy a crear una Función a mi medida...
Primer error en creación de un Form... desde código.
WITH OBJECT oForm := TForm():Create()
:SetBounds( 200,200,200,200 )
:cText := "¡Error!"
:nBorderStyle := bsDIALOG
:lParentIcon := .F.
:lCentered := .T.
END WITH
Esto no me crea un Form bsDIALOG ni tampoco sin ICONO
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=42ca3dbe@ozsrvnegro.ozlan.local...]42ca3dbe@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>> Sería muy práctico, poder enviar un par de parámetros mas a las funciones
>> Msg...
>>
>> Por ej. un parámetro de botón con foco...
>> Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir
>> ese diálogo con el foco en el botón Cancel, o en el que enviáramos como
>> tercer parámetro, dependiendo de nuestras necesidades.
>
> Todas estas funciones son variantes de la función del API MessageBox(). Lo
> que puedes hacer es usar directamente esta función con los valores que
> necesites. P.ej:
>
> MessageBox( ::Handle, "Mensaje", "Titulo", nOr( MB_YESNOCANCEL,
> MB_DEFBUTTON3, MB_ICONQUESTION ) )
>
> o su versión abreviada (no se pasa el handle de la ventana):
>
> MsgBox( "Mensaje", "Titulo", nOr( MB_YESNOCANCEL, MB_DEFBUTTON3,
> MB_ICONQUESTION ) )
>
>
>> Y... otro... para los que hacemos versiones MultiLenguaje...
>> Un Array con los títulos de los botones...
>> MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
>> Así no nos hace falta disponer del lenguaje de Windows con el de nuestra
>> aplicación, sinó que nuestra aplicación puede "hablar" en 'Català' y el
>> Windows lo podemos tener en 'Español'.
>
> Me temo que MessageBox() no permite especificar el texto de los botones.
> No obstante, lo que se puede hacer es usar MessageBoxEx(), que permite
> indicar el idioma. Pero habría que hacer el wrapper:
>
> XA_FUNC( MESSAGEBOXEX )
> {
> hb_retnl( MessageBoxEx( (HWND) hb_parnl( 1 ),
> hb_parc( 2 ),
> hb_parc( 3 ),
> hb_parnl( 4 ),
> (WORD) hb_parnl( 5 ) ) );
> }
>
>
> --
> Un saludo,
>
> José F. Giménez
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9469
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Funciones Msg...

Mensaje por ignacio »

Xevi,
Xevi:
Prueba así:
WITH OBJECT oForm := TForm():New()
:SetBounds( 200,200,200,200 )
:cText := "¡Error!"
:nBorderStyle := bsDIALOG
:lParentIcon := .F.
:lCentered := .T.
:Create()
END WITH
Te recuerdo que todos los objetos de Xailer se instancian en dos fases, la
primera con New() que instancia únicamente el objeto, y la segunda con
Create() que realmente es la que lo enlaza con el control de Windows.
Logicamente entre el New() y el Create() es donde debes de poner todas las
propiedades QUE EL API EXIGE se pongan antes de su creación, como es el caso
de nBorderStyle, que como sabrás no es más que un 'Flag' que indica el
estilo de la ventana, propiedad que tiene que indicarse antes de crear la
misma y que luego ya no es modificable.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:[email=42ca52c7@ozsrvnegro.ozlan.local...]42ca52c7@ozsrvnegro.ozlan.local...[/email]
> Pues voy a crear una Función a mi medida...
>
> Primer error en creación de un Form... desde código.
>
> WITH OBJECT oForm := TForm():Create()
> :SetBounds( 200,200,200,200 )
> :cText := "¡Error!"
> :nBorderStyle := bsDIALOG
> :lParentIcon := .F.
> :lCentered := .T.
> END WITH
>
> Esto no me crea un Form bsDIALOG ni tampoco sin ICONO
>
>
> Un Saludo,
> Xevi.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:[email=42ca3dbe@ozsrvnegro.ozlan.local...]42ca3dbe@ozsrvnegro.ozlan.local...[/email]
>> Xevi,
>>
>>> Sería muy práctico, poder enviar un par de parámetros mas a las
>>> funciones Msg...
>>>
>>> Por ej. un parámetro de botón con foco...
>>> Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir
>>> ese diálogo con el foco en el botón Cancel, o en el que enviáramos como
>>> tercer parámetro, dependiendo de nuestras necesidades.
>>
>> Todas estas funciones son variantes de la función del API MessageBox().
>> Lo que puedes hacer es usar directamente esta función con los valores que
>> necesites. P.ej:
>>
>> MessageBox( ::Handle, "Mensaje", "Titulo", nOr( MB_YESNOCANCEL,
>> MB_DEFBUTTON3, MB_ICONQUESTION ) )
>>
>> o su versión abreviada (no se pasa el handle de la ventana):
>>
>> MsgBox( "Mensaje", "Titulo", nOr( MB_YESNOCANCEL, MB_DEFBUTTON3,
>> MB_ICONQUESTION ) )
>>
>>
>>> Y... otro... para los que hacemos versiones MultiLenguaje...
>>> Un Array con los títulos de los botones...
>>> MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
>>> Así no nos hace falta disponer del lenguaje de Windows con el de nuestra
>>> aplicación, sinó que nuestra aplicación puede "hablar" en 'Català' y el
>>> Windows lo podemos tener en 'Español'.
>>
>> Me temo que MessageBox() no permite especificar el texto de los botones.
>> No obstante, lo que se puede hacer es usar MessageBoxEx(), que permite
>> indicar el idioma. Pero habría que hacer el wrapper:
>>
>> XA_FUNC( MESSAGEBOXEX )
>> {
>> hb_retnl( MessageBoxEx( (HWND) hb_parnl( 1 ),
>> hb_parc( 2 ),
>> hb_parc( 3 ),
>> hb_parnl( 4 ),
>> (WORD) hb_parnl( 5 ) ) );
>> }
>>
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Jose,
Las imágenes que utilizas en las funciones Msg...,
¿estan definidas en algun fichero ch???
Si están, mo las se encontrar, y si no están... ¿se podrían incluir???
IDI_EXCLAMATION
IDI_QUESTION
Etc...
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=42ca3dbe@ozsrvnegro.ozlan.local...]42ca3dbe@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>> Sería muy práctico, poder enviar un par de parámetros mas a las funciones
>> Msg...
>>
>> Por ej. un parámetro de botón con foco...
>> Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir
>> ese diálogo con el foco en el botón Cancel, o en el que enviáramos como
>> tercer parámetro, dependiendo de nuestras necesidades.
>
> Todas estas funciones son variantes de la función del API MessageBox(). Lo
> que puedes hacer es usar directamente esta función con los valores que
> necesites. P.ej:
>
> MessageBox( ::Handle, "Mensaje", "Titulo", nOr( MB_YESNOCANCEL,
> MB_DEFBUTTON3, MB_ICONQUESTION ) )
>
> o su versión abreviada (no se pasa el handle de la ventana):
>
> MsgBox( "Mensaje", "Titulo", nOr( MB_YESNOCANCEL, MB_DEFBUTTON3,
> MB_ICONQUESTION ) )
>
>
>> Y... otro... para los que hacemos versiones MultiLenguaje...
>> Un Array con los títulos de los botones...
>> MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
>> Así no nos hace falta disponer del lenguaje de Windows con el de nuestra
>> aplicación, sinó que nuestra aplicación puede "hablar" en 'Català' y el
>> Windows lo podemos tener en 'Español'.
>
> Me temo que MessageBox() no permite especificar el texto de los botones.
> No obstante, lo que se puede hacer es usar MessageBoxEx(), que permite
> indicar el idioma. Pero habría que hacer el wrapper:
>
> XA_FUNC( MESSAGEBOXEX )
> {
> hb_retnl( MessageBoxEx( (HWND) hb_parnl( 1 ),
> hb_parc( 2 ),
> hb_parc( 3 ),
> hb_parnl( 4 ),
> (WORD) hb_parnl( 5 ) ) );
> }
>
>
> --
> Un saludo,
>
> José F. Giménez
>
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Gracias, Ignacio... PERFECTO!!!
Creo que voy aprendiendo...
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42ca559c$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> Xevi:
>
> Prueba así:
>
> WITH OBJECT oForm := TForm():New()
> :SetBounds( 200,200,200,200 )
> :cText := "¡Error!"
> :nBorderStyle := bsDIALOG
> :lParentIcon := .F.
> :lCentered := .T.
> :Create()
> END WITH
>
> Te recuerdo que todos los objetos de Xailer se instancian en dos fases, la
> primera con New() que instancia únicamente el objeto, y la segunda con
> Create() que realmente es la que lo enlaza con el control de Windows.
> Logicamente entre el New() y el Create() es donde debes de poner todas las
> propiedades QUE EL API EXIGE se pongan antes de su creación, como es el
> caso de nBorderStyle, que como sabrás no es más que un 'Flag' que indica
> el estilo de la ventana, propiedad que tiene que indicarse antes de crear
> la misma y que luego ya no es modificable.
>
> Un saludo,
>
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:[email=42ca52c7@ozsrvnegro.ozlan.local...]42ca52c7@ozsrvnegro.ozlan.local...[/email]
>> Pues voy a crear una Función a mi medida...
>>
>> Primer error en creación de un Form... desde código.
>>
>> WITH OBJECT oForm := TForm():Create()
>> :SetBounds( 200,200,200,200 )
>> :cText := "¡Error!"
>> :nBorderStyle := bsDIALOG
>> :lParentIcon := .F.
>> :lCentered := .T.
>> END WITH
>>
>> Esto no me crea un Form bsDIALOG ni tampoco sin ICONO
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>> mensaje news:[email=42ca3dbe@ozsrvnegro.ozlan.local...]42ca3dbe@ozsrvnegro.ozlan.local...[/email]
>>> Xevi,
>>>
>>>> Sería muy práctico, poder enviar un par de parámetros mas a las
>>>> funciones Msg...
>>>>
>>>> Por ej. un parámetro de botón con foco...
>>>> Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir
>>>> ese diálogo con el foco en el botón Cancel, o en el que enviáramos como
>>>> tercer parámetro, dependiendo de nuestras necesidades.
>>>
>>> Todas estas funciones son variantes de la función del API MessageBox().
>>> Lo que puedes hacer es usar directamente esta función con los valores
>>> que necesites. P.ej:
>>>
>>> MessageBox( ::Handle, "Mensaje", "Titulo", nOr( MB_YESNOCANCEL,
>>> MB_DEFBUTTON3, MB_ICONQUESTION ) )
>>>
>>> o su versión abreviada (no se pasa el handle de la ventana):
>>>
>>> MsgBox( "Mensaje", "Titulo", nOr( MB_YESNOCANCEL, MB_DEFBUTTON3,
>>> MB_ICONQUESTION ) )
>>>
>>>
>>>> Y... otro... para los que hacemos versiones MultiLenguaje...
>>>> Un Array con los títulos de los botones...
>>>> MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
>>>> Así no nos hace falta disponer del lenguaje de Windows con el de
>>>> nuestra aplicación, sinó que nuestra aplicación puede "hablar" en
>>>> 'Català' y el Windows lo podemos tener en 'Español'.
>>>
>>> Me temo que MessageBox() no permite especificar el texto de los botones.
>>> No obstante, lo que se puede hacer es usar MessageBoxEx(), que permite
>>> indicar el idioma. Pero habría que hacer el wrapper:
>>>
>>> XA_FUNC( MESSAGEBOXEX )
>>> {
>>> hb_retnl( MessageBoxEx( (HWND) hb_parnl( 1 ),
>>> hb_parc( 2 ),
>>> hb_parc( 3 ),
>>> hb_parnl( 4 ),
>>> (WORD) hb_parnl( 5 ) ) );
>>> }
>>>
>>>
>>> --
>>> Un saludo,
>>>
>>> José F. Giménez
>>>
>>
>>
>
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Las imágenes que utilizas en las funciones Msg...,
> ¿estan definidas en algun fichero ch???
> Si están, mo las se encontrar, y si no están... ¿se podrían incluir???
> IDI_EXCLAMATION
> IDI_QUESTION
> Etc...
Todas esas constantes están en includewinuser.api
En general, los ficheros .api del directorio include no son más que .ch pero
del API de windows.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Te recuerdo que todos los objetos de Xailer se instancian en dos fases, la
> primera con New() que instancia únicamente el objeto, y la segunda con
> Create() que realmente es la que lo enlaza con el control de Windows.
> Logicamente entre el New() y el Create() es donde debes de poner todas las
> propiedades QUE EL API EXIGE se pongan antes de su creación, como es el
> caso de nBorderStyle, que como sabrás no es más que un 'Flag' que indica
> el estilo de la ventana, propiedad que tiene que indicarse antes de crear
> la misma y que luego ya no es modificable.
Sólo como aclaración: la excepción son los formularios diseñados y creados
directamente con el IDE.
Si te fijas en el código de los ficheros .xfm, la llamada a :Create() se
hace desde ahí, y por eso sólo se necesita la llamada a :New() cuando
quieres crear el formulario.
En cambio, si creas el formulario por código, como ha sido el caso, la regla
que ha apuntado Ignacio ( New / asignar propiedades / Create ) es
perfectamente válida.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Cuando se trata de una imagen definida ¿cómo la implanto en una TImage???
WITH OBJECT oImage := TImage():New( oForm )
:SetBounds( 12, 444, 100, 90 )
:oPicture := IDI_QUESTION //Esto no muestra nada
:Create()
END
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:42ca59b2$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>> Las imágenes que utilizas en las funciones Msg...,
>> ¿estan definidas en algun fichero ch???
>> Si están, mo las se encontrar, y si no están... ¿se podrían incluir???
>> IDI_EXCLAMATION
>> IDI_QUESTION
>> Etc...
>
> Todas esas constantes están en includewinuser.api
>
> En general, los ficheros .api del directorio include no son más que .ch
> pero del API de windows.
>
>
> --
> Un saludo,
>
> José F. Giménez
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Cuando se trata de una imagen definida ¿cómo la implanto en una TImage???
>
> WITH OBJECT oImage := TImage():New( oForm )
> :SetBounds( 12, 444, 100, 90 )
> :oPicture := IDI_QUESTION //Esto no muestra nada
> :Create()
> END
prueba con:
:oPicture := TPicture():CreateIndirect( IMG_ICON, LoadIcon( 0,
IDI_QUESTION ) )
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Va bien... sólo un detalle mas...
Con cualquier ICONO que elija
Se ve el fondo de color NEGRO !!!
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:42ca63ed$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>> Cuando se trata de una imagen definida ¿cómo la implanto en una TImage???
>>
>> WITH OBJECT oImage := TImage():New( oForm )
>> :SetBounds( 12, 444, 100, 90 )
>> :oPicture := IDI_QUESTION //Esto no muestra nada
>> :Create()
>> END
>
> prueba con:
>
> :oPicture := TPicture():CreateIndirect( IMG_ICON, LoadIcon( 0,
> IDI_QUESTION ) )
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>


Attached files
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Va bien... sólo un detalle mas...
> Con cualquier ICONO que elija
> Se ve el fondo de color NEGRO !!!
ya veo. Intentaré revisarlo cuanto antes. Mientras tanto, lo que puedes
hacer es poner lTransparent := .T., y te cogerá el color del formulario (o
del control que contenga a la TImage).
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Jose,
el aspecto,... el borde es feísimo !!!
Este es mi mensaje, creado con una imagen...
WITH OBJECT oImage := TImage():New( oForm )
:SetBounds( 5, 5, 37, 37 )
:oPicture := TPicture():CreateIndirect( IMG_ICON, LoadIcon( 0,
nIDI ) )
:nBorderStyle := bvNone
:lTransparent := .T.
:Create()
END
Este es el mensaje que se muestra al salir de Xailer
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=42ca6a14@ozsrvnegro.ozlan.local...]42ca6a14@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>> Va bien... sólo un detalle mas...
>> Con cualquier ICONO que elija
>> Se ve el fondo de color NEGRO !!!
>
> ya veo. Intentaré revisarlo cuanto antes. Mientras tanto, lo que puedes
> hacer es poner lTransparent := .T., y te cogerá el color del formulario (o
> del control que contenga a la TImage).
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>


Attached files
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Se había perdido mi afoto !!!


Attached files
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Jose,
Es el efecto "sombra"...
Si pongo otro Icono... IDI_EXCLAMATION... se ve mas concretamente el efecto
"sombra"
¿Se le puede sacar???
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:[email=42ca8b57@ozsrvnegro.ozlan.local...]42ca8b57@ozsrvnegro.ozlan.local...[/email]
> Se había perdido mi afoto !!!
>
>
>
>
>
>
>
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Xaileros,
Si os apetece probar, esta es mi función xMessageDlg()
Mis funciones empiezan po x... de Xevi.
Sólo basta añadir en un proyecto el OBJ adjunto.
y estos valores define en el PRG que utilizemos la función, o en un fichero
cabecera .ch
#define mbYes 1
#define mbYesNo 2
#define mbYesNoCancel 3
#define mbOk 4
#define mbOkCancel 5
#define mbAbortRetryIgnore 6
Sintaxis:
xMessageDlg(<cMensaje>, <cTitulo>, <nTipo>, <nBotonFoco>,
<nIconoImagen>,<aTextoBotones> ) -> nValor
De esta foma podemos en una sola función...,
definir nuestra imagen a mostrar,
nuestro texto de botones,
que boton es el que recibe el foco,
Ejemplos:
xMessageDlg( "Mensaje a informar", "Título Ventana", mbYes,,
IDI_INFORMATION )
xMessageDlg( "Mensaje a informar", "Título Ventana", mbYesNo,,
IDI_QUESTION )
xMessageDlg( "Mensaje a informar", "Título Ventana", mbYesNoCancel, 3,
IDI_EXCLAMATION )
xMessageDlg( "Mensaje a informar", "Título Ventana", mbOk,, IDI_ERROR )
xMessageDlg( "Mensaje a informar", "Título Ventana", mbOkCancel,,
IDI_QUESTION )
xMessageDlg( "Mensaje a informar", "Título Ventana", mbAbortRetryIgnore, 2,
IDI_EXCLAMATION )
::cText := Str(xMessageDlg( "Mensaje a informar", "Título Ventana",
mbYesNoCancel, 2, IDI_QUESTION, {"Botón &1","Botón &2","Botón &3"} ))
If xMessageDlg( "Mensaje a informar", "Título Ventana", mbYesNo,,
IDI_QUESTION ) == mrYes
...//Procedimiento si se ha pulsado el botón "Si"
EndIf
Espero os guste...
Ah... el contorno de la imágen no se ve "pulido", por lo que de momento se
ve el efecto sombra...
Espero que Jose lo arregle y lo volveré a colgar si quereis utilizarla.
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:42ca3595$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> Sería muy práctico, poder enviar un par de parámetros mas a las funciones
> Msg...
>
> Por ej. un parámetro de botón con foco...
> Cuando tenemos un MsgYesNoCancel( cText, cCaption, 3 ), podríamos abrir
> ese
> diálogo con el foco en el botón Cancel, o en el que enviáramos como tercer
> parámetro, dependiendo de nuestras necesidades.
>
> Y... otro... para los que hacemos versiones MultiLenguaje...
> Un Array con los títulos de los botones...
> MsgYesNoCancel( cText, cCaption, 3, {"Si","No","Cancel·la"} )
> Así no nos hace falta disponer del lenguaje de Windows con el de nuestra
> aplicación, sinó que nuestra aplicación puede "hablar" en 'Català' y el
> Windows lo podemos tener en 'Español'.
>
> Son dos parámetros fáciles de implementar, y... quien quiera, que los
> use...
> ¿no?
>
>
> Un Saludo,
> Xevi.
>
>


Attached files Xevi.obj (3.2 KB)Â
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Funciones Msg...

Mensaje por jlalin »

Xevi,
tengo a medio terminar una clase TMessageBox que encapsula la función
MessagBox del API.
En este momento estoy con el asunto de cambiar el texto de los
botones en tiempo de ejecución, la posibilidad de incluir un tiempo de
espera tras el cual se cierre automáticamente devolviendo el valor que
se especifique, cambiar los colores e incluir, opcionalmente, un
checkbox del tipo "No volver a mostrar este aviso.".
Estoy barajando varias posibilidades y aún no sé por cuál me voy a
decantar, pero tan pronto sea funcional, te la enví­o para que me ayudes
a depurarla y luego podemos incluirla en Xailer.
Si alguien tiene alguna sugerencia será bienvenida.
Saludos,
José Lalí­n
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Es el efecto "sombra"...
> Si pongo otro Icono... IDI_EXCLAMATION... se ve mas concretamente el
> efecto "sombra"
>
> ¿Se le puede sacar???
Lo intentaremos.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
> Es el efecto "sombra"...
he estado revisando este tema, y creo que es más complejo de lo que puede
parecer en un principio. Mientras encontramos una solución definitiva,
puedes usar un control TStatic() directamente por código:
WITH OBJECT ::oIcono := TStatic():New( Self )
:SetBounds( 10, 10, 32, 32 )
:Create()
:SetIcon( LoadIcon( 0, IDI_QUESTION ) )
END
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Jose,
Lo pongo tal cual me has apuntado... y me salta error...
***************************** Registro de errores *****************************
Fecha: 14/07/2005
Hora: 14:38:44
Memoria libre: 217224
Area actual: 1
------------------------- Información del compilador --------------------------
Versión Xailer: Xailer 0.99.4 Pre-release 4
Compilador: xHarbour build 0.99.50 Intl. (SimpLex) PCode Version: 7
Compilador C/C++: Borland C++ 5.5.1
Plataforma: Windows XP Professional 5.01.2600 Service Pack 2
----------------------- Información detallada del error -----------------------
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Class: 'NUMERIC' has no exported method
Operación: HANDLE
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TSTATIC:SETIMAGE (62)
(b)XSTATIC (34)
TSTATIC:SETICON (0)
XMESSAGEDLG (133)
FRMMENU:FORMCLOSE (165)
FRMMENU:ONCLOSE (0)
FRMMENU:WMCLOSE (578)
RUNFORM (0)
TAPPLICATION:RUN (189)
MAIN (11)
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:42d65ae5$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>> Es el efecto "sombra"...
>
> he estado revisando este tema, y creo que es más complejo de lo que puede
> parecer en un principio. Mientras encontramos una solución definitiva,
> puedes usar un control TStatic() directamente por código:
>
> WITH OBJECT ::oIcono := TStatic():New( Self )
> :SetBounds( 10, 10, 32, 32 )
> :Create()
> :SetIcon( LoadIcon( 0, IDI_QUESTION ) )
> END
>
> --
> Un saludo,
>
> José F. Giménez
>
>
>
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
perdona, lo he puesto sin comprobarlo. Habrí­a que crear un objeto TIcon, pero deberí­as guardarlo en el formulario para poder destruirlo después:
CLASS TForm1 FROM TForm
...
DATA oIcono
DATA oObjIcono
METHOD Free() INLINE ::oObjIcono:Destroy(), Super:Free()
ENDCLASS
METHOD FormInitialize CLASS TForm1
::oObjIcono := TIcon():Create( IDI_QUESTION )
WITH OBJECT ::oIcono := TStatic():New( Self )
:SetBounds( 10, 10, 32, 32 )
:Create()
:SetIcon( ::oObjIcono )
END
RETURN Nil
Por favor, pruébalo y dime si te funciona.
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Jose,
Rizando mas el rizo... creo el icono directamente al cargarlo en la Imagen y funciona PERFECTO...
WITH OBJECT oImage := TStatic():New( oForm )
:SetBounds( 10, 10, 32, 32 )
:Create()
:SetIcon( TIcon():Create( IDI_QUESTION ) )
END
Así­ no tengo que crear y destruir el Icono.
¿Esta bien???
¿No se va a acumular en alguna pila de objetos por destruir ???
Y... la definición de la imagen PERFECTA !!!
GRACIAS, por vuestra atención.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:42d6640e$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
perdona, lo he puesto sin comprobarlo. Habrí­a que crear un objeto TIcon, pero deberí­as guardarlo en el formulario para poder destruirlo después:
CLASS TForm1 FROM TForm
...
DATA oIcono
DATA oObjIcono
METHOD Free() INLINE ::oObjIcono:Destroy(), Super:Free()
ENDCLASS
METHOD FormInitialize CLASS TForm1
::oObjIcono := TIcon():Create( IDI_QUESTION )
WITH OBJECT ::oIcono := TStatic():New( Self )
:SetBounds( 10, 10, 32, 32 )
:Create()
:SetIcon( ::oObjIcono )
END
RETURN Nil
Por favor, pruébalo y dime si te funciona.
--
Un saludo,
José F. Giménez
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
Rizando mas el rizo... creo el icono directamente al cargarlo en la Imagen y funciona PERFECTO...
WITH OBJECT oImage := TStatic():New( oForm )
:SetBounds( 10, 10, 32, 32 )
:Create()
:SetIcon( TIcon():Create( IDI_QUESTION ) )
END
Así­ no tengo que crear y destruir el Icono.
¿Esta bien???
Me temo que así­ no se destruye nunca. Lo que te he puesto antes es precí­samente para tener una referencia al objeto para poder destruirlo cuando se destruya el formulario.
¿No se va a acumular en alguna pila de objetos por destruir ???
No. Cuando asignas un icono a un formulario, es el formulario quien se encarga de desrtuirlo cuando ya no es necesario, pero en este caso, el icono lo estás creando expresamente para otros fines, y no hay nada que se encargue de destruirlo.
Y... la definición de la imagen PERFECTA !!!
Me alegro ;-)
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Funciones Msg...

Mensaje por Xevi »

Jose,
> No. Cuando asignas un icono a un formulario, es el formulario quien se encarga de desrtuirlo cuando ya no es necesario, pero en este
> caso, el icono lo estás creando expresamente para otros fines, y no hay nada que se encargue de destruirlo.
Por lo que entiendo, si creara ese proceso 500.000 veces SI se cargarí­a la aplicación ¿no?
En este caso, mejor la solución de crearlo en el Form y destruirlo, cuando ya no es necesario...
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:42d67c2b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Rizando mas el rizo... creo el icono directamente al cargarlo en la Imagen y funciona PERFECTO...
WITH OBJECT oImage := TStatic():New( oForm )
:SetBounds( 10, 10, 32, 32 )
:Create()
:SetIcon( TIcon():Create( IDI_QUESTION ) )
END
Así­ no tengo que crear y destruir el Icono.
¿Esta bien???
Me temo que así­ no se destruye nunca. Lo que te he puesto antes es precí­samente para tener una referencia al objeto para poder destruirlo cuando se destruya el formulario.
¿No se va a acumular en alguna pila de objetos por destruir ???
No. Cuando asignas un icono a un formulario, es el formulario quien se encarga de desrtuirlo cuando ya no es necesario, pero en este caso, el icono lo estás creando expresamente para otros fines, y no hay nada que se encargue de destruirlo.
Y... la definición de la imagen PERFECTA !!!
Me alegro ;-)
--
Un saludo,
José F. Giménez
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Funciones Msg...

Mensaje por jfgimenez »

Xevi,
Por lo que entiendo, si creara ese proceso 500.000 veces SI se cargarí­a la aplicación ¿no?
En este caso, mejor la solución de crearlo en el Form y destruirlo, cuando ya no es necesario...
Exactamente. Si se tratara de un proceso que se ejecuta una sola vez, pues no importa mucho. Pero si se va a ejecutar más veces, es muy importante.
En cualquier caso, siempre es una buena práctica destruir los objetos cuando sea necesario, y no dejarlos ahí­ hasta que termine la aplicación.
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder