Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como puedo llamar una pantalla desde un boton (https://www.clubdelphi.com/foros/showthread.php?t=64373)

Luisjo 29-03-2009 16:57:53

Como puedo llamar una pantalla desde un boton
 
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

Código Delphi [-]
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 puedes visitar el FTP 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:

Código Delphi [-]
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.

Código Delphi [-]
 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

Cita:

Empezado por Caro (Mensaje 343172)
También puedes utilizar, paar crear tu formulario.

Código Delphi [-] 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

Cita:

Empezado por Cheerpipe (Mensaje 343184)
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.

Código Delphi [-]
//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

Cita:

Empezado por paladincubano (Mensaje 343503)
"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

Cita:

Empezado por paladincubano (Mensaje 343514)
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:

Código Delphi [-]
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

Cita:

Empezado por paladincubano (Mensaje 343514)
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:

Código Delphi [-]
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

Cita:

Empezado por paladincubano (Mensaje 343523)
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


La franja horaria es GMT +2. Ahora son las 23:20:00.

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