Delphi - Obtener área de un StatusPanel

 
Vista:

Obtener área de un StatusPanel

Publicado por Fer (117 intervenciones) el 29/08/2001 14:27:55
Quisiera saber cómo puedo obtener el rectángulo (TRect) de un StatusPanel perteneciente a una StatusBar.

Quiero crear dinámicamente una barra de progreso en uno de los paneles de la barra de estado y el efecto que consigo no es el deseado (la barra de progreso no da la impresión de estar dentro del panel).

Ejemplo de código:

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
vBarra: TProgressBar;
begin

vBarra := TProgressBar.Create(Self);

vBarra.Min := 0;
vBarra.Max := 100000;
vBarra.Step := 1;
vBarra.Position := 0;
vBarra.parent := Statusbar1;
vBarra.Top := 0;
vBarra.Left := StatusBar1.Panels[0].Width;
vBarra.width := StatusBar1.Panels[1].Width;
vBarra.Height := StatusBar1.Height;

StatusBar1.Update;

for i:=0 to 100000 do begin

vb.StepIt;

end;

vBarra.Free;

end;

Con este código, la barra de progreso no aparece correctamente alineada con los otros paneles de la barra de estado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Obtener área de un StatusPanel

Publicado por Ernesto D'Spirito (706 intervenciones) el 30/08/2001 00:07:09
Las coordenadas de los paneles de una barra de estado las guarda Windows y no provee una función para recurperarlas directamente, que yo sepa por lo menos, aunque sí se pueden obtener usando el evento OnDrawPanel.

De todos modos, eun tu caso, antes que meterte con eso te sugiero una pequeña modificación en tu código:

vBarra.Top := 2;
vBarra.Left := StatusBar1.Panels[0].Width + 2;
vBarra.width := StatusBar1.Panels[1].Width - 2;
vBarra.Height := StatusBar1.Height - 2;

Con eso la barra de progreso se mostrará ocupando toda el área del segundo panel. Si la quieres más adentro puedes modificar el código así:

vBarra.Top := 4;
vBarra.Left := StatusBar1.Panels[0].Width + 4;
vBarra.width := StatusBar1.Panels[1].Width - 6;
vBarra.Height := StatusBar1.Height - 6;

Es decir que por cada pixel que desplazes la posición superior izquierda tienes que modificar el ancho y la altura en dos píxeles.

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar