RE:¿como hacer una barra como la barra de tarea?
Si lo entiendo bien, lo que quieres es crear una ventana en un lado de la pantalla y que las demas ventanas al maximiza
se adapten a ella.
bien entonces aqui va un poco de codigo.
Esto es el codigo de un formulario con los eventos OnClose y OnCreate
En OnCreate se da forma a la ventana y se modifica el area de trabajo
En OnClose se deja como estaba
El procedure WMINICHANGE se utiliza por si otro programa modifica el area de trabajo
La variable OldWorkArea guarda el valor de la anterior area de trabajo y Workarea el de la nuestra
Bien, si te queda alguna duda me lo dices y te contestare, o si prefieres que te mande el codigo
completo tambien me lo dices y te lo mando por correo.
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
OldWorkArea: TRect;
Workarea: TRect;
procedure WMINICHANGE (var Msg: TMessage); message WM_WININICHANGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMINICHANGE (var Msg: TMessage);
begin
// Por si otro programa modifica el area de trabajo
SystemParametersInfo(SPI_SETWORKAREA,0,@WORKAREA,SPIF_SENDWININICHANGE);
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//Obtenemos el area de trabajo anterior
SystemParametersInfo(SPI_GETWORKAREA,0,@OLDWORKAREA,0);
Workarea:= OldWorkArea;
// Ajustamos el tamaño, posicion y estilo de la ventana
// Sera una barra a la derecha de la pantalla
borderStyle:= bsnone;
formstyle:= fsStayOnTop;
width:= 25; // Tamaño de la barra
height:= OldWorkarea.Bottom - OldWorkarea.Top;
Top:= OldWorkarea.Top;
// Creamos un area de trabajo nueva
// El area de trabajo es el espacio que ocupa una ventana maximizada
WorkArea.Right:= OldWorkarea.Right - width;
Left:= WorkArea.Right;
SystemParametersInfo(SPI_SETWORKAREA,0,@WORKAREA,SPIF_SENDWININICHANGE);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WORKAREA:= OLDWORKAREA;
// Volvemos a dejar el area de trabajo como estaba
SystemParametersInfo(SPI_SETWORKAREA,0,@OLDWORKAREA,SPIF_SENDWININICHANGE);
end;