Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ventanas MDIChild y Normal (https://www.clubdelphi.com/foros/showthread.php?t=18507)

brandolin 14-02-2005 20:08:41

Ventanas MDIChild y Normal
 
Hola a todos los foristas, estoy teniendo un problema y creo que es conceptual, a ver si me puedo explicar bien para que me ayuden.

Tengo un form de consulta de artículos, el cual es MDIChild. Dentro de la aplicación necesito que se llame de esta forma es decir como fsMDIChild y en otras necesito que se llama de la corma fsNormal. Para eso y viendo que esa propiedad (formstyle) no se puede cambiar en tiempo de ejecución luego de creado el form, me he construido un nuevo constructor para el susodicho form que lo que hace es cambiar dichas propiedades.

El código es el siguiente:

Código:

constructor TfrmConsArticulos.ShowSeleccion(Sender: TObject; var pCodArt: Integer);
begin
    inherited create(nil);
    FormStyle := fsNormal;
    Visible := False;
    InicializarEstructuras;  //Ejecuta una consulta en las Base de Datos
    ShowModal;                //Muestra y espera a que se presione el Boton Seleccionado

    if CodigoSeleccionado //Devuelve el código del articulo.
    then pCodArt := vCodArticulo;
end;

Funciona de maravillas, el problema surge con el evento onFormShow. Resulta que este onFormShow se ejecuta dos veces, una cuando se hace el ShowModal y otra cuando se termina de ejecutar este constructor. ¿Cuál es el problema? Es que en el evento onFormShow especifico algunas consultas que se debe hacer cuando el form se ejecuta como MDIChild y no cuando se ejecuta como Normal. Esto hace que la base de datos se lea dos veces, etc, etc.

Espero haber sido claro al presentar el problema. ¿Alguna sigurencia?
Gracias por todo desde ya.

roman 15-02-2005 01:37:17

Ciertamente no puedes cambiar el estilo de fsMdiChild a fsNormal pero sí puedes hacerlo alrevés.

Deja el formulario como fsNormal en el diseño y simplemente cámbiale el estilo a fsMdiChild cuando requieras mostrarla como MDI. No necesitas un nuevo constructor.

// Saludos

brandolin 15-02-2005 04:29:34

Gracias por la respuesta, es cierto, no se me habia ocurrido pensar el problema alreves. Te comento que pude solucionarlo de otro modo... simplemente cree otro constructor por el cual se setean los parametros para el fsNormal y elimine todo lo que estaba en el formshow... asi las cosas se ejecutan una sola vez.

Gracias por todo.


La franja horaria es GMT +2. Ahora son las 20:33:56.

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