Ver Mensaje Individual
  #3  
Antiguo 28-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
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?
Responder Con Cita