PDA

Ver la Versión Completa : Form interactivo


The Cid James
19-10-2017, 00:51:40
Buenas, tengo una duda y no se ni por donde empezar, básicamente casi estoy terminado un pequeño soft (mas allá que aun le faltan arreglar detalles y algunas funciones :confused: ) y a la hora de operarlo me he dado cuenta de que en algunos momentos es bastante tedioso y poco estético la apertura de nuevas ventanas en el soft por lo cual ahora me llego cierta inquietud para poder mejorar el soft, como no tengo mucha experiencia con delphi acudo a la consulta.
Quisiera saber si es posible crear un form mas interactivo el cual posea un menú estático y el resto del form se actualice a modo de iframe en vez de abrir otro form. Ahora mi consulta seria la siguiente:
1- Que componentes o como se llama este tema para buscar información para saber donde comenzar.
2- Cuales son las desventajas y ventajas de hacerlo.

Aprovechando esto y con afán de no abrir otro post (no se si es lo mas recomendado) también quisiera trabajar con estadísticas gráfica de venta y stock. Es decir algo así como comparación de ventas por día/semana/horario/vendedor stock disponible en gráficos etc.

Saludos :)

Casimiro Notevi
19-10-2017, 09:52:42
Para contestar a tu primera pregunta hace falta saber qué quieres hacer, porque no creo que esté claro para nosotros.
Tu segunda pregunta no tiene nada que ver, por lo que tienes que abrir otro hilo.

Neftali [Germán.Estévez]
19-10-2017, 17:06:39
también quisiera trabajar con estadísticas gráfica de venta y stock. Es decir algo así como comparación de ventas por día/semana/horario/vendedor stock disponible en gráficos etc.


Para ello puedes hacer pruebas con los componentes TChart que vienen con Delphi.

The Cid James
19-10-2017, 22:54:13
Para contestar a tu primera pregunta hace falta saber qué quieres hacer, porque no creo que esté claro para nosotros.
Tu segunda pregunta no tiene nada que ver, por lo que tienes que abrir otro hilo.

Para hacerlo mas claro... quiero hacer algo como podes hacer en una pagina web con los menús, que por ejemplo tenes inicio y otra sección por ejemplo el blog. Cuando presionas inicio el menú queda igual (ya se que carga todo los componentes de nuevo) y cambiaría el cuerpo, lo mismo si vas a blog que el menú es el mismo y cambia el cuerpo todo en una sola pestaña sin necesidad de abrir otra pestaña. "Pongo el ejemplo de la pagina web solo para que se entienda la idea". Es decir que quiero un menú estático, que el resto del cuerpo cambie según el botón, sin abrir otro form u otra ventana. Por ejemplo tengo el dos botones que serian el menú en uno tengo productos y el otro venta, y que el cuerpo del form cambie según que presione para que quede mas claro dejo esta imagen que es mas o menos lo que quiero

https://www.emporos.net/img/product-desktop.png


Para ello puedes hacer pruebas con los componentes TChart que vienen con Delphi.

Gracias, voy a ver como me las arreglo con el componente :D

Casimiro Notevi
19-10-2017, 23:10:09
Tienes montones de opciones y posibilidades, una barra de menús, paneles, etc. todo a tu gusto.

Neftali [Germán.Estévez]
20-10-2017, 08:35:26
Tienes montones de opciones y posibilidades, una barra de menús, paneles, etc. todo a tu gusto.

También puedes diseñar los formularios de forma independiente y en ejecución "dockarlos" en un panel central.
El formulario principal tendría el menú y las zonas fijas que quieras y en el centro (por ejemplo) un panel que será donde vayan apareciendo los formularios que abras.

The Cid James
20-10-2017, 16:01:18
También puedes diseñar los formularios de forma independiente y en ejecución "dockarlos" en un panel central.
El formulario principal tendría el menú y las zonas fijas que quieras y en el centro (por ejemplo) un panel que será donde vayan apareciendo los formularios que abras.

alguna guía o material al respecto, no se que queres decir con dockarlos y aunque quise buscarlo no encontré nada

Neftali [Germán.Estévez]
20-10-2017, 20:18:51
alguna guía o material al respecto, no se que queres decir con dockarlos y aunque quise buscarlo no encontré nada

Dockar vendría a ser algo así como incrustar. De forma que puedes incrustar uno o varios formularios dentro de otro, en un tpanel o en otro control que sea de tipo contenedor.
Puedes tener (como en el ejemplo que hay a continuación) un formulario principal con una zona donde dockar otros formularios que puedes ir abrirendo, cerrando e incrustando a tu gusto.

