PDA

Ver la Versión Completa : Como puedo llamar una pantalla desde un boton


Luisjo
29-03-2009, 16:57:53
Hola

Soy nuevo en el foro y en el arte de la programacion delphi, estoy haciendo un pequeno programita y quiero saber como puedo llamar una pantalla desde un boton desde la pantalla principal. Otro cosa si me pueden ayudar donde puede conseguir algunos manuales para principiente en programacion delphi, tengo la version 7.

Gracias

marcoszorrilla
29-03-2009, 17:24:46
Application.CreateForm(TfMiForm, fMiform);
fMiForm.ShowModal;

Se entiende que el formulario lo hemos pasado a la parte de no disponible, para que no consuma recursos mientras no se utilice.


Para los manuales (http://www.terawiki.clubdelphi.com/Delphi-Win32/Manuales/)puedes visitar el FTP (http://www.terawiki.clubdelphi.com/Delphi-Win32/Manuales/)del ClubDelphi.


Un Saludo.

Nota de Moderación:Solamente es conveniente realizar una pregunta por hilo abierto.

Cheerpipe
29-03-2009, 23:13:11
Si es modal tambien puedes usar:


with TfMiForm.Create(Self) do
try
Showmodal;
finally
Free;
end;

Caro
30-03-2009, 16:24:10
También puedes utilizar, paar crear tu formulario.


FMiForm := TFMiForm.Create(Self);
Try
FMiForm.ShowModal;
Finally
Free;
end;

//Si no es modal
FMiForm.Show;

//Y en el evento OnClose de tu formulario
Action := caFree; //Para liberar


No te olvides quitar el formulario del AutoCreate.

Saluditos

Cheerpipe
30-03-2009, 17:31:07
También puedes utilizar, paar crear tu formulario.

Código Delphi [-] (http://www.clubdelphi.com/foros/#) FMiForm := TFMiForm.Create(Self); Try FMiForm.ShowModal; Finally Free; end; //Si no es modal FMiForm.Show; //Y en el evento OnClose de tu formulario Action := caFree; //Para liberar


No te olvides quitar el formulario del AutoCreate.

Saluditos


Otro detalle, si no es modal, es mejor no usar un try finally, ya que el free contenido en el bloque finally serallamado inmediatamente luego de la ejecucion del form, destrullendolo al instante de ser creado.

Caro
30-03-2009, 17:40:47
Otro detalle, si no es modal, es mejor no usar un try finally, ya que el free contenido en el bloque finally serallamado inmediatamente luego de la ejecucion del form, destrullendolo al instante de ser creado.

Estoy de acuerdo, por eso le puse el codigo sin el Try Finally ni el Free, la liberación estaría en el OnClose del formulario al cual se ha llamado con el Show.


//Si no es modal
FMiForm.Show;

//Y en el evento OnClose de tu formulario
Action := caFree; //Para liberar

Saluditos

paladincubano
01-04-2009, 16:15:45
Hola, he visto los comentarios y me surge una duda.

"Mi" filosofia en la programacion siempre ha sido que los forms se creen automaticamente y yo los llamo cada vez que haga falta.

Veo que dicen que es mejor crearlas y luego liberarlas, cuando usas muchas veces una forma, es ventajoso usar este metodo?

O es mejor SIEMPRE usar el metodo de create-free???
Cual es mejor y que ventajas tiene?

gracias.

Caro
01-04-2009, 16:33:30
"Mi" filosofia en la programacion siempre ha sido que los forms se creen automaticamente y yo los llamo cada vez que haga falta.

Veo que dicen que es mejor crearlas y luego liberarlas, cuando usas muchas veces una forma, es ventajoso usar este metodo?

O es mejor SIEMPRE usar el metodo de create-free???
Cual es mejor y que ventajas tiene?


Hola, si los tienes en el AutoCreate, te crea todos tus formularios al inico de tu aplicación, cuando son pocos casi no se siente, pero cuando la cosa aumenta se pone muy lento, si lo quitas del autoCreate, al iniciarse tu app es mas rapido ya que se crean solo los necesarios. El tener todos los formularios creados te consume recursos ademas que es lento al inico, por eso que mejor los crees y los liberes solo cuando los necesites, ahora si es un formulario que lo vas a usar muy seguido, entonces puedes dejarlo en el AutoCreate, un caso puede ser el DataModule, yo tengo en el autoCreaete 2 o 3 maximo. Porque liberar, si los creas tu podrías crear muchas instancias de ese mismo formulario, pero también podrías controlar que el formalario no este creado, para evitarnos eso, mejor creamos y liberamos al terminar de usarlo.

Saluditos

paladincubano
01-04-2009, 17:00:03
Bueno he quitado para probar unos de mis formas del autocreate.

Pero me da error.
Lo que hice fue en el evento del boton.

FRutas.Create(Self);
FRutas.ShowModal;

Y en el evento del close form de FRutas puse Action:=caFree;

Pero me da un error de "Access violation..."
En ese form tengo normalmente componentes de bases de datos (DBEdit y DBMemo) enlazados a un DataSource y estan activos en tiempo de diseño.

Cual es el problema?

Edito:
Parece mentira que no se crear componentes:
Debia crearlo
FRutas := TFRutas.Create(Self)

problema resuelto. gracias

Cheerpipe
01-04-2009, 17:08:25
Bueno he quitado para probar unos de mis formas del autocreate.

Pero me da error.
Lo que hice fue en el evento del boton.

FRutas.Create(Self);
FRutas.ShowModal;

Y en el evento del close form de FRutas puse Action:=caFree;

Pero me da un error de "Access violation..."
En ese form tengo normalmente componentes de bases de datos (DBEdit y DBMemo) enlazados a un DataSource y estan activos en tiempo de diseño.

Cual es el problema?

Edito:
Parece mentira que no se crear componentes:
Debia crearlo
FRutas := TFRutas.Create(Self)

problema resuelto. gracias

El codigo correcto es:

FRutas := TFRutas.Create(Self);
FRutas.ShowModal;

paladincubano
01-04-2009, 17:09:39
Si gracias ya me habia percatado y habia editado el mensaje.
Bien se ve que estoy desde las 8 aqui, ya necesito irme a casa a jugar un poco COD5

gracias por todo.

Caro
01-04-2009, 17:12:44
Bueno he quitado para probar unos de mis formas del autocreate.

Pero me da error.
Lo que hice fue en el evento del boton.

FRutas.Create(Self);
FRutas.ShowModal;

Y en el evento del close form de FRutas puse Action:=caFree;

Pero me da un error de "Access violation..."
En ese form tengo normalmente componentes de bases de datos (DBEdit y DBMemo) enlazados a un DataSource y estan activos en tiempo de diseño.

Cual es el problema?

Hola, lo estas abriendo de forma Modal, hazlo de esta forma:


FRutas := TFRutas.Create(Self);
Try
FRutas.ShowModal;
Finally
FRutas.Free;
End;


Y no utilices el evento OnClose de tu formulario (CaFree), si lo utilizas entonces no tendrías que hacer el Free despues del ShowModal, pero a veces necesitas recuperar algunos valores de tu formulario despues del ShowModal, entonces mejor que lo liberes una ves que termines de recuperar en el Finally.

Cuando no es Modal, osea la llamada es con el Show; necesitas el Cafree en el OnClose ya que si liberas despues del Show, veras que tu formulario se crea y liberar ese rato, osea ni lo veras.

Saluditos

paladincubano
01-04-2009, 17:35:54
Gracias Caro te entiendo.
Muchas veces recupero informacion cuando cierro las formas.
Pero en este caso no he usado ninguna informacion.

Solo que la forma la cierro cuando oprimo un boton
Aceptar ----> ModalResult := mrOk;
o
Cancelar -----> ModalResult := mrCancel;

Porque yo la forma la mando a abrir asi:

if FRutas.ShowModal=mrOk then .... else ....

Supongo que con el Action=caFree me retorne el verdadero valor del ModalResult no???

Caro
01-04-2009, 17:51:12
Solo que la forma la cierro cuando oprimo un boton
Aceptar ----> ModalResult := mrOk;
o
Cancelar -----> ModalResult := mrCancel;

Porque yo la forma la mando a abrir asi:

if FRutas.ShowModal=mrOk then .... else ....

Supongo que con el Action=caFree me retorne el verdadero valor del ModalResult no???

Claro, te va a retornar el verdadero valor del ModalResult, ya que primero se asigna el valor y despues recien realiza el CaFree.

Saluditos