Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Statusbar con colores (https://www.clubdelphi.com/foros/showthread.php?t=32365)

JULIPO 03-06-2006 19:25:49

Statusbar con colores
 
Reciban un cordial saludo

Estoy desarrollando una aplicacion Cliente - servidor en Mysql y delphi 7.0 cuando el servidor esta en linea la aplicacion cliente muestra en el statusbar en el panel 4 un mensaje 'En linea' con el fondo en verde cuando esta fuera de linea la aplicacion muestra 'fuera de linea' con fondo rojo.

eso es lo que quiero hacer pero no se como hacer para que el status bar cambie los colores de fondo?.

de antemano le agradezco cualquier respuesta a mi problema.


julipo

seoane 03-06-2006 19:47:15

Puedes hacer algo como esto, en la propiedad Style del panel pones psOwnerDraw y en el evento OnDrawPanel del Statusbar colocas esto:

Código Delphi [-]
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  if Uppercase(Panel.Text) = 'EN LINEA' then
    Statusbar.Canvas.Brush.Color:= clGreen
  else
    Statusbar.Canvas.Brush.Color:= clRed;
  Statusbar.Canvas.FillRect(Rect);
  Statusbar.Canvas.TextRect(Rect,4,4,Panel.Text);
end;

De esta manera somos nosotros lo encargados de dibujar el panel, primero ajustamos el color de fondo y pintamos todo el area del panel, luego tenemos que escribir el texto (juega con los valores para que el texto quede bien centrado).

Código Delphi [-]
// Esto pone el panel de color verde
Statusbar1.Panels[0].Text:= 'En linea';
// Esto pone el panel de color rojo
Statusbar1.Panels[0].Text:= 'Cualquier otro texto';

JULIPO 03-06-2006 23:46:02

Funciona muy Bien
 
Muchas Gracias por tu respuesta funciona muy bien, pero ahora pienso en algo mas si quiero que aparezca un icono o bmp, es posible?

seoane 04-06-2006 00:12:11

Pues siguiendo mi respuesta anterior, si lo que quieres es dibujar un bitmap una posible solucion seria poner esto en el evento OnDrawPanel

Código Delphi [-]
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
var
  Bitmap: TBitmap;
begin
  Statusbar.Canvas.FillRect(Rect);
  if FileExists(Panel.Text) then
  begin
    Bitmap:= TBitmap.Create;
    try
      Bitmap.LoadFromFile(Panel.Text);
      // Esta opcion vuelve transparente el color de fondo del bitmap
      Bitmap.Transparent:= TRUE;
      Statusbar.Canvas.Draw(0,0,Bitmap);
    finally
      Bitmap.Free;
    end;
  end;
end;

De esta manera dibujamos en el Panel el bitmap cuya ruta esta escrita en la propiedad text del propio panel, es decir, si tenemos un archivo en d:\1.bmp para cargarlo solo tendriamos que hacer:

Código Delphi [-]
  Statusbar1.Panels[0].Text:= 'd:\1.bmp';

Puede que tangas que modificar algo para adaptarlo a lo que tu pensabas pero espero que te hagas una idea.

seoane 04-06-2006 00:22:05

Otra posible solucion es utilizar un TImageList, colocar ahi los bmps o iconos que quieras usar y luego escribir en la proiedad text del panel su indice, es decir:

Código Delphi [-]
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  Statusbar.Canvas.FillRect(Rect);
  ImageList1.Draw(Statusbar.Canvas,Rect.Left,Rect.Top,StrToIntDef(Panel.Text,-1));
end;

Y para dibujar una imagen:
Código Delphi [-]
// Esto dibuja la primera imagen de TImageList
Statusbar1.Panels[0].Text:= '0';

// Esto la segunda y asi sucesivamente
Statusbar1.Panels[0].Text:= '1';

// Esto la borrar
Statusbar1.Panels[0].Text:= '-1';


La franja horaria es GMT +2. Ahora son las 05:55:43.

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