Más control de la messagedlg
El MessageDlg función es muy útil ya que se encarga de todas las wordwrapping del mensaje y los identificadores de posicionamiento de los botones. Pero dos necesidades diferentes para un no-default comportamiento de la MessageDlg me hizo explorar el código fuente de los cuadros de diálogo de la unidad.
Este artículo apareció originalmente en www.undu.com
en Primer lugar necesitaba un modal dialogbox que iba a cerrar cuando se presiona una tecla y se informe de lo que ha pulsado la tecla. Mucho como la TurboPascal comandos SI KEYPRESSED, a CONTINUACIÓN, la tecla enseguida:=READKEY.
Segundo que necesitaba para que el control de los botones en el cuadro de diálogo predeterminado. Si usted tiene un MessageDlg preguntando '¿realmente desea eliminar el archivo?', a continuación, tener el Sí-botón por defecto (que es el estándar en MessageDlg) podría crear problemas para los mucho-a-con ganas de usuario.
Los Diálogos de la unidad tiene una función llamada CreateMessageDialog que es utilizado por MessageDlg para hacer el cuadro de diálogo. Mediante el uso de CreateMessageDialog directamente usted consigue el mejor de MessageDlg (wordwrapping y otros automático designelements) además de obtener un mayor control sobre el comportamiento del cuadro de diálogo.
a Continuación se muestra mi solución a las dos necesidades.
Crear una nueva aplicación. Poner dos botones y una etiqueta en el formulario. Asignar el evento onClick de button1 para TForm1.Button1Click y asignar el evento onClick de button2 a TForm2.Button2Click.
Clic en Button1 ahora va a producir un cuadro de diálogo que se cierra cuando el usuario presiona uno de los 'legales claves' o cuando el usuario presiona ESC o hace clic en el icono. La tecla que se presionó se muestra en la Label1.
haga Clic Button2 mostrará un mensaje estándar de diálogo con una diferencia: el No-botón es el predeterminado, no el Sí-botón. Para encontrar la No-botón debo usar SI TButton(Controles[n]).Nombre='No'. Sustituto del 'No' con 'YesToAll','Abort' o cualquier otro botón de subtítulos para hacer un botón por defecto.
unit Unit1
interfaz
usos
& nbsp & nbsp Windows, Messages, SysUtils, Classes, Graphics, Controles, Formularios, cuadros de diálogo, StdCtrls
tipo
& nbsp & nbsp TForm1 = class(TForm)
& nbsp & nbsp & nbsp & nbsp Button1: TButton
& nbsp & nbsp & nbsp & nbsp Label1: TLabel
& nbsp & nbsp & nbsp & nbsp Button2: TButton
& nbsp & nbsp & nbsp & nbsp procedimiento Button1Click(Sender: TObject)
& nbsp & nbsp & nbsp & nbsp procedimiento HelpBoxKeyPress(Sender: TObject var Key: Char)
& nbsp & nbsp & nbsp & nbsp procedimiento Button2Click(Sender: TObject)
& nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp { Private declarations }
& nbsp & nbsp pública
& nbsp & nbsp & nbsp & nbsp { Public declarations }
& nbsp & nbsp final
var
& nbsp & nbsp Form1: TForm1
aplicación
{$R *.DFM}
VAR
& nbsp & nbsp LegalKeys: String
procedure TForm1.Button1Click(Sender: TObject)
VAR
& nbsp & nbsp s:String
begin
& nbsp & nbsp LegalKeys:='ABC123'
& nbsp & nbsp s:='¿Qué quieres hacer ahora?' #13#13
& nbsp & nbsp & nbsp & nbsp 'A. Ir a casa' #13
& nbsp & nbsp & nbsp & nbsp 'B. Comer' = #13
& nbsp & nbsp & nbsp & nbsp 'C. Sleep' #13
& nbsp & nbsp & nbsp & nbsp '1. Programa en Delphi' #13
& nbsp & nbsp & nbsp & nbsp '2. Pedir una Pizza' #13
& nbsp & nbsp & nbsp & nbsp '3. Nada'
& nbsp & nbsp CON CreateMessageDialog(s, mtConfirmation, [])
& nbsp & nbsp EMPEZAR
& nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp onKeyPress:=HelpBoxKeyPress
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SI ShowModal=mrOK
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LUEGO Label1.Caption:='Usted presiona:' LegalKeys[Tag]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DEMÁS Label1.Caption:='Usted presiona:' 'Cancelar'
& nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Libre
& nbsp & nbsp & nbsp & nbsp final //try..finalmente
& nbsp & nbsp FINAL //con
fin
procedure TForm1.HelpBoxKeyPress(Sender: TObject var Key: Char)
BEGIN
& nbsp & nbsp SI Pos(UpCase(Clave),LegalKeys)>0, ENTONCES
& nbsp & nbsp & nbsp & nbsp EMPEZAR
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp TForm(Remitente).Tag:=Pos(UpCase(Clave),LegalKeys)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp TForm(Remitente).ModalResult:=mrOK
& nbsp & nbsp & nbsp & nbsp FINAL
& nbsp & nbsp ELSE IF Key=#27 TForm(Remitente).ModalResult:=mrCancel
FIN
procedure TForm1.Button2Click(Sender: TObject)
VAR
& nbsp & nbsp n:Integer
begin
& nbsp & nbsp CON CreateMessageDialog ('¿realmente desea eliminar el archivo?',mtWarning,[mbYes,mbNo])
& nbsp & nbsp & nbsp & nbsp EMPEZAR
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp n:=0 A ControlCount-1 HACER
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SI (Controles[n] es TButton)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ENTONCES SI TButton(Controles[n]).Nombre='No' ENTONCES TButton (Controles[n]).TabOrder:=0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ShowModal
& nbsp & nbsp & nbsp & nbsp FINAL
fin
final.
Mas control de la messagedlg
Mas control de la messagedlg : Multi-millones de consejos para hacer su vida mas facil.
El MessageDlg funcion es muy util ya que se encarga de todas las wordwrapping del mensaje y los identificadores de posicionamiento de los botones. Pero dos necesidades diferentes para un no-default comportamiento de la MessageDlg me hizo explorar el codigo fuente de los cuadros de dialogo de la unidad.
Este articulo aparecio originalmente en www.undu.com
en Primer lugar necesitaba un modal dialogbox que iba a cerrar cuando se presiona una tecla y se informe de lo que ha pulsado la tecla. Mucho como la TurboPascal comandos SI KEYPRESSED, a CONTINUACION, la tecla enseguida:=READKEY.
Segundo que necesitaba para que el control de los botones en el cuadro de dialogo predeterminado. Si usted tiene un MessageDlg preguntando '¿realmente desea eliminar el archivo?', a continuacion, tener el Si-boton por defecto (que es el estandar en MessageDlg) podria crear problemas para los mucho-a-con ganas de usuario.
Los Dialogos de la unidad tiene una funcion llamada CreateMessageDialog que es utilizado por MessageDlg para hacer el cuadro de dialogo. Mediante el uso de CreateMessageDialog directamente usted consigue el mejor de MessageDlg (wordwrapping y otros automatico designelements) ademas de obtener un mayor control sobre el comportamiento del cuadro de dialogo.
a Continuacion se muestra mi solucion a las dos necesidades.
Crear una nueva aplicacion. Poner dos botones y una etiqueta en el formulario. Asignar el evento onClick de button1 para TForm1.Button1Click y asignar el evento onClick de button2 a TForm2.Button2Click.
Clic en Button1 ahora va a producir un cuadro de dialogo que se cierra cuando el usuario presiona uno de los 'legales claves' o cuando el usuario presiona ESC o hace clic en el icono. La tecla que se presiono se muestra en la Label1.
haga Clic Button2 mostrara un mensaje estandar de dialogo con una diferencia: el No-boton es el predeterminado, no el Si-boton. Para encontrar la No-boton debo usar SI TButton(Controles[n]).Nombre='No'. Sustituto del 'No' con 'YesToAll','Abort' o cualquier otro boton de subtitulos para hacer un boton por defecto.
unit Unit1
interfaz
usos
& nbsp & nbsp Windows, Messages, SysUtils, Classes, Graphics, Controles, Formularios, cuadros de dialogo, StdCtrls
tipo
& nbsp & nbsp TForm1 = class(TForm)
& nbsp & nbsp & nbsp & nbsp Button1: TButton
& nbsp & nbsp & nbsp & nbsp Label1: TLabel
& nbsp & nbsp & nbsp & nbsp Button2: TButton
& nbsp & nbsp & nbsp & nbsp procedimiento Button1Click(Sender: TObject)
& nbsp & nbsp & nbsp & nbsp procedimiento HelpBoxKeyPress(Sender: TObject var Key: Char)
& nbsp & nbsp & nbsp & nbsp procedimiento Button2Click(Sender: TObject)
& nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp { Private declarations }
& nbsp & nbsp publica
& nbsp & nbsp & nbsp & nbsp { Public declarations }
& nbsp & nbsp final
var
& nbsp & nbsp Form1: TForm1
aplicacion
{$R *.DFM}
VAR
& nbsp & nbsp LegalKeys: String
procedure TForm1.Button1Click(Sender: TObject)
VAR
& nbsp & nbsp s:String
begin
& nbsp & nbsp LegalKeys:='ABC123'
& nbsp & nbsp s:='¿Que quieres hacer ahora?' #13#13
& nbsp & nbsp & nbsp & nbsp 'A. Ir a casa' #13
& nbsp & nbsp & nbsp & nbsp 'B. Comer' = #13
& nbsp & nbsp & nbsp & nbsp 'C. Sleep' #13
& nbsp & nbsp & nbsp & nbsp '1. Programa en Delphi' #13
& nbsp & nbsp & nbsp & nbsp '2. Pedir una Pizza' #13
& nbsp & nbsp & nbsp & nbsp '3. Nada'
& nbsp & nbsp CON CreateMessageDialog(s, mtConfirmation, [])
& nbsp & nbsp EMPEZAR
& nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp onKeyPress:=HelpBoxKeyPress
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SI ShowModal=mrOK
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LUEGO Label1.Caption:='Usted presiona:' LegalKeys[Tag]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DEMAS Label1.Caption:='Usted presiona:' 'Cancelar'
& nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Libre
& nbsp & nbsp & nbsp & nbsp final //try..finalmente
& nbsp & nbsp FINAL //con
fin
procedure TForm1.HelpBoxKeyPress(Sender: TObject var Key: Char)
BEGIN
& nbsp & nbsp SI Pos(UpCase(Clave),LegalKeys)>0, ENTONCES
& nbsp & nbsp & nbsp & nbsp EMPEZAR
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp TForm(Remitente).Tag:=Pos(UpCase(Clave),LegalKeys)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp TForm(Remitente).ModalResult:=mrOK
& nbsp & nbsp & nbsp & nbsp FINAL
& nbsp & nbsp ELSE IF Key=#27 TForm(Remitente).ModalResult:=mrCancel
FIN
procedure TForm1.Button2Click(Sender: TObject)
VAR
& nbsp & nbsp n:Integer
begin
& nbsp & nbsp CON CreateMessageDialog ('¿realmente desea eliminar el archivo?',mtWarning,[mbYes,mbNo])
& nbsp & nbsp & nbsp & nbsp EMPEZAR
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp n:=0 A ControlCount-1 HACER
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SI (Controles[n] es TButton)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ENTONCES SI TButton(Controles[n]).Nombre='No' ENTONCES TButton (Controles[n]).TabOrder:=0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ShowModal
& nbsp & nbsp & nbsp & nbsp FINAL
fin
final.
Más control de la messagedlg
By Consejos Y Trucos
Más control de la messagedlg : Multi-millones de consejos para hacer su vida más fácil.