Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Cambiar Color a Panel

Buenas tardes amigos, soy nuevo en este foro y en Delphi 2007, mi problema es el siguiente:

Me encargaron hacer un pequeño sistema para un hotel, tengo todo los cuartos visualizados en paneles y toda su programacion pare hacer la reservacion y todo lo que ocupa. Cuando se hace la reservacion cambia el color del panel para visualizar directamente que ya tiene reservacion ese cuarto, el problema es cuando se sale del sistema y entra de nuevo el cuarto que tenia hecha la reservacion aparece nuevamente como si no tiene ninguna reservacion... De antemano les agradesco a quien me pueda ayudar!!!
Responder Con Cita
  #2  
Antiguo 30-01-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Hay muchas formas de hacer lo que necesitas.
1- me imagino que usas una base de datos para guardar la reservacion, si es asi, simplemente crea un campo para ese fin y dependiendo de su estado cambie el color o no.
2- puedes usar un archivo INI y guardar ese dato.
saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 30-01-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se trata de que los componentes, cuando vuelves a abrir el programa están como los diseñaste, no como los dejaste la última ejecución.
Lo que debes hacer, al abrir el programa, es volver a refrescar todos los paneles (al estado correcto) según los datos que tengas de las reservas.
Como dice Caral, lo normal es que esos datos los tengas en la Base de Datos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 30-01-2013
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola, sin tener que usar bases de datos, una forma sencilla sería guardarlo en un txt, podrías poner un objeto memo con visible=false y utilizarlo para cargar y guardar el archivo txt de la siguiente forma.

Código Delphi [-]
procedure.TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('c:\Reservas.txt');
end;
Procedure.TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Memo1.Lines.SaveToFile('c:\Reservas.txt');
end;

Faltaría, claro está, un paso intermedio antes de guardar el archivo con los datos contenidos en el memo, que sería introducir en el memo el estado de cada panel, "ocupado/libre" para luego poder rescatar ese estado al abrir el programa.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #5  
Antiguo 30-01-2013
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por rotsen26 Ver Mensaje
Buenas tardes amigos, soy nuevo en este foro y en Delphi 2007, mi problema es el siguiente:

Me encargaron hacer un pequeño sistema para un hotel, tengo todo los cuartos visualizados en paneles y toda su programacion pare hacer la reservacion y todo lo que ocupa. Cuando se hace la reservacion cambia el color del panel para visualizar directamente que ya tiene reservacion ese cuarto, el problema es cuando se sale del sistema y entra de nuevo el cuarto que tenia hecha la reservacion aparece nuevamente como si no tiene ninguna reservacion... De antemano les agradesco a quien me pueda ayudar!!!
Pues yo hago lo que Caral comenta, tengo una tabla de estado de habitaciones y con eso defino que es lo que tiene la habitación, no sólo si está en reserva.

Te muestro una imagen (que data de 2007) pero que muestra exactamente lo que quieres aunque yo lo hago con un TStringGrid y con imagenes incrustadas dependiendo de los servicios que tiene asignados.



Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 31-01-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
egostar tienes algo parecido a lo que necesito... la cuestiones que yo los agarro con panel, segun el estado de la habitacion es el color que debe de tener el panel... si la habitacion esta ocupada debe tener color rojo y desocupada color verde... solo que no se como poner ese estado al abrir la ventana donde se encuentra los paneles...
Responder Con Cita
  #7  
Antiguo 31-01-2013
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por rotsen26 Ver Mensaje
egostar tienes algo parecido a lo que necesito... la cuestiones que yo los agarro con panel, segun el estado de la habitacion es el color que debe de tener el panel... si la habitacion esta ocupada debe tener color rojo y desocupada color verde... solo que no se como poner ese estado al abrir la ventana donde se encuentra los paneles...
Pues yo lo que haría es tener una tabla donde almaceno el estado de la habitación y en base al estado "pintar" el panel.

Por ejemplo algo así:

Código Delphi [-]
TQuery.SQL.Text := 'SELECT HABITACION, ESTADO FROM EDO_HABITACIONES';
TQuery.Open;
while not TQuery.EoF do 
begin
   case TQuery.FieldsByName('ESTADO').AsInteger of
      0: begin //LIBRE
           PanelX.Color := clGreen;
      end;
      1: begin //OCUPADA
           PanelX.Color := clRed;
      end;  
   end; 
   TQuery.Next;
end;
TQuery.Close;

Aquí lo único es asignar el panel correspondiente dependiendo de la habitación.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 31-01-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Pues yo lo que haría es tener una tabla donde almaceno el estado de la habitación y en base al estado "pintar" el panel.

Por ejemplo algo así:

Código Delphi [-]
TQuery.SQL.Text := 'SELECT HABITACION, ESTADO FROM EDO_HABITACIONES';
TQuery.Open;
while not TQuery.EoF do 
begin
   case TQuery.FieldsByName('ESTADO').AsInteger of
      0: begin //LIBRE
           PanelX.Color := clGreen;
      end;
      1: begin //OCUPADA
           PanelX.Color := clRed;
      end;  
   end; 
   TQuery.Next;
end;
TQuery.Close;

Aquí lo único es asignar el panel correspondiente dependiendo de la habitación.


Saludos

Aqui te muestro el codigo que estoy poniendo para mandar llamar los datos de la base de datos...

Código Delphi [-]
procedure Tfrm_capt_mapa.DataSource1DataChange(Sender: TObject; Field: TField);
begin
      //Habitacion 1
  if (DataSource1.DataSet.FieldByName('estatus').AsString) = 'RES' then
    Panel1.Color :=clRed
  else
    Panel1.Color :=clGreen;
end;

Pero no me está funcionando!!!
Responder Con Cita
  #9  
Antiguo 31-01-2013
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Bueno, me parece que el problema es mas de concepto que de otra cosa, estás intentando que cambie el color del panel cuando haya un cambio en el registro, pero yo lo haría en el evento OnShow de la forma para que se "actualice" cuando se muestra la pantalla, y claro, dejaría el proceso que tienes para que se ejecute cuando se registre otra reservación.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 31-01-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Bueno, me parece que el problema es mas de concepto que de otra cosa, estás intentando que cambie el color del panel cuando haya un cambio en el registro, pero yo lo haría en el evento OnShow de la forma para que se "actualice" cuando se muestra la pantalla, y claro, dejaría el proceso que tienes para que se ejecute cuando se registre otra reservación.

Saludos
Ya lo he puesto en el evento OnShow pero sigue sin mostrar el resultado...
Responder Con Cita
  #11  
Antiguo 04-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola rotsen26.

Otra opción puede ser usar el evento OnDataChange del TDataSource:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.DataSource.OnDataChange:= DataChange;
  DBGrid1.DataSource.DataSet.Open;
end;

procedure TForm1.DataChange(Sender: TObject; Field: TField);
begin
  if DBGrid1.DataSource.DataSet.FieldByName('estatus').AsString = 'RES' then
    Panel1.Color:= clRed
  else
    Panel1.Color:= clGreen;
end;


//...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DBGrid1.DataSource.OnDataChange:= nil;
end;
Asigno el evento por código para darle mayor claridad al ejemplo. Pero lo podés hacer desde el Object Inspector, en tiempo de diseño, diréctamente desde la pestaña Events del componente TDataSource relacionado al DBGrid.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 12-02-2013
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Se trata de que los componentes, cuando vuelves a abrir el programa están como los diseñaste, no como los dejaste la última ejecución.
Lo que debes hacer, al abrir el programa, es volver a refrescar todos los paneles (al estado correcto) según los datos que tengas de las reservas.
Como dice Caral, lo normal es que esos datos los tengas en la Base de Datos.
Como dice Neftali, lo ideal es que al abrir la pantalla que muestra las habitaciones hagas un refresh de las mismas...

Parecido a esto, tengo un sistema de combis que llevan pasajeros entre 2 ciudades, y los asientos pueden estar libres, reservados o vendidos.
En la pantalla que muestro los asientos tengo un procedimiento que "revisa" los asientos en la base de datos para pintarlos del color correspondiente.
Cuando abro la ventana llamo a este procedimiento para mostrarlos... y cuando reservo o vendo un pasaje, primero inserto la operacion correspondiente en la base de datos y luego vuelvo a llamar a ese procedimiento para que me vuelva a actualizar la pantalla.
Espero te sirva, abrazo!
Responder Con Cita
  #13  
Antiguo 12-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jpgonzalez Ver Mensaje
...
En la pantalla que muestro los asientos tengo un procedimiento que "revisa" los asientos en la base de datos para pintarlos del color correspondiente.
Cuando abro la ventana llamo a este procedimiento para mostrarlos... y cuando reservo o vendo un pasaje, primero inserto la operacion correspondiente en la base de datos y luego vuelvo a llamar a ese procedimiento para que me vuelva a actualizar la pantalla.
Exactamente a eso me refería.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 13-02-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Como hacerlo???

Cita:
Empezado por jpgonzalez Ver Mensaje
Como dice Neftali, lo ideal es que al abrir la pantalla que muestra las habitaciones hagas un refresh de las mismas...

