Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como abrir un form sin tenerlo en el uses? (https://www.clubdelphi.com/foros/showthread.php?t=87063)

socger 11-11-2014 12:56:18

¿Como abrir un form sin tenerlo en el uses?
 
Buenas, la idea es abrir desde un form1, un form2 y que este abriera un form3 pero sin tenerlo declarado en el uses.

Por supuesto tampoco están declarados como abiertos en el proyecto, si no que se irían abriendo conforme se fueran necesitando y luego cerrándose.

Gracias de antemano. Saludos

pacopenin 11-11-2014 14:03:17

Hola.

¿Sin tenerlo en el uses? Creo que no se puede. La única opción que se me ocurre es tenerlo en una DLL externa.

Saludos.

P.D. Por qué no quieres tenerlo en el uses? Es pura curiosidad.

mamcx 11-11-2014 14:14:37

Y porque quieres hacer eso?

socger 11-11-2014 14:49:21

1 Archivos Adjunto(s)
Porque he creado un formulario de filtros de registros común a cualquier módulo.

Su pantalla es esta imagen que adjunto
Archivo Adjunto 3051

Como veis al lado del concepto CAMPO (donde cambio el campo a elegir que lo he pasado en un TField), asociaría a cierto campo elegido el que fuera visible el bitBtn que hay al lado para que abriera un form que correspondería con otro módulo del que seleccionaría el campo id del registro que hubiera seleccionado, para así pasarlo al edit CONCEPTO.

Pero claro este módulo, ya es de por si llamado por ejemplo desde el form1. Form2 es el que os he mostrado y ahora si estuviera visible el bitBtn llamaría a otro form3, pero que podría ser diferente dependiendo de que tuviera que ir por ejemplo al mentenimiento de clientes, proveedores, articulos, etc.

Pero claro como quiero que este form2 sea genérico para diferentes proyectos, no quiero tener en el uses los TForm de cada proyecto. Si no que quiero crearlos en tiempo real (aunque ya se crearon en tiempo de diseño), llamarlos y después cerrarlos.

Bueno esa es la idea. Agradecería cualquier tipo de ayuda.
Saludos

engranaje 11-11-2014 15:10:05

A ver si te he entendido bien y si me explico:

Si a tu form2 le pasas como parametro el form3 y realmente el form2 no necesita saber nada del interior del form3 y solo quieres abrilo puedes pasarle como parametro al metodo que utilices del form2 un tform.
Asi en el uses del form1 deberias tener el form2 y el form3 pero al form2 del pasarias el form3 como parametro.
Si en el form2 no necesitas hacer nada que no se pueda hacer con un tform no es necesario que lo añadas al uses.

Algo asi:

Código Delphi [-]
procedure TForm3.mostrar(formulario: tform);
begin
  formulario.Show;
end;

Neftali [Germán.Estévez] 11-11-2014 18:30:03

Cita:

Empezado por socger (Mensaje 484458)
Buenas, la idea es abrir desde un form1, un form2 y que este abriera un form3 pero sin tenerlo declarado en el uses.
Por supuesto tampoco están declarados como abiertos en el proyecto, si no que se irían abriendo conforme se fueran necesitando y luego cerrándose.

La única forma de realizar eso es utilizar packages dinámicos en tu aplicación.
O DLL's, como han comentado.

mamcx 11-11-2014 19:06:19

Si entiendo lo que quieres, tienes un form de busqueda que quieres que sea generico. Lo unico que varia es el campo que buscas.

Seria el mismo caso que un diagolo como el MessageBox. Asi que no hay que hacer un form por cada campo, solo pasar los params a ese form, y crearle una funcion como:

Código Delphi [-]

function BuscarPorCampo(Nombre:String):

olbeup 11-11-2014 20:45:37

Hola SocGer,

Necesita incluir el uses para poder usarlo en cualquier otro formulario, si no lo incluyes no podrá utilizarlo ni ese ni ninguno, si lo que te preocupa es que cuando vayas a reutilizar el formulario genérico en otro Form se quede el anterior, eso no te tiene que preocupar ya que cuando destruyes el Form también se destruye lo de mas.

También te digo que un formulario lo puedes crear tantas veces como quieres, puedes crear un TForm cientos de veces dentro de un procedimiento o función, solo hay que cambiar el nombre de la variable.

Código Delphi [-]
....
var
  aForm: TFiltroForm;
  bForm: TFiltroForm;
begin
  aFrom := TFritroForm.Create(Self);
    aForm.Edit1.Text := 'bla, bla, bla';
    aFrom.ShowModal;
  bForm := TFiltroForm.Create(Self);
    bForm.Edit1.Text := 'blo, blo, blo';
    bForm.ShowModal;
end;
ambos representa al TFiltroForm pero el contenido de cada uno es distinto.

buscas esto o me he perdido yo :D

Un saludo.

engranaje 12-11-2014 08:38:15

Si yo entendí bien, la idea es un form genérico que se pueda utilizar desde cualquier proyecto y que dependiendo de desde donde se muestre tendrá botones que muestren distintos forms. Es decir si el formulario tiene tres botones, uno mostrar detalle del cliente,otro mostrar facturas, otro mostrar pedidos y se va a utilizar desde el proyecto A y desde el proyecto B se quiere que según desde que proyecto se llame se muestre los formularios de detalle de cliente, facturas y pedidos de ese proyecto en cuestión. Lo que no se quiere es añadir nada exclusivo de un proyecto a un form genérico, por eso quiere poder hacerlo sin añadir al uses los forms.

Tal y como yo lo veo es una situación en la que se puede utilizar el polimorfismo. Si en el form genérico se declaran objetos de un tipo antepasado común a todos los forms que se puedan mostrar desde el form genérico y cuando se llama al form genérico quien lo llama le pasa los forms del proyecto casteados al tipo de form antepasado como parametros, desde el form genérico podrán llamarse a todos los métodos del form declarados en el antepasado, entre ellos el show y el showmodal etc.

El problema que esto plantea si es la creación de los forms, deben crearse en el proyecto y pasarse como parámetros instancias ya creadas de los tipos de forms propios del proyecto. Dentro del formulario genérico no podrán crearse aunque si destruirse.

socger 12-11-2014 11:43:12

Chicos, muchas gracias. Ahora es momento de hacer pruebas.

Muy buen aporte y participación. Saludos


La franja horaria es GMT +2. Ahora son las 18:43:11.

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