https://s26.postimg.org/5k4944nyh/dockar2.gif

Te pongo el link al proyecto de prueba.

http://terawiki.clubdelphi.com/Delphi/Ejemplos/Controles/?download=ejemplo_dockar_forms.zip

Neftali [Germán.Estévez]
20-10-2017, 20:20:09
Si busca en los foros sobre la palabra ManualDock, seguro que te salen algunos hilos al respecto.

The Cid James
24-10-2017, 22:59:06
Gracias gente ahora me pongo con eso, ya estare preguntando mas xD

The Cid James
25-10-2017, 00:41:16
Guiándome por el ejemplo que me pasaste hice el siguiente código ahora el problema es que me crea la ventana y después la incrusta

procedure TfPrincipal.Button1Click(Sender: TObject);
begin
fmodulo.tVenta.Active := true;
fmodulo.tVenta.Insert;
fmodulo.tVenta.Post;
fmodulo.tVenta.Edit;
fmodulo.tVentadetalle.Active :=true;
fventa :=tfVenta.Create(self);
fventa.Show;
fVenta.ManualDock(dp1);
fVenta.Align := alclient;
fmodulo.tVenta.Active := false;
fmodulo.tVentadetalle.Active := false;
end;

Hay posibilidad de evitar esto?
y se puede tener el botón de cerrar en el tpanel?. También quisiera saber si hay la posibilidad de que un form cargue apenas inicie el programa y cuando se cierre el form que se este ejecutando este quede por defecto

Neftali [Germán.Estévez]
25-10-2017, 09:58:11
Hay posibilidad de evitar esto?


Pon el Show después del ManualDock, en lugar de antes.


y se puede tener el botón de cerrar en el tpanel?.

Pon un botón donde quieras y según el código del ejemplo que puse, coloca lo siguiente:

procedure TForm3.Button4Click(Sender: TObject);
begin
if Assigned(Form1) then
FreeAndNil(Form1);
end;

(o fVenta en tu caso)


También quisiera saber si hay la posibilidad de que un form cargue apenas inicie el programa y cuando se cierre el form que se este ejecutando este quede por defecto

Eso tendrá que ser una configuración tuya personal.
Crea una variable para saber cual es el formulario que tienes activo al cerrar la aplicación y al abrirla de nuevo, según esa variable, tendrás que abrir ese form de forma automática.

The Cid James
25-10-2017, 23:06:54
Pon un botón donde quieras y según el código del ejemplo que puse, coloca lo siguiente:

procedure TForm3.Button4Click(Sender: TObject);
begin
if Assigned(Form1) then
FreeAndNil(Form1);
end;

(o fVenta en tu caso)
En este caso solo cerraria el for, tventa, estoy trabajando como con 10 hay posibilidad de algo mas general?


Eso tendrá que ser una configuración tuya personal.
Crea una variable para saber cual es el formulario que tienes activo al cerrar la aplicación y al abrirla de nuevo, según esa variable, tendrás que abrir ese form de forma automática.
Aquí creo que no me exprese con claridad, lo que quiere hacer es algo así como una pantalla de inicio, y que cada vez que cierre el form que estoy trabajando aparezca el por defecto.

También me surgido otra duda mientras lo hacia, que es el tema del tamaño de los forms que se incrustan, quisiera que se auto ajusten al tamaño del tpanel

Neftali [Germán.Estévez]
26-10-2017, 08:55:22
En este caso solo cerraria el for, tventa, estoy trabajando como con 10 hay posibilidad de algo mas general?


Te he puesto el código para que veas la operación a realizar. Está claro que si trabajas con varios frames diferentes, no te vale usar:

FreeAndNil(fVenta);

Tendrás que utilizar una variable, que almacene el formulario actual.
Al dockar un form tendrás que guardar ese form:


...
public
FormAbierto:TForm;
...


Al abrir un form, lo guardar en la variable y al cerrar utilizas la variable para cerrarlo.


También me surgido otra duda mientras lo hacia, que es el tema del tamaño de los forms que se incrustan, quisiera que se auto ajusten al tamaño del tpanel

Se supone que esta línea hace que el formulario se ajuste al tamaño del panel:

fVenta.Align := alclient;

Lo que te queda es diseñar el formulario para que se autoajuste correctamente a los diferentes tamaños.

The Cid James
26-10-2017, 10:17:22
1- Si entiendo bien lo que me decis seria algo asi como asignar una variable, por ejemplo en formcreate a todos los los form con los que trabajo y el boton cierre eso? - Por otro lado lo que queria era mas como el boton de las ventanas de los so de cerrar cosa que no aparece cuando lo dokeas, si es que no hice algo mal yo.

2- Estoy trabajando solo con un panel para el dokeo pero queda del tamaño que es, no cambia de ninguna forma con
fVenta.Align := alclient;
De echo cambie manualmente los tamaños a la medida para que entraran :confused: , bueno en este caso solo tventa que es el que quiero terminar bien para empezar con los otros.

3- Con respecto a la pantalla de inicio podria ser una forma en formcreate que dokee un form principal y al hacer que abra otro este cierre mas o menos siguiendo la lógica del primer punto

maeyanes
26-10-2017, 16:34:28
Hola...

De echo cambie manualmente los tamaños a la medida para que entraran , bueno en este caso solo tventa que es el que quiero terminar bien para empezar con los otros.

Asigna al TPanel a la propiedad Parent de fVenta.


fVenta.Parent := PanelPadre;



Saludos...

The Cid James
27-10-2017, 06:06:20
En las propiedades del form tengo solo esto
https://image.prntscr.com/image/F9IVxBTlQCeK4DcSJAuRXA.png

maeyanes
27-10-2017, 16:08:10
Hola...

La propiedad Parent es pública (public), no publicada (published), por lo que no la verás en el inspector de objetos. Tienes que asignar la propiedad por código, de la forma en la que te indiqué...



Saludos...

The Cid James
28-10-2017, 01:58:41
Hola...

La propiedad Parent es pública (public), no publicada (published), por lo que no la verás en el inspector de objetos. Tienes que asignar la propiedad por código, de la forma en la que te indiqué...



Saludos...

Si supiera como no estaría preguntando, no sabia que había published, pensé que eran publicas o privadas nada mas. Tendré que buscar sobre el tema :confused. Entonces iria dentro de? o directamente lo pongo en la sección de publica en el form?

The Cid James
28-10-2017, 04:10:00
Lo puse aqui en el boton que llama al form pero no veo ningun cambio o entendi mal?
procedure TfPrincipal.BvnuevaClick(Sender: TObject);
begin
fmodulo.tVenta.Active := true;
fmodulo.tVenta.Insert;
fmodulo.tVentadetalle.Active :=true;
fventa :=tfVenta.Create(self);
fVenta.ManualDock(dp1);
fventa.Show;
fventa.Parent := Dp1;
end;

maeyanes
28-10-2017, 17:38:59
Hola...

La forma correcta sería:


procedure TfPrincipal.BvnuevaClick(Sender: TObject);
begin
fmodulo.tVenta.Active := true;
fmodulo.tVenta.Insert;
fmodulo.tVentadetalle.Active :=true;
fventa :=tfVenta.Create(self);
fventa.Parent := Dp1;
fventa.Align := alClient; // Si no lo haz hecho...
fVenta.ManualDock(dp1); // Si Dp1 es un TPanel, esto no es necesario...
fventa.Show
end;


Saludos...

The Cid James
29-10-2017, 04:51:18
Hola...

La forma correcta sería:


procedure TfPrincipal.BvnuevaClick(Sender: TObject);
begin
fmodulo.tVenta.Active := true;
fmodulo.tVenta.Insert;
fmodulo.tVentadetalle.Active :=true;
fventa :=tfVenta.Create(self);
fventa.Parent := Dp1;
fventa.Align := alClient; // Si no lo haz hecho...
fVenta.ManualDock(dp1); // Si Dp1 es un TPanel, esto no es necesario...
fventa.Show
end;


Saludos...
De todas formas me queda alineado en arriba a la izquierda :confused: y no se acopla al tamaño de dp1 (si es el tpanel)

maeyanes
30-10-2017, 18:47:02
Hola...

Probando tu código original, veo que funciona bien, tal y como debería.


procedure TfPrincipal.BvnuevaClick(Sender: TObject);
begin
fmodulo.tVenta.Active := true;
fmodulo.tVenta.Insert;
fmodulo.tVentadetalle.Active :=true;
fventa := tfVenta.Create(self);
fventa.Align := alClient; // Si asignaste esta propiedad en tiempo de diseño, esto no es necesario...
fVenta.ManualDock(dp1);
fventa.Show
end;


Por lo que el comportamiento que describes es raro... Verifica que en la propiedad Constrains del formulario fventa no tenga valores en MaxWidth o MaxHeight...


Saludos...

The Cid James
31-10-2017, 03:39:45
Cree dos form para probar y tenes razon funciona perfectamente, revise las propiedades de todo los dos form y no toque ningun item de medida aun porque primero quiero hacer que trabaje bien esto, despues pasare en limpio el codigo a ver que tengo mal con mas detalle.

Muchas gracias