Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2013
Melissa_12 Melissa_12 is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 44
Poder: 0
Melissa_12 Va por buen camino
Ocultar ventanas

Hola, no se si este hilo deba ir aqui pero este es mi problema: Tengo una ventana en la cual me conecto a una base de datos, una vez que he realizado la conexion puedo ver la ventana principal de mi aplicacion, pero si muevo la ventana con el mouse puedo ver la ventana de la conexion detras, o sea la ventana que se supone que se cierre, he probado con destruirla pero me da error, no se que hacer porque esa ventana es obligatoria y se me ve muy feo que este ahi. Muchas Gracias.
Responder Con Cita
  #2  
Antiguo 07-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hay muchas formas de solucinarlo, aunque deberías poner tu código para aconsejarte según la forma en que tú lo haces.
Responder Con Cita
  #3  
Antiguo 07-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Melissa_12,

Cita:
Empezado por Melissa_12
Tengo una ventana en la cual me conecto a una base de datos, una vez que he realizado la conexion puedo ver la ventana principal de mi aplicacion, pero si muevo la ventana con el mouse puedo ver la ventana de la conexion detras, o sea la ventana que se supone que se cierre, he probado con destruirla pero me da error, no se que hacer porque esa ventana es obligatoria
Revisa este link:
Espero sea útil

Nelson.
Responder Con Cita
  #4  
Antiguo 12-01-2013
Melissa_12 Melissa_12 is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 44
Poder: 0
Melissa_12 Va por buen camino
Hola, pues me he demorado un poco en responder pero he probado el enlace que me ha dicho Nelson y no se muy bien donde poner el codigo que viene. O sea, ya he puesto la funcion para poner la forma que quiero como forma principal pero desde donde debo llamar el procedimiento?.

Por ejemplo: tengo un formulario donde el usuario se autentica, si la contrasenna y el usuario son correctos pasa al Form1, pero el formulario de autenticacion sigue quedando detras del Form1. Llame al procedimiento en el boton de Aceptar para validar el usuario y la contraseña, pero cuando voy a cerrar el Form1 me da el siguiente error:
"cannot change visible in onshow or onhide" y no tengo la menor idea de que pueda se. Muchas Gracias.
Responder Con Cita
  #5  
Antiguo 12-01-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Melissa_12.

Si el form es un inicio de seción a la aplicación, revisa estos enlaces:

Si se trata de una verificación para permitir o negar el ingreso a determinada acción u otro formulario, podes hacer:

Formulario login:
Código Delphi [-]
...
var
  frmLogin: TfrmLogin;

implementation 

(* Aquí declaro las variables Nombre y Password como ejemplo.
   En tu caso, supongo, obtendras los datos de un archivo *)
var
  Nombre  : string = 'Nombre';
  Password: string = 'Password';

procedure TfrmLogin.FormCreate(Sender: TObject);
begin
  BitBtnAceptar.ModalResult  := mrOK;
  BitBtnCancelar.ModalResult := mrAbort;
  EditPwd.PasswordChar:= '*' //(si no deseas mostrar lo que escribe)
end;

procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if (EditName.Text <> Nombre)or(EditPwd.Text <> Password) then
    ModalResult:= mrAbort;
  Action:= caFree
end;

procedure TfrmLogin.FormDestroy(Sender: TObject);
begin
  frmLogin:= nil;
end;
end.

Formulario que llama previamente a frmLogin para permitir (o no) el acceso a determinada acción:
Código Delphi [-]
procedure TfrmMain.ButtonAccedeClick(Sender: TObject);
begin
  frmLogin:= TfrmLogin.Create(nil);
  if frmLogin.ShowModal = mrOk then
    ShowMessage('Ingresa')  // En tu caso abrir el otro form
  else
    ShowMessage('No ingresa'); 
end;
Tenes que quitar a frmLogin de: Project -> Options -> Forms -> Auto-create forms.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 12-01-2013 a las 21:17:33.
Responder Con Cita
  #6  
Antiguo 13-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Melissa_12,

Cita:
Empezado por Melissa_12
He probado el enlace que me ha dicho Nelson y no se muy bien donde poner el código que viene. O sea, ya he puesto la función para poner la forma que quiero como forma principal pero desde donde debo llamar el procedimiento?
En el caso particular de que el Form de acceso de tu aplicación sea el MainForm, puedes una vez validado y aceptado el acceso del usuario al sistema, colocar el siguiente código antes de llamar a la primera pantalla de tu aplicación (Se asume que FormLogin es el MainForm):
Código Delphi [-]
// Código de ejemplo del Formulario FormLogin:

// Cambia el formulario principal en Runtime.
procedure SetAsMainForm(aForm:TForm);
var
  P : Pointer;
begin
  // Dirección del Formulario Principal
  P := @Application.Mainform;
  // Cambia la Dirección del Formulario Principal
  Pointer(P^) := aForm;
end;

// Valida el acceso a la aplicación
procedure ValidateLogin(UserName, PassWord : String);
begin
   
   // Ejecutas el código de validación de acceso de tu aplicación.

   // Si el acceso fue valido ejecutas el código siguiente:

   // Establece FormApp con FormMain
   SetAsMainForm(FormApp);
  
   // Muestra FormApp
   FormApp.Show;
  
   // Cierra FormLogin
   FormLogin.Close;

end;
El código anterior establece a FormApp como formulario principal en vez de FormLogin y cierra el formulario de login.

