Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   MessageDlg que boton tiene el foco? (https://www.clubdelphi.com/foros/showthread.php?t=63450)

dmassive 14-02-2009 13:48:28

MessageDlg que boton tiene el foco?
 
Buenos dias!

Uso el siguiente dialogo:
Código Delphi [-]
If MessageDlg('¿Desea continuar?', mtWarning, [mbYes, mbNo], 0) = mrYes Then
pero siempre el foco esta sobre el boton mbYes, ¿se podria cambiar esto y que el foco lo tenga el boton mbNo?

Gracias!

dec 14-02-2009 14:02:02

Hola,

Fíjate que existe otra versión de la misma función que cuenta con un parámetro más, precisamente, para determinar qué botón será el "predeterminado". Así el asunto podría quedar:

Código Delphi [-]
If MessageDlg('¿Desea continuar?', mtWarning, [mbYes, mbNo], 0, mbNo) = mrYes Then

dmassive 14-02-2009 14:22:01

Lo habia visto en la ayuda de Delphi 7, pero me da este error:
Código:

[Error] (234): Too many actual parameters

dec 14-02-2009 14:26:43

Hola,

Entonces debe ser "problema" de la versión de Delphi. Yo uso la 2009, y ahí existe dicha "versión" de la función "MessageDlg()". Creo que podemos, directamente, copiándote aquí la versión de la función que te permitirá hacer lo que necesitas:

Código Delphi [-]
function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): Integer; overload;
begin
  Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, -1, -1, '', DefaultButton);
end;

Creo que podrá servirte, puesto que ambas versiones de las funciones usan "MessageDlgPostHelp", y, espero que esta sí que funcione como se espera en tu versión de Delphi. De todas formas, estoy viendo que esta última función también está sobrecargada... al menos en Delphi 2009, así que no sé si tendremos similar problema. Y habrá que buscar otra solución...

dmassive 14-02-2009 15:00:41

Estuve probando y me da el mismo error:
Código:

[Error] Too many actual parameters

Delphius 14-02-2009 15:31:39

Hola dmassive,
Añade en uses la unidad QDialogs. Eso debería bastar para poder hacer uso de las funciónes MessageDlg sobrecargadas que permiten establecer, entre otras cosas, el botón por defecto.;)

Saludos,

dmassive 14-02-2009 17:12:33

Gracias! Efectivamente con QDialogs se soluciona!

Al margen de la sastifactoria solucion lo negativo es que yo usaba el archivo "Consts.pas" para definir los textos de mis dialogs, pero note que ahora salen en ingles :S Parace que QDialogs toma las constantes de otro archivo :S

Al González 14-02-2009 18:40:26

¡Hola!

También puedes hacer esto y el cuadro de diálogo aparecerá en el idioma que tenga establecido el sistema operativo:

Código Delphi [-]
  Application.MessageBox ('¿Desea continuar?', 'Confirmar',
    mb_YesNo Or mb_IconWarning Or mb_DefButton2);

Espero haber ayudado.

Saludos.

Al González. :)

dmassive 14-02-2009 22:05:03

Muy bueno, siguiendo el ejemplo el condicional quedaria asi:
Código Delphi [-]
If Application.MessageBox ('¿Desea continuar?', 'Confirmar', mb_YesNo Or mb_IconWarning Or mb_DefButton2) = mrYes Then
Ademas este toma el sonido del sistema. Gracias!


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

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