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 21-12-2015
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Decidir que Form abre primero en una aplicación

Buenas noches, estoy realizando una aplicación en la que me abre un form de "Apertura de Caja" en la que coloco el monto inicial de la caja, luego al hacer clic en aceptar me abre el form principal en donde tengo el menú y esas cosas...

El form de "Apertura de caja" debe salir solo al inicio del día, es decir una vez que el usuario haya introducido la cantidad, el cliente puede cerrar la aplicación y volver a abrirla y ya no debería salir mas el Form "Apertura de Caja" sino pasar directamente al Form principal...


¿Hay alguna forma de hacerlo?
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #2  
Antiguo 21-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
El framework VCL necesita:

1. Se setee el "MainForm" de la aplicacion. Este debe ser una variable global definida en la seccion interface de la unidad del form
2. El form se inicializa no con su constructor Create, sino mediante Application.CreateForm
3. Cuando el MainForm es cerrado, la aplicacion termina

Esta implementacion no la podes cambiar

Yo creo que la opcion mas sana es, dejar el que tenes como "menu principal" como MainForm; luego realizar la validacion "si no introdujo la cantidad para hoy" --> crear y mostrar form caja, caso contrario, seguir con el principal

Ejemplo trivial

Código Delphi [-]
function IntrodujoCantidad: Boolean;
begin
  Result := False;
end;

var
  FormCaja: TForm3;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  if not IntrodujoCantidad then
  begin
    FormCaja := TForm3.Create(NIL);
    try
      FormCaja.ShowModal;
    finally
      FormCaja.Free;
    end;
  end;

  Application.Run;
end.
Responder Con Cita
  #3  
Antiguo 21-12-2015
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 ZiriusB.
Cita:
Empezado por ZiriusB Ver Mensaje
...
El form de "Apertura de caja" debe salir solo al inicio del día, es decir una vez que el usuario haya introducido la cantidad, el cliente puede cerrar la aplicación y volver a abrirla y ya no debería salir mas el Form "Apertura de Caja" sino pasar directamente al Form principal...
Para que se ejecute una vez por día (la primera vez que se abra la aplicación) podes hacer:
Código Delphi [-]
program Project1;

uses
  Forms, Windows, SysUtils, Registry,
  Unit1 in 'Unit1.pas' {frmMain},
  Unit2 in 'Unit2.pas' {frmDailyCashBox};

{$R *.res}

function isSetDailyCashBox: Boolean;
const
  KNAME = 'SoftWare\Your_App_Name\DailyCashBox';
  VNAME = 'LastUpdate';
var
  rg: TRegistry;
  dt: TDateTime;
begin
  rg         := TRegistry.Create;
  rg.RootKey := HKEY_CURRENT_USER;
  dt         := 0;
  rg.OpenKey(KNAME, True);
  try   
    if not rg.ValueExists(VNAME) then
      rg.WriteDate(VNAME, dt);
    dt     := rg.ReadDate(VNAME);
    Result := dt = Date;
    rg.WriteDate(VNAME, Date);
  finally
    rg.CloseKey;
  end;
end;

begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.ShowMainForm := False;

  if not isSetDailyCashBox then
  begin
    frmDailyCashBox := TfrmDailyCashBox.Create(nil);
    try
      frmDailyCashBox.ShowModal;
    finally
      frmDailyCashBox.Free;
    end;
  end;

  Application.ShowMainForm := True;
  Application.Run;
end.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 21-12-2015
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola ZiriusB.


Código Delphi [-]
program Project1;

uses
  Forms, Windows, SysUtils, Registry,
  Unit1 in 'Unit1.pas' {frmMain},
  Unit2 in 'Unit2.pas' {frmDailyCashBox};

{$R *.res}

function isSetDailyCashBox: Boolean;
const
  KNAME = 'SoftWare\Your_App_Name\DailyCashBox';
  VNAME = 'LastUpdate';
var
  rg: TRegistry;
  dt: TDateTime;
begin
  rg         := TRegistry.Create;
  rg.RootKey := HKEY_CURRENT_USER;
  dt         := 0;
  rg.OpenKey(KNAME, True);
  try   
    if not rg.ValueExists(VNAME) then
      rg.WriteDate(VNAME, dt);
    dt     := rg.ReadDate(VNAME);
    Result := dt = Date;
    rg.WriteDate(VNAME, Date);
  finally
    rg.CloseKey;
  end;
end;

begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.ShowMainForm := False;

  if not isSetDailyCashBox then
  begin
    frmDailyCashBox := TfrmDailyCashBox.Create(nil);
    try
      frmDailyCashBox.ShowModal;
    finally
      frmDailyCashBox.Free;
    end;
  end;

  Application.ShowMainForm := True;
  Application.Run;
end.

Saludos
Buenis dias, gracias por la respuesta, dos preguntas:

1.- El registro de validacion ¿donde se guarda? es decir, al abrir el programa luego de abrirlo por primera vez, donde revisa el sistema si ya se ha introducido el valor en dailycashBox...

2.- Tenia el Form de "Apertura de Caja" como principal, debo establecer el "Form1" como principal con esta funcion? (Project>>options>>forms)
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."

Última edición por ZiriusB fecha: 21-12-2015 a las 17:36:51.
Responder Con Cita
  #5  
Antiguo 21-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por ZiriusB Ver Mensaje
1.- El registro de validacion ¿donde se guarda? es decir, al abrir el programa luego de abrirlo por primera vez, donde revisa el sistema si ya se ha introducido el valor en dailycashBox...

