Estoy haciendo una aplicación en Delphi 6 y necesito poner un botón a una ventana y que al pulsarlo se mueva hasta la barra de tareas, tanto si esta está en horizontal como en vertical e independientemente del tamaño que tenga la barra de tareas.
Lo que quiero es mover la ventana de la aplicación justo encima de la barra de tareas de Windows (donde aparece el botón "Inicio", las aplicaciones abiertas y el reloj).
Al menos me gustaría saber cómo obtener la posición de la barra de tareas de Windows (Windows Task Bar) (altura y posición).
Publicado:
Vie May 15, 2009 5:42 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Mover ventana junto a barra de tareas
Anuncios
varios escribió:
Estoy haciendo una aplicación en Delphi 6 y necesito poner un botón a una ventana y que al pulsarlo se mueva hasta la barra de tareas, tanto si esta está en horizontal como en vertical e independientemente del tamaño que tenga la barra de tareas.
Lo que quiero es mover la ventana de la aplicación justo encima de la barra de tareas de Windows (donde aparece el botón "Inicio", las aplicaciones abiertas y el reloj).
Al menos me gustaría saber cómo obtener la posición de la barra de tareas de Windows (Windows Task Bar) (altura y posición).
Tal vez te sirva este código, te ponemos todo el código fuente (source code) del formulario completo, para que te funcione tienes que añadir un formluario (TForm) y añadirle un TButton y dos TLabel:
type
TformMenuPrincipal = class(TForm)
Button1: TButton;
lInfo1: TLabel;
lInfo2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
formMenuPrincipal: TformMenuPrincipal;
implementation
{$R *.dfm}
function rectanguloBarraTareas(var ARect : TRect) : Integer;
var
datosBarra : TAppBarData;
begin
datosBarra.Hwnd := FindWindow('Shell_TrayWnd', nil);
if datosBarra.Hwnd = 0 then
RaiseLastWin32Error;
datosBarra.cbSize := SizeOf(TAppBarData);
if SHAppBarMessage(ABM_GETTASKBARPOS, datosBarra) = 0 then
raise Exception.Create('Error al obtener la posición de la barra de tareas.');
Result := datosBarra.uEdge;
ARect := datosBarra.rc;
end;
procedure TformMenuPrincipal.Button1Click(Sender: TObject);
var
rectBarra : TRect;
destinoIzquierda : Integer;
destinoArriba : Integer;
begin
destinoIzquierda := Left;
destinoArriba := Top;
case rectanguloBarraTareas (rectBarra) of
ABE_BOTTOM:
begin
destinoIzquierda := Trunc((Screen.Width - Width) / 2.0);
destinoArriba := rectBarra.Top - Height;
end;
ABE_LEFT:
begin
destinoArriba := Trunc((Screen.Height - Height) / 2.0);
destinoIzquierda := rectBarra.Right;
end;
ABE_RIGHT:
begin
destinoArriba := Trunc((Screen.Height - Height) / 2.0);
destinoIzquierda := rectBarra.Left - Width;
end;
ABE_TOP:
begin
destinoIzquierda := Trunc((Screen.Width - Width) / 2.0);
destinoArriba := rectBarra.Bottom;
end;
end;
lInfo1.Caption := 'Encontrada barra de tareas de Windows en: ';
lInfo2.Caption := Format('Arriba: %d, Izquierda: %d, Abajo: %d, Derecha: %d',
[rectBarra.Top, rectBarra.Left, rectBarra.Bottom, rectBarra.Right]);
//mover aplicación a la posición de la barra de tareas
while (Left <> destinoIzquierda) or (Top <> destinoArriba) do
begin
if Left < destinoIzquierda then
Left := Left + 1
else
if Left <> destinoIzquierda then
Left := Left - 1;
if Top < destinoArriba then
Top := Top + 1
else
if Top <> destinoArriba then
Top := Top - 1;
Application.ProcessMessages;
end;
end;
end.
La función que obtiene un tipo de datos "TRect" con la altura, la anchura, la posición derecha y la izquierda (un rectángulo) de la barra de tareas de Windows es:
Código:
function rectanguloBarraTareas(var ARect : TRect) : Integer;
var
datosBarra : TAppBarData;
begin
datosBarra.Hwnd := FindWindow('Shell_TrayWnd', nil);
if datosBarra.Hwnd = 0 then
RaiseLastWin32Error;
datosBarra.cbSize := SizeOf(TAppBarData);
if SHAppBarMessage(ABM_GETTASKBARPOS, datosBarra) = 0 then
raise Exception.Create('Error al obtener la posición de la barra de tareas.');
Result := datosBarra.uEdge;
ARect := datosBarra.rc;
end;
Que utiliza la función SHAppBarMessage del API de Windows.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A