Hola FideRosado.
Cita:
Empezado por FideRosado
... imprimo paneles en un ScrollBox, el cual por defectto los imprime en la parte superior, y eso es lo que me mmolesta, por lo menos saber como se puede imprimir desde abajo.. como se muestra la imagen..
|
En principio es muy simple, basta con fijar su propiedad
Align =
alBottom.
Pero... si deseas que los mensajes mas recientes vayan quedando debajo de los mas antiguos se complica un poco, ya que hay que forzar el órden por defecto de alineación
alBottom.
Te pongo un ejemplo de como podrías implementarlo de este último modo:
Código Delphi
[-]
...
implementation
uses Contnrs;
var
PnlList: TObjectList;
MsgCount: Integer = 1;
procedure TForm1.FormCreate(Sender: TObject);
begin
PnlList:= TObjectList.Create;
Timer1.Interval:= 1000;
Timer1.Enabled:= True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
const
PNL_HEIGHT = 60;
MENSAJES: array [1..5] of string = (
'Hola ¿ Como estas ?','Bién, ¿ Todavia de vacaciones ?','Si, vuelvo mañana',
'¿ Como está el clima allá ?','Ayer llovió pero hoy esta lindo');
PNL_COLOR: array[Boolean] of TColor = (clCream, clMoneyGreen);
var
pnl: TPanel;
i:Integer;
begin
ScrollBox1.DisableAlign;
for i:= PnlList.Count-1 downto 0 do
with TPanel(PnlList[i]) do
begin
Align:= alNone;
Top:= Top - PNL_HEIGHT;
end;
ScrollBox1.EnableAlign;
pnl:= TPanel.Create(Self);
pnl.Parent:= ScrollBox1;
pnl.Width:= ScrollBox1.Width-10;
pnl.Height:= PNL_HEIGHT;
pnl.Align:= alBottom;
pnl.Name:= 'PanelChat'+IntToStr(MsgCount);
pnl.Caption:= IntToStr(MsgCount)+') '+MENSAJES[MsgCount]+' ';
pnl.ControlStyle:= pnl.ControlStyle - [csParentBackground];
pnl.Color:= PNL_COLOR[Odd(MsgCount)];
PnlList.Add(pnl);
for i:= PnlList.Count-1 downto 0 do
TPanel(PnlList[i]).Align:= alBottom;
Inc(MsgCount);
if MsgCount = 6 then Timer1.Enabled:= False;
end;
...
procedure TForm1.FormDestroy(Sender: TObject);
begin
PnlList.Free;
end;
Salida del demo:
Saludos
