Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Evento de formulario posterior a onshow

No se si habrá algun evento en un formulario que se lance despues del onshow y que permita cerrar el formulario. El Objetivo es poder cerrarlo o no en función de lo que haya pasado durante el evetno onshow.

Última edición por apicito fecha: 11-06-2004 a las 13:52:00.
Responder Con Cita
  #2  
Antiguo 11-06-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Quizás podría servirte el Loaded, protegido en el padre.

Código Delphi [-]
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Loaded; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Loaded;
begin
  inherited;

end;

O si nos explicas las condiciones quizás alguna otra manera (incluso no llegar a crear el formulario haciendo las comprovaciones antes)
Responder Con Cita
  #3  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
En el form padre creo el formulario, después le asigno valores a una variables públicas y con esas variables publicas, en el onshow hago comprobaciones en la base de datos. El problema es que algunas veces, como consecuencia de esas comprobaciones, me interesa hacer un showmessage y cerrar el formulario, pero no lo consigo ya que en el onshow no funciona el close.
Responder Con Cita
  #4  
Antiguo 11-06-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Vale, bien..... y no te sería más sencillo hacer las comprovaciones antes de mostrar el formulario (antes del Show)??

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Application);
  try
    // Como el formulario lo tengo creado, puedo acceder a sus variables
    //  públicas y hacer las comprovaciones necesarias en este punto
    //  y si las comprovaciones no me interesan, sencillamente no hago
    // el Show (o ShowModal) de la ventana y me limito a liberarla
    if Comprovaciones then
      Form2.Show;
  finally
    FreeAndNil(Form2);
  end;
end;
Espero te sirva
Responder Con Cita
  #5  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
En la creación del formulario la hago por referencia, ya que se llama muchos formularios distintos y con distintas comprobaciones, entonces las comprobaciones las tengo que hacer en el formulario hijo.
Responder Con Cita
  #6  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
mira el procedimiento de llamada:
Código:
  if Sender.ClassType = TToolButton then
    FormaClase:=TExpFormClass(GetClass('TExp'+inttostr((Sender as TToolButton).Tag)))
  else if Sender.ClassType = TMenuItem then
    FormaClase:=TExpFormClass(GetClass('TExp'+inttostr((Sender as TMenuItem).Tag)))
  else
    Exit;
  if FormaClase<>nil then
    begin
      Forma:=FormaClase.Create(Self);
      Forma.codigo:=0;
      Forma.Expte:=QueryDia.fieldbyName('EXPDIA_CODIGO').AsInt64;
      Forma.Modo:='A';
      Forma.Part:=Part;
      Forma.Tipo:='EXP'+Part+QueryDia.fieldbyName('EXPDIA_TIPO').AsString;
      Forma.ExpAno:=EAno.Text;
      Forma.ExpNum:=ENumero.Text;
      Forma.Idioma:=Idioma;
      Forma.Dni:=EDni.Text;
      Forma.DniDup:=EDniDup.Text;
      Forma.ShowModal;
Responder Con Cita
  #7  
Antiguo 11-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por apicito
No se si habrá algun evento en un formulario que se lance despues del onshow y que permita cerrar el formulario.
El evento en sí no existe pero lo puedes crear tú mismo como muestro en el mensaje http://www.clubdelphi.com/foros/show...59&postcount=6

// Saludos
Responder Con Cita
  #8  
Antiguo 17-06-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
Aunque no os lo creais no me vale ninguno de los trucos ateriores en este caso particular, os explico:

Bien, estamos en una aplicacion CLX (delphi 7.0 - kylix 3), y quiero (lease me obligan) una pantalla de selección Pre-formulario principal, el caso es que si pulsan cerrar en ese pre-form no debo sacar el formulario principal, cerrando la aplicación.

¿por qué no puedo hacer que la pantalla "pre" sea la principal y esconderla?
porque no se que pasa pero el comportamiento de las ventanas en clx es ligeramente diferente y en cuanto la aplicación pierde el foco al volver sale siempre la pantalla "pre". Y si hago un hide desaparece de la barra de tareas.

El truco del Activate me da siempre una excepcion.



El truco de los mensages ya lo habia usado antes y funciona muy bien pero... estamos en una aplicación CLX y aqui son QMessages y yo no he conseguido poner un mensage a la cola, siempre me saltan de inmediato.

Ahora voy a intentar
plan a) enredar en dpr (Application.Initialize...) a ver si consigo mostrar la pre y cerrar la aplicación si le dan a salir.

plan b) poner un timer, activarlo en el OnShow y cerrar el form (¡¡peazo de plan b!!)

ya os contaré
Responder Con Cita
  #9  
Antiguo 17-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
mmmm opción a:
Código Delphi [-]
program Project2;

uses
  QForms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Form1 := TForm1.Create(Application);
  if (Form1.ShowModal = 1) then
  begin
    Form1.Free;
    Form2 := TForm2.Create(Application);
    Form2.ShowModal;
  end;
  Application.Run;
end.

probado y chuta
__________________
E pur si muove
Responder Con Cita
  #10  
Antiguo 18-06-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
Perfecto!

justo ayer por la tarde me salio lo mismo ^_^ para mi que me mandaste la solusión telepaticamente.

Muchas Gracias a todos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:26:12.


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
Copyright 1996-2007 Club Delphi