Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No mostrar form segun condicion en el create (https://www.clubdelphi.com/foros/showthread.php?t=85730)

jars 24-04-2014 18:48:58

No mostrar form segun condicion en el create
 
Hola amigos.
Quisiera que me comenten cual es la forma correcta de hacer lo siguiente:
Desde la pantalla principal de la aplicación creo un nuevo form, este en el formcreate checkea que se pueda conectar con un servicio especifico, si no lo logra no quiero que se muestra la pantalla y que se cierre.
Gracias.

ecfisa 24-04-2014 21:59:38

Hola jars.

¿ Deseas verificar si se establece la conexión, o si el usuario tiene los permisos para establecerla ?

Saludos :)

Neftali [Germán.Estévez] 25-04-2014 10:47:02

Cita:

Empezado por jars (Mensaje 475577)
Desde la pantalla principal de la aplicación creo un nuevo form, este en el formcreate checkea que se pueda conectar con un servicio especifico, si no lo logra no quiero que se muestra la pantalla y que se cierre.

En el Oncreate del form ya has iniciado el proceso de creación.
Haz la comprobación desde tu pantalla principal antes de crear ese segundo form. Si no cumple las condiciones no lo crees.

jars 25-04-2014 14:28:21

Neftali, no puedo hacer la verificación antes de llamar al form.
Ecfisa, no importa lo que haga con la verificación, lo que quiero saber es como matar la creación del form, es decir que muestre el mensaje de error y no se muestre el form.
Gracias

Neftali [Germán.Estévez] 25-04-2014 14:52:09

Cita:

Empezado por jars (Mensaje 475627)
Neftali, no puedo hacer la verificación antes de llamar al form.

No se el porqué, pero eso sería lo correcto.

Cita:

Empezado por jars (Mensaje 475627)
lo que quiero saber es como matar la creación del form, es decir que muestre el mensaje de error y no se muestre el form.

En ese caso deberías dejar que acabe de crearse (tal vez si lo tienes no visible no verás todo el proceso) y una vez que acabe de crearse, cerrarlo.
No puedes hacerlo directamente en los eventos OnCreate, onShow,... así que deberás usar algún mensaje tipo AFTERSHOW o el equivalente a AFTERCREATE.
De todas formas no creo que sea la mejor opción.

pacopenin 25-04-2014 15:01:19

Hola.

Una pantalla no se muestra hasta que no haces el show (o showModal) excepto que sea MDIChild, así que siempre puedes decidir, entre el create y el show que es lo que quieres hacer.

Un saludo.

ecfisa 25-04-2014 17:40:21

Hola jars.
Cita:

Empezado por jars (Mensaje 475627)
...
Ecfisa, no importa lo que haga con la verificación, lo que quiero saber es como matar la creación del form, es decir que muestre el mensaje de error y no se muestre el form.
...

¡ Pero claro que importa !, si no requiere la intervención de un usuario, no es necesario el uso de un formulario...

Si vas a usar un formulario, coincido con Neftali en que de ese modo no es la mejor opción, pero podrías hacer algo como esto.

Formulario de conexión:
Código Delphi [-]
...
const
  WM_AFTER_CREATE = WM_USER + 301;

type
  TfrmConnect = class(TForm)
    procedure FormCreate(Sender: TObject);
    //...
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FModalResult: TModalResult;
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
  public
  end;

var
  frmConnect: TfrmConnect;

implementation


function IsServerConnect: Boolean;
begin
  { Aquí el código de tu funcion para conectar al servidor }

  Result:= Boolean(Random(2)); // (Sólo para el ejemplo)
end;

procedure TfrmConnect.WmAfterCreate(var Msg: TMessage);
begin
   if not IsServerConnect then
    FModalResult:= mrCancel
  else
    FModalResult:= mrOk;
  Close;
end;

procedure TfrmConnect.FormCreate(Sender: TObject);
begin
  //... Otras cosas que debas hacer 
  Randomize; // (Sólo para el ejemplo)

  PostMessage(Handle, WM_AFTER_CREATE, 0, 0);
end;

procedure TfrmConnect.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ModalResult:= FModalResult;
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TfrmMain.ButtonConnect(Sender: TObject);
var
  R: TModalResult;
begin
  with TfrmConnect.Create(nil) do
  try
    R:= ShowModal;
  finally
    Free;
  end;
  if R = mrCancel then
  begin
    MessageBox(0,'Conexión fallida','',MB_ICONERROR);
    Application.Terminate;
  end;
end;
Por supuesto que el formulario de conexión no debera figurar en la lista de auto creación.

Saludos :)

jars 25-04-2014 18:01:43

Gracias a todos por las respuestas.
Lo voy a probar.


La franja horaria es GMT +2. Ahora son las 20:36:09.

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