Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-06-2012
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Problema con TStatusBar

Hola,

Mi programa tiene una barra de estado del tipo TStatusBar. La barra contiene a su vez cinco paneles de informacion del tipo TStatusPanel. La anchura de la barra se ajusta según el tamaño de la ventana del programa, de esta manera, la barra de estado es tan ancha como lo es la ventana principal del programa. Los cuatro primeros paneles tienen una anchura fija.

El problema aparece con el quinto panel. Este quinto panel no posee una anchura fija y se ajusta para completar lo que falta de ancho hasta completar el ancho de la ventana principal. En ese quinto panel tengo que escribir cierta información, la información es un texto normal que se guarda en la propiedad "text" del panel. Para escribir el texto utilizo:
Código Delphi [-]
Statusbar1.Panels[4].Text:='Aqui va el texto';
A veces la cadena es muy larga y en esos casos aparece el problema. La cadena no se escribe entera en el panel. Esto ocurre aunque en ese panel aún quede anchura para ocupar la cadena entera. Quiero decir que aunque el cajetin es grande, la cadena no se escribe hasta completar toda la anchura del panel, quedando esteticamente feo y perdiendo información. Es como si existiera una limitación que no me deja representar más de X caracteres aún quedando espacio para ellos.

¿Como puedo conseguir lo que quiero?
¿Existe ciertamente una limitación? He considerado que no debe existir esa limitación porque la propiedad "text" está declarada como un string.

Gracias y un saludo.

Última edición por Casimiro Notevi fecha: 18-06-2012 a las 17:43:33.
Responder Con Cita
  #2  
Antiguo 18-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si no has cambiado nada en el comportamiento del StatusBar, no deberías tener este problema. ¿Podrías mostrar una imagen de cómo queda el problema?

// Saludos
Responder Con Cita
  #3  
Antiguo 18-06-2012
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
No he cambiado nada (o al menos intencionadamente), me puedes indicar que propiedades compruebo?

Aquí subo la foto:


Gracias por tu respuesta.

Saludos
Responder Con Cita
  #4  
Antiguo 18-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.048
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y el texto es más largo de lo que aparece ahí?
Responder Con Cita
  #5  
Antiguo 19-06-2012
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Si claro, el texto es más largo, y como veis no aparece entero.

A la izquierda de ese panel existen otros paneles (de tamaño fijo)
Responder Con Cita
  #6  
Antiguo 19-06-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola J.: Lo que podrias hacer es adecuar el ancho del ultimo panel de acuerdo al tamaño general del StatusBar.

Por ejemplo cuando vos creas los paneles todos tienen un tamaño fijo predeterminado en 50. Si tenes los 4 primeros paneles en 50, por ejemplo hagamos un par de cuentas: 4 X 50 = 200 entonces el tamaño del 5° panel va a ser del tamaño total del StatusBar menos los cuatro primeros.
Podes verificar esto en el evento OnResize del Form

Código Delphi [-]
procedure TForm1.FormResize(Sender: TObject);
begin
    StatusBar1.Panels[4].Width := StatusBar1.Width-200;
    StatusBar1.Panels[4].Text := Edit1.Text;
    ShowMessage('Ancho de panel: '+IntToStr(StatusBar1.Panels[4].Width));
end;


Asi vas a poder utilizar todo el espacio restante del statusBar asignandolo al 5.

Saludos y espero que te sirva eso. Obviamente la limitacion va a estar dada por el tamaño de fuente y la cantidad de texto, no?
Responder Con Cita
  #7  
Antiguo 19-06-2012
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
Cita:
Empezado por J.Slann Ver Mensaje
Si claro, el texto es más largo, y como veis no aparece entero.
Hola J.Slann.

Tenes razón... cuando el TStatusPanel tiene su propiedad Style igual a psText deja un espacio significativo sin ocupar y realmente no sé el motivo de ese comportamiento.

Pero dibujándolo manualmente, logré que el texto ocupe todo el ancho del Panel:
Código Delphi [-]
...
implementation

const     // constante literal, máximo 255 caracteres
  TEXTO = 'Mi programa tiene una barra de estado del tipo TStatusBar.' +
          'La barra contiene a su vez cinco paneles de informacion del ' +
          'tipo TStatusPanel. La anchura de la barra se ajusta según el ' +
          'tamaño de la ventana del programala barra de estado es tan ancha como lo es';

procedure TForm1.FormCreate(Sender: TObject);
begin
  with StatusBar1.Panels[4] do
  begin
    Style:= psOwnerDraw;
    Text:= TEXTO;
  end;
end;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
begin
  if Panel.Index = 4 then
    StatusBar.Canvas.TextRect(Rect, Rect.Left, Rect.Top, TEXTO);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 19-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En realidad no es que deje un espacio. Más bien parece que, efectivamente, el texto está limitado a 127 caracteres:

Cita:
Empezado por MSDN
In Windows XP and earlier, the text for each part is limited to 127 characters. This limitation has been removed in Windows Vista.
Y para que en Vista muestre más de 127 caracteres, es necesario incluir un XPManifest si estamos usando Delphi 7. En otros casos habrá que proceder como indica ecfisa.

// Saludos
Responder Con Cita
  #9  
Antiguo 19-06-2012
J.Slann J.Slann is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 18
Poder: 0
J.Slann Va por buen camino
Gracias por las respuestas.

Efectivamente el problema era que se limitaba el espacio a 127 caracteres.
He hecho lo que indicaba ecfisa y ya me funciona bien.

Saludos
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
TStatusBar: problema al cambiar de color y mostrar el SizeGrid LoPiTaL OOP 1 24-06-2011 12:52:22
Cambiar el color de un panel de TStatusBar fide_uci Gráficos 4 03-02-2009 15:43:08
TStatusBar jymy788 Varios 4 28-09-2007 20:04:10
TStatusbar nenufer OOP 3 18-05-2006 20:47:13
Ayuda con TStatusBar astur_racing Varios 10 06-09-2004 16:43:50


La franja horaria es GMT +2. Ahora son las 04:27:46.


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