Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2006
miguelml miguelml is offline
Miembro
 
Registrado: nov 2005
Posts: 24
Poder: 0
miguelml Va por buen camino
Botones personalizados en messagedlg

Hola!
Alguien sabe como se puede personalizar el caption de los botones de un messagedlg?
por ejemplo, un messagedlg que alsalir tenga dos botones que ponga "hola" "adios"

gracias!
Responder Con Cita
  #2  
Antiguo 06-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hay una función en SwissDelphiCenter que puede venirte de perilla. Yo recuerdo que el compañero Román propuso una solución para este tema, y me pareció estupenda, pero, no he conseguido localizar el Hilo en cuestión. Lo mismo Román lee esto, se acuerda, y lo comenta.

En todo caso la función que enlazo arriba parece cumplir perfectamente.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 06-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Y en lugar de hacer todo eso...

¿No sería mejor hacer un Form con los botones que quieras y llamarlo con ShowModal?

En definitiva es lo que hace la rutina, pero no puedes darle un valor al caption mostrado en la barra de título. Ya puestos, construyes el Form al completo con parámetros más claros.

La rutina lo creas con mbOkCancel... vale 2 botones, pero ahora le cambias el título a pelo, despues en el código tienes que verificar que devuelve mrOk que se corresponde con el primer título, o sea en el ejemplo un "1", o bien mrCancel que se corresponde con el botón "2"... ¿uf que lío de cosas no?

Resulta más barato que devuelva, por ejemplo, el título del botón pulsado. Cuando el usuario pulsa en alguno de los botones personalizados, en tu Form pones ModalResult a mrOk, y en una propiedad que creas tú mismo en ese Form devuelves el título.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 06-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Lepe
Y en lugar de hacer todo eso...
¿Qué eso? Se trata de una función, ¿no usas funciones en tus programas?

Cita:
Empezado por Lepe
¿No sería mejor hacer un Form con los botones que quieras y llamarlo con ShowModal?
Fíjate que la función de que hablamos devuelve, precisamente, el resultado de mostrar el diálogo como "modal". Lo digo porque...

Cita:
Empezado por Lepe
La rutina lo creas con mbOkCancel... vale 2 botones, pero ahora le cambias el título a pelo, despues en el código tienes que verificar que devuelve mrOk que se corresponde con el primer título, o sea en el ejemplo un "1", o bien mrCancel que se corresponde con el botón "2"... ¿uf que lío de cosas no?
¿De dónde sacas que la función compruebe lo que tiene que retornar basándose en el título de ningún botón? ¡Por eso es casi perfecta! ¡Porque devuelve justo lo que se espera que devuelva un "MessageDlg"!

Lo primero que he hecho al ver la función ha sido decirme, David, puede mejorarse (ja, ja, ja) y lo segundo que he pensado ha sido: ¿para qué utilizar el parámetro "buttons"? ¿porqué no crear los botones mediante los "Caption" que se pasan como parámetros?

He tardado un poco... casi me pongo a tratar de mejorar la función... hasta que me he dado cuenta que ese parámetro "buttons" tiene su quehacer, y que más vale dejarlo como está.

Como digo, la función enlazada más arriba devuelve justo lo que se espera que devuelva un "MessageBox", esto es, qué botón pulso el usuario: "mbCancel", "mbOK", "mbYes", etc. En ningún momento hace uso de los "Caption" de los botones para determinar el resultado, porque para eso tiene los botones, cada cual son su particular "constante" asociada.

En fin, Lepe, que creo, efectivamente, siempre puede hacerse uno su propio formulario para estos menesteres, pero, una cosa no quita la otra, y, personalmente, no veo nada complicada la manera de prodecer de la función de que hablamos.

Si alguien me demuestra otra cosa yo encantado, ¿eh? Que aquí hemos venido para aprender.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 06-06-2006
miguelml miguelml is offline
Miembro
 
