Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo cancelar OnShow? (https://www.clubdelphi.com/foros/showthread.php?t=49816)

Tonio 31-10-2007 00:22:34

¿Cómo cancelar OnShow?
 
En mi aplicación, llamo a un Form, en el OnShow tengo un MesageDlg con un 'Case' varias opciones, entre ellas 'Cancelar'.
El 'Form' es el mismo para cada una de las opciones, su función será en base al valor que le doy a una variable en las distintas opciones.

Lo llamo:

Código:

Application.CreateForm(TfDomingo_T, fDomingo_T);
fDomingo_T.show;

En el evento OnShow va esto:

Código:

Donde := MessageDlgPosI(' ¿Cena, Mensaje, Presidir u Otro?  ',mtInformation,[mbIgnore,
        mbRetry, mbAll, mbNoToAll, mbYesToAll],0,360,319,ltSpanish2);
 
 case Donde of
    8:
      begin  // 8: Es Presidir
      EsP := True ;
      end;
    4:
      begin  // 4: Es Cena
      EsC := True;
      end;
    5:
      begin  // Es Mensaje
      EsM := True;
      end;
    9:
      begin  // Es otro
      EsO := True;
      end;
    10:
      begin  // Es Cancelar
      EsCerrar := True;
      end;
 end; // case

// He ententado con esto, en la opción 'Cancelar' hacer 'EsCerrar = True' y...


if EsCerrar then
 begin
 EsCerrar := False;
 Close;

// Pero me da un mensaje de error:
// 'Cannot change Visible in OnShowor OnHide'

Entonces
¿Qué debo hacer para que el form no se muestre cuando pulso 'Cancelar'?

¿Es posible?

Gracias de antemano.
Un saludo.
Tonio.

xEsk 31-10-2007 00:41:12

En lugar de programar todo esto en el "OnShow", es más recomendable (en este caso) crear un proceso tuyo, y desde ahí realizar las comprobaciones.

Que ganamos haciendo esto? Pues que si no queremos mostrar el formulario, no llamamos el "show" y ya tenemos el cancelar hecho.

Así pues, la cosa quedaría algo parecida a esto:

Lo llamas:
Código Delphi [-]
Application.CreateForm(TfDomingo_T, fDomingo_T);
fDomingo_T.mostrarFormulario;

y definir el procedure "mostrarFormulario":

Código Delphi [-]
Donde := MessageDlgPosI(' ¿Cena, Mensaje, Presidir u Otro?  ',mtInformation,[mbIgnore,
         mbRetry, mbAll, mbNoToAll, mbYesToAll],0,360,319,ltSpanish2);
 
 case Donde of
    8:
      begin  // 8: Es Presidir
       EsP := True ;
      end;
    4:
      begin  // 4: Es Cena
      EsC := True;
      end;
    5:
      begin  // Es Mensaje
       EsM := True;
      end;
    9:
      begin  // Es otro
       EsO := True;
      end;
    10:
      begin  // Es Cancelar
       EsCerrar := True;
       end;
 end; // case

// He ententado con esto, en la opción 'Cancelar' hacer 'EsCerrar = True' y...


if not EsCerrar then
 begin
   show;
 end;

Saludos.

xEsk 31-10-2007 00:46:20

Se me olvidaba, para capturar el resultado del mensaje, puedes compararlo con las constantes (más claras) correspondientes:

En tu caso:
Código Delphi [-]
mrIgnore, mrRetry, mrAll, mrNoToAll, mrYesToAll

Saludos.

Tonio 31-10-2007 01:26:10

¿Cómo cancelar OnShow?
 
Gracias xEsk, no lo he probado, pero, por lógica debe funcionar, ya te contaré.
El emplear las constantes de esa forma, es por una causa, he encontrado un fichero .pas, con el que se puede hacer que en los 'MessagesDlg' la opción vaya en castellano y los títulos que desees, en un fichero .txt se definen y puedes tener las que quieras, si te fijas, el que he puesto tiene la opción de situarlo en la pantalla donde quieras y 'ltSpanish2' dice que coja esa opción del citado fichero .txt, vamos que los nombre en inglés los sustituyo por otros en castellano, pero en el programa debo poner el nombre en inglés. No se si será mucho rollo, si es así perdona.

Gracias nuevamente, también por la rapidez.
Un saludo.
Tonio.

Tonio 31-10-2007 01:36:45

¿Cómo cancelar OnShow?
 
Lo he probado. Va de cine.
Lo que no se es si es aquí donde lo debo agradecer y decir que funciona.
Si no es la forma, que alguien me lo diga.
Gracias.
Tonio.

ArdiIIa 31-10-2007 01:43:35

Cita:

Empezado por Tonio (Mensaje 242493)
Lo he probado. Va de cine.
Lo que no se es si es aquí donde lo debo agradecer y decir que funciona.
Si no es la forma, que alguien me lo diga.
Gracias.
Tonio.

[OFFTOPIC]
Pues aunque no me concierne, pero también lo podrías agradecer pagando unos vinos por la "La Senda de los Elefantes", o para no complicar el asunto, en la taberna del club.
[/OFFTOPIC]

Tonio 31-10-2007 10:23:17

¿Cómo cancelar OnShow?
 
ArdiIIa, la taberna del Club, no se donde está, pero la calle del Laurel, pués sí, así que la cosa es fácil, si coincidimos en esta estupenda ciudad, nos podemos tomar unos vinos, incluído xEsk, cómo es lógico.

Gracias por tu aportación.
Un saludo.
Tonio.


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

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