Crear inputquery/messagebox etc sin dolor.

Crear inputquery/messagebox etc sin dolor.


el Uso de una manera que puede parecer un hack es posible modificar genérico cuadros de mensaje y cambiar el icono, editar, botón, tamaño, etc...

La idea detrás de esta personalización es crear un mensaje personalizado, que lo ponga a la cola *antes* de llamar el cuadro de mensaje. En el mensaje, se debe recuperar el identificador de la ventana (si es messagebox) o la forma (si es inputbox/inputquery/messagedlg) y modificar lo que quieras. Permítanme dar dos ejemplos, uno para regular la api messagebox y otro con un inputquery.

1er ejemplo: Usted necesita para cambiar el título por defecto de la Sí/No botón de un cuadro de mensaje.

tipo
TForm1 = class(TForm)
Button1: TButton
procedimiento Button1Click(Sender: TObject)
privada
procedimiento WMHackBox(var message: TMessage) mensaje WM_USER 1025
fin
...
aplicación
...
procedure TForm1.Button1Click(Sender: TObject)
begin
// Posting nuestro mensaje personalizado
PostMessage(Mango, WM_USER 1025, 0, 0)
// Messagebox llamada
Aplicación.MessageBox ('yo' completamente estúpido.', 'MyApplication', MB_YESNO o MB_ICONINFORMATION)
fin

procedure TForm1.WMHackBox(var message: TMessage)
var
h: HWND
begin
// El cuadro de mensaje se muestra, vamos a recuperar su mango
h := FindWindow(WC_DIALOG, 'MyApplication')
// Si esta es la mejor messagebox, vamos a modificarlo
si GetParent(h) = Aplicación.Manejar, a continuación,
begin
SetDlgItemText(h, ID_YES, 'I & de acuerdo')


SetDlgItemText(h, ID_NO, 'I & en desacuerdo')
fin
fin

tenga en cuenta que si utiliza MessageDlg, no es un habitual de la API messagebox pero un Formulario creado dinámicamente por Delphi. Ver la 2a Ejemplo.

el Resultado & #039

2º ejemplo: Usted necesita cambiar al modificar la propiedad de un InputQuery, por ejemplo, el PasswordChar.

tipo
TForm1 = class(TForm)
Button1: TButton
procedimiento Button1Click(Sender: TObject)
privada
procedimiento WMHack(var message: TMessage) mensaje WM_USER 1024
fin
...
aplicación
...
const
ACaption = 'Título'

procedure TForm1.Button1Click(Sender: TObject)
begin
PostMessage(Mango, WM_USER 1024, 0, 0)
InputBox(ACaption, 'Mensaje', 'Default')
fin

procedure TForm1.WMHack(var message: TMessage)
var
i: Integer
j: Integer
begin
for i := 0 en la Pantalla.FormCount-1 hacer
si la Pantalla.Formas[i].Caption = ACaption, a continuación,
begin
para j := 0 en la Pantalla.Formas[i].ControlCount-1 hacer
si la Pantalla.Formas[i].Los controles[j] es TEdit, a continuación,
begin
TEdit(la Pantalla.Formas[i].Los controles[j]).PasswordChar := '#'
TEdit(la Pantalla.Formas[i].Los controles[j]).SelectAll
Salir
fin
fin
fin
Resultado

& nbsp







Crear inputquery/messagebox etc sin dolor.


Crear inputquery/messagebox etc sin dolor. : Multi-millones de consejos para hacer su vida mas facil.


el Uso de una manera que puede parecer un hack es posible modificar generico cuadros de mensaje y cambiar el icono, editar, boton, tamaño, etc...

La idea detras de esta personalizacion es crear un mensaje personalizado, que lo ponga a la cola *antes* de llamar el cuadro de mensaje. En el mensaje, se debe recuperar el identificador de la ventana (si es messagebox) o la forma (si es inputbox/inputquery/messagedlg) y modificar lo que quieras. Permitanme dar dos ejemplos, uno para regular la api messagebox y otro con un inputquery.

1er ejemplo: Usted necesita para cambiar el titulo por defecto de la Si/No boton de un cuadro de mensaje.

tipo
TForm1 = class(TForm)
Button1: TButton
procedimiento Button1Click(Sender: TObject)
privada
procedimiento WMHackBox(var message: TMessage) mensaje WM_USER 1025
fin
...
aplicacion
...
procedure TForm1.Button1Click(Sender: TObject)
begin
// Posting nuestro mensaje personalizado
PostMessage(Mango, WM_USER 1025, 0, 0)
// Messagebox llamada
Aplicacion.MessageBox ('yo' completamente estupido.', 'MyApplication', MB_YESNO o MB_ICONINFORMATION)
fin

procedure TForm1.WMHackBox(var message: TMessage)
var
h: HWND
begin
// El cuadro de mensaje se muestra, vamos a recuperar su mango
h := FindWindow(WC_DIALOG, 'MyApplication')
// Si esta es la mejor messagebox, vamos a modificarlo
si GetParent(h) = Aplicacion.Manejar, a continuacion,
begin
SetDlgItemText(h, ID_YES, 'I & de acuerdo')


SetDlgItemText(h, ID_NO, 'I & en desacuerdo')
fin
fin

tenga en cuenta que si utiliza MessageDlg, no es un habitual de la API messagebox pero un Formulario creado dinamicamente por Delphi. Ver la 2a Ejemplo.

el Resultado & #039

2º ejemplo: Usted necesita cambiar al modificar la propiedad de un InputQuery, por ejemplo, el PasswordChar.

tipo
TForm1 = class(TForm)
Button1: TButton
procedimiento Button1Click(Sender: TObject)
privada
procedimiento WMHack(var message: TMessage) mensaje WM_USER 1024
fin
...
aplicacion
...
const
ACaption = 'Titulo'

procedure TForm1.Button1Click(Sender: TObject)
begin
PostMessage(Mango, WM_USER 1024, 0, 0)
InputBox(ACaption, 'Mensaje', 'Default')
fin

procedure TForm1.WMHack(var message: TMessage)
var
i: Integer
j: Integer
begin
for i := 0 en la Pantalla.FormCount-1 hacer
si la Pantalla.Formas[i].Caption = ACaption, a continuacion,
begin
para j := 0 en la Pantalla.Formas[i].ControlCount-1 hacer
si la Pantalla.Formas[i].Los controles[j] es TEdit, a continuacion,
begin
TEdit(la Pantalla.Formas[i].Los controles[j]).PasswordChar := '#'
TEdit(la Pantalla.Formas[i].Los controles[j]).SelectAll
Salir
fin
fin
fin
Resultado

& nbsp

Crear inputquery/messagebox etc sin dolor.

Crear inputquery/messagebox etc sin dolor. : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación