Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Asignar pasajeros a los asientos (https://www.clubdelphi.com/foros/showthread.php?t=91090)

santiago14 09-11-2016 19:57:14

Asignar pasajeros a los asientos
 
Bueno, paso a contarlo.
Tengo que hacer un software de turismo donde una de las funcionalidades es "asignar pasajeros a las butacas de un ómnibus". En términos de BBDD no es problema, pero esta gente quiere que se vea de manera gráfica.
Para tomar dos ejemplos puedo mencionar los sistemas donde uno selecciona las butacas del cine, de manera gráfica. El otro caso es cuando se eligen los asientos en un avión a través de los sistemas web de las aerolíneas. Estaría bueno que aparecieran los asientos y poder con el mouse elegir el que uno quiere. En ese caso, ponerlo de algún color, y así.
La cuestión es que quisiera saber si puedo encontrar alguna herramienta que haga eso en Delphi.
Espero haber sido claro.

Gracias.

AgustinOrtu 09-11-2016 23:52:37

Yo armaria un GridPanel en donde cada celda tendria una Imagen o un Shape clickeable. Creo que deberias contemplar dos estados, vacio u ocupado, y cada estado deberia tener una imagen o el shape podria variar de color

No hay algun ejemplo de algun sistema que haga algo similar?

Delphius 10-11-2016 00:08:23

Cita:

Empezado por AgustinOrtu (Mensaje 510573)
Yo armaria un GridPanel en donde cada celda tendria una Imagen o un Shape clickeable. Creo que deberias contemplar dos estados, vacio u ocupado, y cada estado deberia tener una imagen o el shape podria variar de color

No hay algun ejemplo de algun sistema que haga algo similar?

Pensé en lo mismo. Aunque también podría hasta ser válido un panel que se le podría cambiar de color según el estado. El elemento que se ponga en el GridPanel es de menos, mientras sirva para ilustrar/mostrar/representar los estados.
Lo bueno de poner un TImage es que le podemos colocar algún dibujo. Verde libre, Rojo ocupada, amarilla reservada... o con muñequitos...

La imaginación es el límite.

Obviamente por debajo, internamente, tendría una "estructura" que maneje y controle esto de forma lógica.

Y si se quiere liarla parda.... diseñaría que el item a poner en el GridPanel sea un Frame y crearía tantas instancias requiera. Lo lindo de tener el frame es que diseño uno con toda la lógica y funcionalidad tanto visual como para "traducir" los estados visualmente a su representación lógica, y su inversa. Luego pongo sus instancias y todas trabajando sin problemas.

Saludos,

ecfisa 10-11-2016 00:21:52

Hola.

Yo también pienso que no va a ser fácil conseguir un componente que haga ese trabajo... Pero vamos que con un poquito de trabajo y algunos paneles se logra un esbozo sin problemas:


Y el código es lo menos fatigoso:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to PopupMenu1.Items.Count-1 do
    PopupMenu1.Items[i].Tag := 100 + i;
end;

procedure TForm1.MenuItemClick(Sender: TObject);
var
  pn: TPanel;
begin
  pn := TPanel(PopupMenu1.PopupComponent);
  case TMenuItem(Sender).Tag of
    100: pn.Color := clLime;
    101: pn.Color := clYellow;
    102: pn.Color := clRed;
  end;
  pn.Tag := TMenuItem(Sender).Tag;
end;

// (Esto si deseas que funcione con click izq. también )
procedure TForm1.PanelClick(Sender: TObject);
begin
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  PopupMenu1.PopupComponent := TPanel(Sender);
end;

Saludos :)

Delphius 10-11-2016 00:34:00

Cita:

Empezado por ecfisa (Mensaje 510575)
Hola.

Yo también pienso que no va a ser fácil conseguir un componente que haga ese trabajo... Pero vamos que con un poquito de trabajo y algunos paneles se logra un esbozo sin problemas:


Y el código es lo menos fatigoso:
Código Delphi [-]procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to PopupMenu1.Items.Count-1 do PopupMenu1.Items[i].Tag := 100 + i; end; procedure TForm1.MenuItemClick(Sender: TObject); var pn: TPanel; mi: TMenuItem; begin pn := TPanel(PopupMenu1.PopupComponent); case TMenuItem(Sender).Tag of 100: pn.Color := clLime; 101: pn.Color := clYellow; 102: pn.Color := clRed; end; pn.Tag := TMenuItem(Sender).Tag; end; // (Esto si deseas que funcione con click izq. también ) procedure TForm1.PanelClick(Sender: TObject); begin PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); PopupMenu1.PopupComponent := TPanel(Sender); end;


Saludos :)

Pues si. Con paneles también se puede jugar muy fácil. Por lo que veo te pusiste a distribuir unos cuantos paneles bien bonito y a todos les indicaste que hagan uso del OnClick del primero.
Mi pregunta es si para crear y ubicar esos frames usaste algún control como el GridPanel o lo "calculaste" a mano donde debe ir cada uno. El código no da mucha pista de esto.

Saludos,

AgustinOrtu 10-11-2016 01:59:51

El TGridPanel que yo sepa aparecio en Delphi 2006

En ese mismo articulo se habla un poco del componente, y tambien del TFlowPanel que me parece que merece su consideracion

Delphius 10-11-2016 02:16:58

Cita:

Empezado por AgustinOrtu (Mensaje 510577)
El TGridPanel que yo sepa aparecio en Delphi 2006

En ese mismo articulo se habla un poco del componente, y tambien del TFlowPanel que me parece que merece su consideracion

Ahora que hago memoria ecfisa usa D7.
Asi que intuyo que los "organizó" a "mano" ;)

Pensé inicialmente en el TFlowPanel, pero luego vi que el GridPanel permite ubicar con cierta facilidad los controles de manera equitativa. Yo mucho no entiendo cuando conviene uno u otro. Tienen sus similitudes, pero también por algo son diferentes.
Como que el GridPanel te permite "dibujar" y calzar los elementos de una forma y posición determinada. Mientras que el FlowPanel te los va calzando/acomodando según el espacio que tenga disponible.
Pero que más los hace diferentes, no se.

Saludos,

ecfisa 10-11-2016 03:04:01

Hola Delphius.

Si así es, en el ejemplo ubiqué los paneles a mano (no dispongo del TGridPanel).

Volviendo al caso, creo que existe un factor importante que dificulta tratar de estandarizar el uso de plantillas en modo gráfico. Es que existen múltiples distribuciones de los asientos entre los diferentes fabricantes de carrocerías y cada uno de ellos con distintos modelos: cama, semicama, doble piso, filas simples, filas dobles, ...
Una plantilla de tipo gráfico, al estilo de algunos programas de reservas de vuelos, complicaría bastante la implementación y requeriría mucho mantenimiento debido a los cambios de ómnibus.

Sin dudas usar una grilla será mucho mas flexible y requerirá muy poco mantenimiento en el tiempo.

Saludos :)

Delphius 10-11-2016 03:09:20

Cita:

Empezado por ecfisa (Mensaje 510579)
Hola Delphius.

Si así es, en el ejemplo ubiqué los paneles a mano (no dispongo del TGridPanel).

Volviendo al caso, creo que existe un factor importante que dificulta tratar de estandarizar el uso de plantillas en modo gráfico. Es que existen múltiples distribuciones de los asientos entre los diferentes fabricantes de carrocerías y cada uno de ellos con distintos modelos: cama, semicama, doble piso, filas simples, filas dobles, ...
Una plantilla de tipo gráfico, al estilo de algunos programas de reservas de vuelos, complicaría bastante la implementación y requeriría mucho mantenimiento debido a los cambios de ómnibus.

Sin dudas usar una grilla será mucho mas flexible y requerirá muy poco mantenimiento en el tiempo.

Saludos :)

Puede ser, pero se pueden diseñar formas de sortear estos problemas.
Por ejemplo nada impide tener en un archivo (o hasta incluso en una BD) almacenado como sería el "mapa" de distribución de elementos. Se lee esto, se establecen las filas y columnas necesarias del GridPanel y se colocan los items adentro siguiendo dicha distribución.

Saludos,

newtron 10-11-2016 09:15:52

Hola.

Igual me equivoco pero quiero recordar haber leido en alguna ocasión que Neftali tiene desarrollados unos componentes para poder figuras en un formulario y manejarlas en tiempo de edición (o algo así). De esta forma sería relativamente sencillo crear los asientos de cada uno de los distintos vehículos y manejar, por ejemplo su color, en función a las necesidades. Porque un problema que se me viene a la cabeza es que habrá distintos vehículos, y por otro lado se irán renovando en el tiempo y sería complicado mantener los esquemas de cada uno de ellos por programación.

Neftali [Germán.Estévez] 10-11-2016 11:10:36

Cita:

Empezado por santiago14 (Mensaje 510567)
Tengo que hacer un software de turismo donde una de las funcionalidades es "asignar pasajeros a las butacas de un ómnibus". En términos de BBDD no es problema, pero esta gente quiere que se vea de manera gráfica.
Para tomar dos ejemplos puedo mencionar los sistemas donde uno selecciona las butacas del cine, de manera gráfica. El otro caso es cuando se eligen los asientos en un avión a través de los sistemas web de las aerolíneas. Estaría bueno que aparecieran los asientos y poder con el mouse elegir el que uno quiere. En ese caso, ponerlo de algún color, y así.

Cita:

Empezado por newtron (Mensaje 510586)
Igual me equivoco pero quiero recordar haber leido en alguna ocasión que Neftali tiene desarrollados unos componentes para poder figuras en un formulario y manejarlas en tiempo de edición (o algo así).

Si estás pensando hacer algo "manual" puedes revisar estas entradas a ver si te aportan alguna idea:
http://neftali.clubdelphi.com/selecc...s-visualmente/
http://neftali.clubdelphi.com/creard...-con-el-raton/


No se si te puede ser útil también este artículo donde hablaba sobre plugins. Más que nada porque el ejemplo se basa en TShapes "personalizados"
http://neftali.clubdelphi.com/sistem...elphi-parte-2/



En cuanto a componentes, aunque en mi web puedes encontrar el TSelectOnRuntime, creo que no se ajusta del todo a lo que necesitas.
Para esto te recomendaría el que ya he comentado otras veces aquí; El TSimpleGraph de la web DelphiArea. Muy útil para crear "Mapas de Objetos" y con infinidad de funcionalidades incluídas.


La franja horaria es GMT +2. Ahora son las 20:46:01.

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