Una forma mas estándar de usar un formulario de login es la siguiente:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin

   Form2 := TForm2.Create(nil);
   Form2.Visible := False;
   Form2.BorderStyle := bsDialog;

   if Form2.ShowModal = mrOk then
   begin
      Form1.BringToFront;
      Form2.Release;
   end
   else
      Application.Terminate;
  
end;
El código anterior llama en el evento OnCreate de Form1 al formulario de login Form2 el cual valida el acceso a la aplicación. Form2 no se encuentra configurado en: Project -> Options -> Forms -> Auto-create forms y por ser de tipo Modal, Form1 no se visualizara hasta que el acceso sea valido, caso contrario finalizara la aplicación.

Te anexo un ejemplo de login usando una aplicación MDI, pero la lógica es la misma para aplicaciones SDI. El ejemplo esta disponible en el link: http://terawiki.clubdelphi.com/Delph...load=Login.rar

El ejemplo de cambiar el formulario principal del Mensaje 3 esta disponible en el link: http://www.clubdelphi.com/foros/atta...7&d=1353126375

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 13-01-2013 a las 05:05:53.
Responder Con Cita
  #7  
Antiguo 25-01-2013
Melissa_12 Melissa_12 is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 44
Poder: 0
Melissa_12 Va por buen camino
Hola, disculpen por demorarme tanto en responder pero es que pense que ya habia resuelto el problema, resulta que hoy dando una ultima hojeada vi que la ventana principal sigue haciendo lo mismo.
Voy a dar una idea general:
Tengo una ventana de conexion a mi servidor, esta ventana solo se mostrara cuando la conexion no se haya podido efectuar para que el usuario introduzca los datos correctamente, de lo contrario esta venatana sera transparente al usuario. Cuando el usuario no se ha podido conectar con el servidor, para que la ventana no se quede detras del login(que es la proxima ventana que muestro si logro establecer la conexion) hago esto:

Código Delphi [-]
   Login := TForm1.Create(Self);
   SetAsMainForm(Login);
   Form25.Close;
   Login.Showmodal;

Entonces se muestra la ventana de Login correctamente, cuando introduzco el usuario y la contraseña en caso que esten correctos:

Código Delphi [-]
   Main := TForm2.Create(Self);
   SetAsMainForm(Main);
   Main.Show;
   Form1.Free;

Y se queda la ventana del Login detras de la principal, ya he probado con Close pero me da error, he probado con Release y tambien, ya no se que hacer. Muchas Gracias por su tiempo.
Responder Con Cita
  #8  
Antiguo 25-01-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Melissa_12 Ver Mensaje
Voy a dar una idea general:
Tengo una ventana de conexion a mi servidor, esta ventana solo se mostrara cuando la conexion no se haya podido efectuar para que el usuario introduzca los datos correctamente, de lo contrario esta venatana sera transparente al usuario.
...
Y se queda la ventana del Login detras de la principal, ya he probado con Close pero me da error, he probado con Release y tambien, ya no se que hacer. Muchas Gracias por su tiempo.
Hola Melisa_12.

¿ Ya Intentaste con el código sugerido en el mensaje #5 ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 25-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Melissa_12,

Cita:
Empezado por Melissa_12
Y se queda la ventana del Login detras de la principal, ya he probado con Close pero me da error...
Solo debes adicionar el Cierre del Formulario Login a tu código:
Código Delphi [-]
   Main := TForm2.Create(Self);
   SetAsMainForm(Main);
   Main.Show;
   Login.Close;
Te sugiero revisar el Msg #6, en el hay mayor detalle a todo lo comentado y ejemplos que puedes descargar y analizar.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 25-01-2013 a las 18:18:54.
Responder Con Cita
  #10  
Antiguo 25-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Melissa_12,

Nota Adicional al Msg #9:

No puedes efectuar Operaciones con los métodos Close o Release sobre un Formulario que no esta instanciado, en este caso Form1 según tu código del Msg #7, esto provocara un mensaje de Access violation, no obstante el método Free si puede ser utilizado, es por ello que tu código anterior no da error pero tampoco libera el formulario de acceso dado que no es Form1 es Login.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 25-01-2013 a las 19:49:52.
Responder Con Cita
  #11  
Antiguo 28-01-2013
Melissa_12 Melissa_12 is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 44
Poder: 0
Melissa_12 Va por buen camino
Hola Nelson, muchas gracias por el tiempo que te tomas tratando de ayudarme. Pero es que no logro dar con la solucion.
No entiendo por ejemplo si en el primer formulario que tengo(que es la conexion con la base de datos) se cierra correctamente para dar paso a la de autenticar con el metodo SetAsMainForm, despues cuando quiero que el formulario principal sea el formulario Main y le paso el mismo metodo no lo ve como principal y no me deja cerrar el del login, de verdad que no se.
He visto los ejemplos que me has recomendado pero no me sirven porque es que tengo un primer formulario como ya he dicho para establecer la conexion en caso que los datos sean erroneos. Muchas gracias por la ayuda.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ocultar exe. _F3R_ API de Windows 3 30-08-2010 08:50:54
Ventanas,Ventanas Mdi=Dolor de cabeza ? IVAND Varios 7 08-05-2006 17:27:24
Ocultar Nathan Varios 2 11-03-2004 17:32:14
Ocultar ventanas en el escritorio roman API de Windows 5 11-02-2004 07:57:44
ocultar botones67 Varios 3 04-10-2003 15:35:37


La franja horaria es GMT +2. Ahora son las 14:01:57.


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