PDA

Ver la Versión Completa : Error Al Crear Varias Veces El Mismo Form


ManuelPerez
18-09-2007, 19:35:40
Hola : Soy Nuevo En Esto Y Necesito Que Me Ayuden Con Este Problema : Tengo Desarrollado Un Proyecto De Facturacion El Cual Desde Un Menu En La Ventana Principal Creo Y Abro La Factura De Venta Tantas Veces Como Me Haga Falta . El Problema Es Cuando Al Cerrar Por Ejemplo La Primer Factura Y Despues Al Trabajar O Al Cerrar Las Otras Facturas Me Tiran Un Error.
El Tema Es Saber Como Clonar Form Iguales , Para Poder Trabajar Tranquilamente .

Gracias...

eduarcol
18-09-2007, 19:39:42
El Tema Es Saber Como Clonar Form Iguales , Para Poder Trabajar Tranquilamente .

Gracias...

Hola manuel, el tema aqui seria que nos dijeras que error te da y muestres el codigo como se hace lee la guia de estilo para que sepas como preguntar :D:D

ManuelPerez
18-09-2007, 19:56:45
Gracias por tu repuesta rápida:
tengo un proyecto de Gestion Comercial , en la Ventana madre(fsMDIForm) tengo un menu comun , del cual al hacer click en una de los items creo el formulario de facturacion (fsMDIForm).
Yo lo creo de la siguiente forma:


Application.CreateForm(TFRMFacturacion,FRMFacturacion);
FRMFacturacion.Show;


hasta ahi esta todo bien..Pero al hacer varias veces click sobre el menu por logica creo varias facturas " que es lo que quiero hacer" , el problema surge cuando cierrar por segunda vez esta facturas creadas, y es alli cuando me tira un error que es el siguiente :


Proyect PYMESOFT.EXE raised exception class EAccessViolation with 'Access Violation at addres 0047db89 in module 'PYMESOFT.EXE'.read af addres....


Lo que yo quiero hacer es poder trabajar con varias facturas a la vez, es decir poder abrir varias facturas a la vez.
gracias

eduarcol
18-09-2007, 20:02:00
el acces violation da porq quieres acceder a un objeto de memoria que aun no ha sido creado, o que como creo te esta sucediendo, ya fue destruido, asi que analiza tu rutina de cierre y verifica que no estes referenciando algo que no se crea

ManuelPerez
18-09-2007, 20:06:15
:confused:

Como Hago para abrir el mismo form varias veces sin tener este problema.
En Delphi se puede????

eduarcol
18-09-2007, 20:15:30
si se puede pero de momento me intriga porq dos fsmdifor, cuando el segundo debe ser fsmdichild

ManuelPerez
18-09-2007, 21:14:05
El Proyecto principal es fsMDIForm las facturas son fsMDIChild .
Nadie sabe como abrir el mismo form sin tener el error.:confused:
gracias

paldave
18-09-2007, 21:31:02
Si, no es tan complicado.
Primero en propiedades del proyecto pones que solo el Form Principal (el MDI) se cree automáticamente, los otros no.
Luego los vas creando desde código, como si se tratara de variables (lo digo así para que entiendas más claro, en realidad recuerda que son objetos), sería algo así:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit3, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var f:TForm3;
begin
f:=TForm3.Create(Application);
f.Show;
end;

end.
en este caso el MDIForm se llama Form1, ubicado con su Unit1 y el MDIChild se llama Form3, con su Unit3.
Observa que debes incluir Unit3 en Uses.
Si quieres que los MDIChild se cierren en vez de minimizarse al clickear el botón cerrar (como es lo predeterminado) asigna este código al evento OnClose del MDIChild:
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;