Foros Club Delphi

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

J.Slann 18-06-2012 16:32:23

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.

roman 18-06-2012 17:41:44

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

J.Slann 18-06-2012 17:56:12

No he cambiado nada (o al menos intencionadamente), me puedes indicar que propiedades compruebo?

Aquí subo la foto:


Gracias por tu respuesta.

Saludos

Casimiro Notevi 18-06-2012 22:15:13

¿Y el texto es más largo de lo que aparece ahí?

J.Slann 19-06-2012 03:27:55

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)

MartinS 19-06-2012 03:49:44

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?

ecfisa 19-06-2012 04:58:18

Cita:

Empezado por J.Slann (Mensaje 435479)
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.

roman 19-06-2012 06:33:25

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

J.Slann 19-06-2012 19:28:11

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


La franja horaria es GMT +2. Ahora son las 02:19:52.

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