Registrado: nov 2005
Posts: 24
Poder: 0
miguelml Va por buen camino
Si queria usar un messagedlg era precisamente para ahorrarme crear una form, y ahorrarme codigo, nosé, pensé que seria más facil, no obstante, gracias dec, e usado el codigo del link que me has pasado y me ha ido a la perfección, aunque e tenido que incluir un poco de codigo, pero weno, me ha ido bien.

un saludo!
Responder Con Cita
  #6  
Antiguo 06-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Dec
¿De dónde sacas que la función compruebe lo que tiene que retornar basándose en el título de ningún botón? ¡Por eso es casi perfecta! ¡Porque devuelve justo lo que se espera que devuelva un "MessageDlg"!
No he pretendido decir eso.

Imagina que le paso 3 captions para los buttons:
- "Crear Nueva Factura"
- "Insertar en la Factura Actual"
- "Cancelar Proceso"

¿Qué botones asocio con cada una de esos títulos? ¿eh?, ¿eh?, ¿eh?

Prefiero que la rutina devuelva el texto, o una constante u otra cosa que aclare el código fuente; para no recordar que mrIgnore se corresponde con "Insertar en la Factura Actual".

Imagina que en mi programa creo 3 constantes:
Código Delphi [-]
const CREAR = "Crear Factura";
const INSERTAR = "Insertar en Factura Actual";
const CANCELAR = "Cancelar Proceso";
A tu rutina le paso las 3 constantes, y la función me devuelve el Caption de los botones. Fijate qué código tan fácil de leer:
Código Delphi [-]
var respuesta :string;
begin
respuesta =  MessageDlgPropio(¿Qué desea hacer con los productos seleccionados?, [CREAR, INSERTAR, CANCELAR]);

if respuesta = CREAR then
  // blah blah
else if respuesta = INSERTAR then
  // blah blah
else if respuesta = CANCELAR
  // blah blah

En programas pequeños no importa, pero cuando se trata de depurar o corregir un programa de 300.000 lineas de código, te aseguro que si importa esos pequeños detalles que te alejan de tu tarea principal (depurar o corregir), haciendo que pierdas tiempo viendo si el valor devuelto se corresponde con la lógica del programa.

Por supuesto es mi opinión, ni buena, ni mala, es una opinión más; de eso se trata al responder un hilo, compartir ideas y experiencias.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 06-06-2006 a las 21:47:22.
Responder Con Cita
  #7  
Antiguo 06-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues mira que me estás convenciendo... Tal vez pudiera usarse la función que enlazé más arriba para mostrar diálogos hasta cierto punto predecibles, esto es, que contengan un par de botones, en definitiva, tal como se espera del "MessageDlg".

Ahora bien, ¿puede mejorarse el asunto? No lo dudo. Desde luego lo que dices parece muy razonable.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 07-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Como dije anteriormente, esa función es bastante limitada:
- Barra de título en inglés.
- Iconos bastante justitos (son 4, quizás basten)
- Habría que modificar también el Width de cada botón, para que se ajuste al texto pasado, si no, quedará truncado el texto.
- Ya puestos a modificar un Dialog de ese tipo, pues incluso se le pueden añadir negritas, subrayados y colores al texto, para hacerlo más "moderno". Hay muchos Labels que lo permiten.

Siempre se puede crear un Form para ese propósito y reutilizarlo en varios proyectos.

Que conste que lo pensé hace tiempo, pero seamos realistas, hace falta tiempo para hacerlo y un simple MessageBox "dá el avío" .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Botones MessageDlg en Español Alexander Varios 13 20-09-2012 16:42:30
cambiar a español los botones del MessageDlg negama Varios 4 02-02-2012 18:38:54
Reportes en personalizados jesgami Impresión 2 15-11-2005 20:35:28
un MessageDlg con 3 botones.. Jaco Varios 2 10-10-2003 23:05:50
un MessageDlg con 3 botones.. Jaco API de Windows 1 10-10-2003 22:37:40


La franja horaria es GMT +2. Ahora son las 13:13:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi