Bueno como dijo el ilustre señor Esperalta "ratón que conoce un agujero sólo pronto le caza el gato", así que vamos a ver cuantos agujeros encontramos.
La primera solución podría ser obtener las coordenadas del propio systray:
Código Delphi
[-]
function GetSysTrayRect(var R: TRect): Boolean;
var
hWnd: THandle;
begin
Result:= FALSE;
hWnd:= FindWindow('Shell_TrayWnd',nil);
if hWnd <> 0 then
begin
hWnd:= FindWindowEx(hWnd,0,'TrayNotifyWnd',nil);
if hWnd <> 0 then
Result:= GetWindowRect(hWnd,R);
end;
end;
O incluso si queremos dejar aparte el área destinada al reloj y solo obtener la destinada a los iconos, podemos afinar un poco más el código:
Código Delphi
[-]
function GetSysTrayRect(var R: TRect): Boolean;
var
hWnd: THandle;
begin
Result:= FALSE;
hWnd:= FindWindow('Shell_TrayWnd',nil);
if hWnd <> 0 then
begin
hWnd:= FindWindowEx(hWnd,0,'TrayNotifyWnd',nil);
begin
hWnd:= FindWindowEx(hWnd,0,'SysPager',nil);
if hWnd <> 0 then
begin
hWnd:= FindWindowEx(hWnd,0,'ToolbarWindow32',nil);
if hWnd <> 0 then
Result:= GetWindowRect(hWnd,R);
end;
end;
end;
end;
Un ejemplo de las dos funciones anteriores seria el siguiente:
Código Delphi
[-]
var
R: TRect;
begin
if GetSysTrayRect(R) then
ShowMessage(Format('Top=%d Left=%d Bottom=%d Right=%d',
[R.Top,R.Left,R.Bottom,R.Right]));
end;
Pero ahora que tenemos las coordenadas de la bandeja del sistema, pienso que en realidad no te hace falta para nada
. Porque lo realmente bonito son esos globitos amarillos que muestran algunos iconos para notificar algo, seguro que los has visto alguna vez. Y para mostrarlos solo hay que usar un par de funciones de la API y ellas se encargan de todo el trabajo. ¿que opinas?