Parecido a esto, tengo un sistema de combis que llevan pasajeros entre 2 ciudades, y los asientos pueden estar libres, reservados o vendidos.
En la pantalla que muestro los asientos tengo un procedimiento que "revisa" los asientos en la base de datos para pintarlos del color correspondiente.
Cuando abro la ventana llamo a este procedimiento para mostrarlos... y cuando reservo o vendo un pasaje, primero inserto la operacion correspondiente en la base de datos y luego vuelvo a llamar a ese procedimiento para que me vuelva a actualizar la pantalla.
Espero te sirva, abrazo!

Bueno, perdón por preguntar tanto... Pero como puedo hacerlo, tengo una tabla llamada Checin, en donde tengo el campo llamado estatus, y en se guardan los estados Reservado=RES, Check=OCU y Desocupado=DES, pero no se como llamarlos para que cuando esten según el estado se pongan los páneles en el color correspondiente, RES=Amarillo, OCU=Rojo y Des=Verde... Se le agradece la ayuda!!!
Responder Con Cita
  #15  
Antiguo 13-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Es de suponer que cada panel que tienes en pantalla corresponderá con uno de los registros que tienes en la tabla. El panel se llamará de alguna forma concreta y en la propiedad TAG habrás puesto algo (entero) que permita "identificarlo" y hacerlo "cuadrar" con uno de los registros de la tabla.

¿Es así? ¿Me explico? ¿Puedes explicar cómo lo has hecho?

Si es así, basta con que hagas un recorrido por la tabla y para cada registro, identifiques el panel que le corresponde y según el valor le asignes el color.

Para ser más concreto debes:
1) Poner las estructura de la tabla (para que veamos los campos)
2) Decirnos cómo llamas o identificas los paneles para que "cuadren" con los registros de la tabla.


P.D: Si la respuesta a la pregunta es que NO (es decir, que no tienes forma de identificar los paneles con los registros de la tabla), esto es lo primero que hay que hacer.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 13-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola rotsen26.

A diferencia de los compañeros, yo había interpretado mal lo que estabas buscando, pensé que mostrabas una habitacion por vez.

Si son mostradas todas, podrías usar un procedimiento para actualizar los estados y llamarlo cuando sea necesario:
Código Delphi [-]
procedure TForm1.ActualizarPaneles(Grid: TDBGrid);
var
  i: Integer;
  tc: TColor;
  BM: Pointer;
begin
  i:= 1;
  BM := DBGrid1.DataSource.DataSet.GetBookmark;
  Grid.DataSource.DataSet.DisableControls;
  Grid.DataSource.DataSet.First;
  try
    while not Grid.DataSource.DataSet.Eof do
    begin
      case Grid.DataSource.DataSet.FieldByName('ESTADO').AsString[1] of
        'D': tc:= clGreen;  // (D)esocupado
        'O': tc:= clRed;    // (O)cupado
        'R': tc:= clYellow; // (R)eservado
      end;
      TPanel(FindComponent('Panel'+IntToStr(i))).Color := tc;
      Grid.DataSource.DataSet.Next;
      Inc(i)
    end;
  finally
    Grid.DataSource.DataSet.GotoBookmark(BM);
    Grid.DataSource.DataSet.FreeBookmark(BM);
    Grid.DataSource.DataSet.EnableControls
  end
end;

Un ejemplo de llamada:
Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
begin
  // (Tu DataSet debería estar abierto en este punto) tu_DataSet.Open;
  ActualizarPaneles(DBGrid1);
end;
Otro:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   ActualizarPaneles(DBGrid1);
end;
Para simplificar, en el procedimiento ActualizarPaneles, asumo que los paneles se llaman: Panel1, Panel2, Panel3, ... (*)

Saludos.

(*) Edito, me falto agregar: y el órden de los Paneles se corresponde al órden de las habitaciones en la tabla
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-02-2013 a las 20:30:17.
Responder Con Cita
  #17  
Antiguo 14-02-2013
rotsen26 rotsen26 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 41
Poder: 0
rotsen26 Va por buen camino
Solucionado

Buenas tardes amigos, les comento que ya solucioné el problema del cambio de colores en los paneles... Gracias a todos los que se dieron tiempo para poder ayudar!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Panel con color degradado NEG1414 C++ Builder 8 15-12-2010 19:26:09
Cambiar el color de un panel de TStatusBar fide_uci Gráficos 4 03-02-2009 15:43:08
Duda. Cambiar Color del Panel con Xpmanifest ekstase Gráficos 2 07-04-2008 05:22:38
Cambiar color en panel de DBCtrlGrid segun valor de un atributo akinom38 Varios 4 23-01-2006 14:25:30
Panel color blanco xxxFALKORxxx Varios 2 27-05-2005 18:26:37


La franja horaria es GMT +2. Ahora son las 19:48:42.


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
Copyright 1996-2007 Club Delphi