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.

Comportamiento extraño de la clase TMessageBox.

Foro de Xailer profesional en español
Responder
RRamonell
Mensajes: 32
Registrado: Mar May 06, 2008 5:20 pm

Comportamiento extraño de la clase TMessageBox.

Mensaje por RRamonell »

Hola todos.
La documentación de Xailer dice:
TMessageBox - "Clase para el manejo del diálogo estándar de Windows
'MessageBox'. Las funciones básicas para mostrar mensajes como MsgInfo,
MsgAlert, MsgYesNo y otras están basadas en este componente estándar de
Windows."
"A través de esta clase podrá realizar diálogos personalizados pudiendo
definir la imagen o botones a mostrar."
La documentación de la propiedad TMessageBox:aButtons dice:
"Lista con los literales de los botones que mostrará el diálogo."
"ímbito: Asignable en diseño"
"Tipo: Matriz"
"Valor inicial: {}"
La propiedad aButtons permite a través del Inspector de Objetos asignar
muchas opciones, sin embargo solo las primeras cuatro serán mostradas.
Ya en ejecución, el dialogo creado muestra cuatro botones conteniendo
las opciones especificadas. Al hacer click sobre las tres primeras
desaparece el dialogo, pero al hacer click sobre la cuarta no pasa nada.
El valor por defecto de la propiedad nStyle es mbABORTRETRYIGNORE y
produce en el dialogo cuatro botones "Anular", "Reintentar", "Omitir" y
"Ayuda" (este último no produce ningún efecto al ser clickeado).
Al buscar alguna propiedad, metodo o evento de la clase que me permita
saber que opción eligió un usuario, no encuentro nada al respecto.
Me queda claro que esta clase es la base de MsgInfo, MsgAlert, etc.,
pero la documentación dá la impresión de que pudiese ser usada para
crear mis dialogos al estilo Alert() de Clipper y no hallo la forma de
hacerlo.
Actualmente uso Messages que amablemente Bingen nos ha proporcionado,
además de haber construido con Xailer un dialogo de propósito general
para este fin, pero al leer la documentación pensé que con la clase
nativa de Xailer se estarí­a en posibilidad de hacer la tarea mencionada
en forma natural.
¿Hay alguna forma de que se pueda usar la clase TMessageBox en forma
directa y para un propósito particular desde un proyecto de Xailer?
Les agradeceré la ayuda que me puedan proporcionar.
Saludos.
René Ramón Elly.
meridiano75@prodigy.net.mx
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Comportamiento extraño de la clase TMessageBox.

Mensaje por ignacio »

