Ver Mensaje Individual
  #4  
Antiguo 14-02-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
soyhugo (yo no, él )

Tu descripción dl problema es algo enredada. No tengo en claro de cuántos formularios estamos hablando; ¿de dos? el de acceso y el principal; ¿o de tres? El de acceso, el principal y uno aparte que se crea después del acceso?

De cualquier forma aquí te van unas ideas que quizá te sirvan.

En primer lugar mencionas que no quieres cerrar el formulario de acceso porque tienes controles que debes usar en todo momento. Aquí hay un error de diseño; por lo general un formulario de acceso tiene una única función en la vida: verificar que el nombre de usuario y contraseña sean correctos. Todo lo demás sale sobrando. Si necesitas controles, posiblemente de bases de datos u otros que necesites durante toda la ejecución entonces colócalos en otro lado, por ejemplo en un data module y deja en el de acceso exclusivamente lo necesario para la verificación.

A grandes rasgos hay dos metodologías para los formularios de acceso y cuál de ellas usar depende en mucho de gustos.

Una es la de presentar el formulario principal y sobre él el de acceso. Si el acceso es incorrecto se cierra todo.

La otra es presentar el formulario de acceso solito al mero comienzo de la aplicación. Si el acceso es correcto se muestra el principal; de lo contrario se termina la ejecución.

Yo opto por la segunda opción (¡vaya redundancia!) porque sigo la siguiente (¡otra vez!) filosofía:

si los datos son incorrectos, ¿para qué me molesto en crear todos los demas formularios y controles?.

Para iniciar con el formulario de acceso es necesario alterar la forma usual en que Delphi maneja la creación de formularios ya que si pones el de acceso como principal, en cuanto lo cierres se cierra también la aplicación.

Vamos a suponer que TVentanaAcceso es la clase del formulario de acceso y que TVentanaPrincipal el del principal. Modifica el archivo .dpr de tu proyecto de manera que se vea similar a esto:

Código:
var
  DatosOk: Boolean;

begin
  { Presentas la ventana de acceso }
  VentanaAcceso := TVentanaAcceso.Create(nil);
  DatosOk := VentanaAcceso.ShowModal = ID_OK;
  VentanaAcceso.Free;

  { Si son correctos procedes como siempre }
  if DatosOk then
  begin
    Application.Initialize;
    
    // Opcional 
    Application.CreateForm(TModulaDatos, ModuloDatos);

    // Formulario primcipal 
    Application.CreateForm(TVentanaPrincipal, VentanaPrincipal);

    {
       Otros formularios aquí
    }

    Application.Run;
  end;
end.
Como verás, si los datos no son correctos el flujo de la aplicación te lleva directo el end final y se termina.

Si la ventana de acceso necesita cotejar los datos con la base de datos podrías colocar la creación del módulo de datos antes. Yo evito esto ya que puede llevarse un tiempo dependiendo de qué tantos controles tengas y lo ideal es que el formulario de acceso se presente de inmediato. Lo que hago es colocar controles independientes (un TTable y un TDataSource a lo mucho) en el formulario de acceso exclusivamente para la verificación.

Bueno, aunque no sea exactamente lo que quieras espero que puedas sacra ideas de lo anterior.

// Saludos
Responder Con Cita