2.- Tenia el Form de "Apertura de Caja" como principal, debo establecer el "Form1" como principal con esta funcion? (Project>>options>>forms)
1 - En realidad esa misma pregunta te la deberiamos hacer a vos: En algun lugar guardas la informacion? Usas alguna base de datos?


2 - Si
Responder Con Cita
  #6  
Antiguo 21-12-2015
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 ZiriusB Ver Mensaje
1.- El registro de validacion ¿donde se guarda? es decir, al abrir el programa luego de abrirlo por primera vez, donde revisa el sistema si ya se ha introducido el valor en dailycashBox...
Si te referis donde se guarda la última fecha de ajuste de caja en el ejemplo, es en el registro de Windows. Esta se coteja con la actual del sistema y de ser diferente indíca que el formulario inicialización no fué abierto en la fecha.

El ejemplo no contempla si fué efectiva y correctamente inicializada la caja. De esta taréa creo que debería encargarse frmDailyCashBox y desconozco la lógica que tenes pensada para ese punto, por ejemplo ignoro que es el "registro de validación".
El lugar de guardado podría ser en el registro de Windows, en tu base de datos, un archivo, etc., depende de como tengas pensado implementarlo.

Cita:
Empezado por ZiriusB Ver Mensaje
2.- Tenia el Form de "Apertura de Caja" como principal, debo establecer el "Form1" como principal con esta funcion? (Project>>options>>forms)
Si. Tu formulario principal será el primero que se cree, es decir el que figura encabezando la lista en la ventana Project->Options->Forms->Auto-create forms.
O, mirando el código del proyecto, es el primero en crearse; ejemplos:
Código Delphi [-]
...
begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain); // frmMain es el principal
Código Delphi [-]
...
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1); // Form1 es el principal

Saludos

Edito: No había visto la respuesta de Agustín mientras redactaba este mensaje pero coincido con él.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 21-12-2015 a las 20:29:08.
Responder Con Cita
  #7  
Antiguo 21-12-2015
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
1 - En realidad esa misma pregunta te la deberiamos hacer a vos: En algun lugar guardas la informacion? Usas alguna base de datos?


2 - Si
Uso una base de datos, donde guardo el monto form "apertura de caja", ese monto que guardo es el que quiero validar a la hora de abrir el form "apertura de caja" o el "Form Principal"


Cita:
Empezado por ecfisa Ver Mensaje
Si te referis donde se guarda la última fecha de ajuste de caja en el ejemplo, es en el registro de Windows. Esta se coteja con la actual del sistema y de ser diferente indíca que el formulario inicialización no fué abierto en la fecha.

El ejemplo no contempla si fué efectiva y correctamente inicializada. De esta taréa creo que debería encargarse frmDailyCashBox y desconozco la lógica que tenes pensada para ese punto, por ejemplo ignoro que es el "registro de validación".
El lugar de guardado podría ser en el registro de Windows, en tu base de datos, un archivo, etc., depende de como tengas pensado implementarlo.


Si. Tu formulario principal será el primero que se cree, es decir el que figura encabezando la lista en la ventana Project->Options->Forms->Auto-create forms.
O, mirando el código del proyecto, es el primero en crearse; ejemplos:
Código Delphi [-]... begin Application.Initialize; Application.CreateForm(TfrmMain, frmMain); // frmMain es el principal

Código Delphi [-]... begin Application.Initialize; Application.CreateForm(TForm1, Form1); // Form1 es el principal


Saludos

Edito: No había visto la respuesta de Agustín mientras redactaba este mensaje pero coincido con él.
Con "registro de validacion" me referia a lo que veo que en la funcion se estaba guardando. fue solo por ponerle un nombre, jejejeje.
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #8  
Antiguo 21-12-2015
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 ZiriusB.
Cita:
Empezado por ZiriusB Ver Mensaje
Uso una base de datos, donde guardo el monto form "apertura de caja", ese monto que guardo es el que quiero validar a la hora de abrir el form "apertura de caja" o el "Form Principal"
¿ Contra que valor debe validarse ese monto y donde se encuentra almacenado ?


Por otro lado te soy sincero, veo muy inseguro que el primer usuario en ejecutar la aplicación pueda modificar el valor de la caja... ¿ No debería realizarse esa acción de forma automática ? (Esto dicho desde la ignorancia que tengo sobre los detalles de la situación)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 21-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por ZiriusB Ver Mensaje
Uso una base de datos, donde guardo el monto form "apertura de caja", ese monto que guardo es el que quiero validar a la hora de abrir el form "apertura de caja" o el "Form Principal"
Nosotros te mostramos un ejemplo, el "esqueleto" del codigo que hace lo que preguntabas: "Si se da X, antes de mostrar principal, mostrar otro form; luego mostrar form principal"

Tenes que implementar "X": que es la funcion booleana del esqueleto

No sabemos como funciona la logica de negocio ni como se valida la cantidad.

Tampoco conocemos la estructura de la tabla en donde estas guardando la informacion

Por ejemplo, podrias tener un campo fecha y validar contra esa fecha
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
No abre form con F12 capo979 Varios 3 20-08-2017 03:57:42
Form abre automaticamente al crearlo. F3niX Varios 3 24-06-2015 03:21:58
aplicacion no abre incluye fastreport calogero Impresión 2 16-11-2009 20:07:15
Efectos en el form que abre un ShowModal mam1986 Varios 8 04-08-2008 09:50:47
Ejecutar primero otra aplicacion. atani123 API de Windows 3 10-07-2006 15:22:22


La franja horaria es GMT +2. Ahora son las 14:27:18.


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