Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Showmodal no muestra (https://www.clubdelphi.com/foros/showthread.php?t=63017)

jonmendi 26-01-2009 16:17:28

Showmodal no muestra
 
Hola a todos!
tengo el siguiente código.
Código:


program Project1;
uses
  Forms,
  uAvisos in 'uAvisos.pas' {fAvisos},
  auxiliares in 'auxiliares.pas';
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TfAvisos, fAvisos);
  Auxiliares.ejecutar;
  Application.Run;
end.

Código:


unit uAvisos;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;
type
  TfAvisos = class(TForm)
    lTexto: TLabel;
    bAceptar: TBitBtn;
    bCancelar: TBitBtn;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  fAvisos: TfAvisos;
implementation
{$R *.dfm}
 
procedure TfAvisos.FormShow(Sender: TObject);
begin
  lTexto.Caption := 'Espere...';
end;
end.

Código:


unit auxiliares;
interface
procedure ejecutar;
implementation
uses uAvisos, forms;
procedure ejecutar;
begin
  fAvisos.Show;
  fAvisos.Close;
  fAvisos.Visible := False;
  fAvisos.ShowModal;
end;
end.

Mi problema es el siguiente:
Tal como está el código, no me saca el form fAvisos. En cambio si solo dejo el fAvisos.Showmodal
Código:


unit auxiliares;
interface
procedure ejecutar;
implementation
uses uAvisos, forms;
procedure ejecutar;
begin
{  fAvisos.Show;
  fAvisos.Close;
  fAvisos.Visible := False;}
  fAvisos.ShowModal;
end;
end.

sí que me lo muestra. ¿Alguien sabe qué estoy haciendo mal?

Muchas gracias a todos.
Jon

dec 26-01-2009 16:30:05

Hola,

Bueno. Tal parece que, si muestra un formulario, y acto seguido lo cierras... dependiendo de la velocidad del ordenador es posible que hasta ni veas el formulario en cuestión, pues todo ocurre muy rápidamente. Sin embargo, cuando muestras un formulario "modal", este permanecerá "visible" hasta que no lo cierres explícitamente, desde el propio formulario, por regla general. Es decir, no es posible hacer esto:

Código Delphi [-]
formulario.Show();
formulario.Close();

Porque la segunda instrucción se ejecutará acto seguido de la primera, con lo que el formulario será "visto y no visto".

jonmendi 26-01-2009 17:12:44

gracias por contestar dec!
El tema es que cuando le pongo showmodal después de hacer el show y el close, no me muestra el form. Yo entiendo que si hago un showmodal me debe presentar el form, haya pasado lo que haya pasado antes.
No se si me explico....
Un saludo y gracias.
Jon

PD: el show y el close lo hago en el programa original por otros motivos. Le muestro un mensaje tipo ?espere...' mientras hago un proceso que tarda un tiempo. Es más del tipo
Código:

unit auxiliares;
interface
procedure ejecutar;
implementation
uses uAvisos, forms;
procedure ejecutar;
begin
  fAvisos.Show;
  ProcesoQueTardaMucho;
  fAvisos.Close;
  fAvisos.Visible := False;
  fAvisos.ShowModal;
end;
end.


luisgutierrezb 26-01-2009 17:17:57

Probablemente porque le tienes el visible a False, por eso cuando ejecutas el show-close-hide-showmodal no te lo muestra...

jonmendi 26-01-2009 17:54:05

gracias por contestar luisgutierrezb!
lo que ocurre es que al hacerle el show pone visible a true, y si luego vuelvo a intentar abrir con el showmodal me dice "Cannot make a visible window modal". Y claro, pues tampoco interesa :D.

Misterio, misterio,...

Un saludo y gracias.
jon

Delphius 26-01-2009 18:09:06

Hola jonmendi,
Por como lo veo, el problema se debe a el Show-Close. Si lo abres, y luego lo cierras no lo verás; o cuanto mucho notarás un efecto de una ventana que se abre y cierra rápidamente como comentaba Dec.

Ahora, si después de eso muestras modalmente la ventana, no recibirás el control del programa sino es hasta que se cierre dicha ventana.

Si la abres, luego no intentes abrirla con ShowModal. No se porqué debes mostrar la ventana dos veces: primero con Show y luego con ShowModal:confused:.

Si te explicases mejor, con mayores detalles podríamos comprender tus dudas y proponerte soluciones y/o alternativas. Por cierto, emplea las etiquetas DELPHI por favor.

Saludos,

jonmendi 27-01-2009 08:46:08

gracias Delphius!
en la unit avisos tengo todos los avisos que le salen al usuario (siempre que esté todo controlado ;)).

Nada más entrar al programa, le sale un "Espere mientras se cargan datos', pero nada más hacer ese proceso, quiero que se le cierre la ventana y le saque otra de un aviso de como ha ido la carga. Ese segundo mensaje sí quiero que lo conteste el usuario.

Eso es lo que hace el código:

Código:


unit auxiliares;
interface
procedure ejecutar;
implementation
uses uAvisos, forms;
procedure ejecutar;
begin
  uAvisos.tipo := 1;
  fAvisos.Show;
  ProcesoQueTardaMucho;
  fAvisos.Close;
  uAvisos.tipo := 2
  fAvisos.Visible := False;
  fAvisos.ShowModal;
end;
end.

En la unit Avisos voy definiendo los diferentes mensajes y al mostrarlo elijo un texto u otro, un tipo de letra, unos botones....

No sé si ahora está más claro.

Muchas gracias a todos.

Jon


La franja horaria es GMT +2. Ahora son las 17:54:00.

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