RRamonell,
El comportamiento es extraño porque está limitado a los estilos que marca el
propio control.
Esta clase utiliza el propio API de diálogos de mensajes de Windows y su
funcionalidad es bastante reducida. Como puedes observar no admite más de
cuatro botones y el valor que devuelve no es el ordinal del botón pulsado
sino el correspondiente según el nStyle elegido.
Para diálogos más complicados te aconsejo que utilices los mensajes de
Bingen o crees tu propio formulario.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"RRamonell" <meridiano75@prodigy.net.mx> escribió en el mensaje
news:49060b16$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>
> Hola todos.
>
> La documentación de Xailer dice:
>
> TMessageBox - "Clase para el manejo del diálogo estándar de Windows
> 'MessageBox'. Las funciones básicas para mostrar mensajes como MsgInfo,
> MsgAlert, MsgYesNo y otras están basadas en este componente estándar de
> Windows."
>
> "A través de esta clase podrá realizar diálogos personalizados pudiendo
> definir la imagen o botones a mostrar."
>
> La documentación de la propiedad TMessageBox:aButtons dice:
>
> "Lista con los literales de los botones que mostrará el diálogo."
> "Ámbito: Asignable en diseño"
> "Tipo: Matriz"
> "Valor inicial: {}"
>
> La propiedad aButtons permite a través del Inspector de Objetos asignar
> muchas opciones, sin embargo solo las primeras cuatro serán mostradas.
>
> Ya en ejecución, el dialogo creado muestra cuatro botones conteniendo las
> opciones especificadas. Al hacer click sobre las tres primeras desaparece
> el dialogo, pero al hacer click sobre la cuarta no pasa nada.
>
> El valor por defecto de la propiedad nStyle es mbABORTRETRYIGNORE y
> produce en el dialogo cuatro botones "Anular", "Reintentar", "Omitir" y
> "Ayuda" (este último no produce ningún efecto al ser clickeado).
>
> Al buscar alguna propiedad, metodo o evento de la clase que me permita
> saber que opción eligió un usuario, no encuentro nada al respecto.
>
> Me queda claro que esta clase es la base de MsgInfo, MsgAlert, etc., pero
> la documentación dá la impresión de que pudiese ser usada para crear mis
> dialogos al estilo Alert() de Clipper y no hallo la forma de hacerlo.
>
> Actualmente uso Messages que amablemente Bingen nos ha proporcionado,
> además de haber construido con Xailer un dialogo de propósito general para
> este fin, pero al leer la documentación pensé que con la clase nativa de
> Xailer se estaría en posibilidad de hacer la tarea mencionada en forma
> natural.
>
> ¿Hay alguna forma de que se pueda usar la clase TMessageBox en forma
> directa y para un propósito particular desde un proyecto de Xailer?
>
> Les agradeceré la ayuda que me puedan proporcionar.
>
> Saludos.
>
> René Ramón Elly.
> meridiano75@prodigy.net.mx
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
notengo
Mensajes: 417
Registrado: Vie Oct 12, 2007 1:29 pm

Comportamiento extraño de la clase TMessageBox.

Mensaje por notengo »

René,
> TMessageBox - "Clase para el manejo del diálogo estándar de Windows
> 'MessageBox'. Las funciones básicas para mostrar mensajes como MsgInfo,
> MsgAlert, MsgYesNo y otras están basadas en este componente estándar de
> Windows."
>
> "A través de esta clase podrá realizar diálogos personalizados pudiendo
> definir la imagen o botones a mostrar."
En realidad TMessageBox encapsula el API MessageBox() de Windows ...
> La propiedad aButtons permite a través del Inspector de Objetos asignar
> muchas opciones, sin embargo solo las primeras cuatro serán mostradas.
Esto se debe a que el API MessageBox() está limitado a ese número máximo de
botones: tres para acciones de usuario y uno para un botón de ayuda.
> Ya en ejecución, el dialogo creado muestra cuatro botones conteniendo
> las opciones especificadas. Al hacer click sobre las tres primeras
> desaparece el dialogo, pero al hacer click sobre la cuarta no pasa nada.
Como explico antes, se debe a la limitación del API.
> El valor por defecto de la propiedad nStyle es mbABORTRETRYIGNORE y
> produce en el dialogo cuatro botones "Anular", "Reintentar", "Omitir" y
> "Ayuda" (este último no produce ningún efecto al ser clickeado).
El botón "Ayuda" sólo aparece (a no ser que haya algún bug en la versión de
windows que estés utilizando) si se pone lHelpButton a .T.
> Al buscar alguna propiedad, metodo o evento de la clase que me permita
> saber que opción eligió un usuario, no encuentro nada al respecto.
El valor de retorno lo consigues con nResult := oMsgBox:Run()
> Me queda claro que esta clase es la base de MsgInfo, MsgAlert, etc.,
> pero la documentación dá la impresión de que pudiese ser usada para
> crear mis dialogos al estilo Alert() de Clipper y no hallo la forma de
> hacerlo.
No, quizás la ayuda no aclare claramente este punto, pero como decí­a al
principio TMessageBox es sólo una manera de encapsular el API MessageBox().
> ¿Hay alguna forma de que se pueda usar la clase TMessageBox en forma
> directa y para un propósito particular desde un proyecto de Xailer?
No comprendo qué funcionalidad necesitas, detállalo un poco más y vemos qué
podemos hacer.
Saludos,
José Lalí­n
Responder