Определение координат расположения TaskBar

Previous  Top  Next

    
 

 

 

 

Code:

uses.., ShellApi;

 

var

AppBarData: TAppBarData;

bAlwaysOnTop: Boolean; {Поверх окон}

bAutoHide: boolean; {Авт. убирать с экрана}

ClRect: TRect; {Клиентские области}

Rect: TRect;

Edge: UInt; {Местоположение TaskBar}

 

procedure DetectTaskBar;

begin

AppBarData.hWnd := FindWindow('Shell_TrayWnd', nil);

AppBarData.cbSize := sizeof(AppBarData);

bAlwaysOnTop := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_ALWAYSONTOP) < > 0;

bAutoHide := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_AUTOHIDE) < > 0;

GetClientRect(AppBarData.hWnd, ClRect.rc);

GetWindowRect(AppBarData.hwnd, rect);

if (Rect.top > 0) then

   Edge := ABE_BOTTOM

else if (Rect.Bottom < Screen.Height) then

   Edge := ABE_TOP

else if Rect.Right < Screen.Width then

   Edge := ABE_LEFT

else

   Edge := ABE_RIGHT;

end;

 

 

 

©Drkb::01771

       

Взято с http://delphiworld.narod.ru

 


 

 

Code:

{With SHAppBarMessage }

 

uses

  ShellAPI;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  tabd: TAppBarData;

  PosString: string;

begin

  FillChar(tabd, SizeOf(TAppBarData), 0);

  tabd.cbSize := SizeOf(TAppBarData);

  if SHAppBarMessage(ABM_GETTASKBARPOS, Tabd) = 0 then Exit;

  with Tabd.rc do

    PosString := Format(' (%d, %d);(%d, %d) ', [Left, Top, Right, Bottom]);

  case tabd.uEdge of

    ABE_LEFT: ShowMessage('Left Position' + PosString);

    ABE_TOP: ShowMessage('Top Position' + PosString);

    ABE_RIGHT: ShowMessage('Right Position' + PosString);

    ABE_BOTTOM: ShowMessage('Bottom Position' + PosString);

  end;

end;

 

©Drkb::01772

Взято с сайта: http://www.swissdelphicenter.ch


 

Code:

{With FindWindow, GetWindowRect }

 

type

  TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT, _NONE);

 

function GetTaskBarPos: TTaskBarPos;

var

  hTaskbar: HWND;

  T: TRect;

  scrW, scrH: integer;

begin

  hTaskBar := FindWindow('Shell_TrayWnd', nil);

  if hTaskbar <> 0 then

  begin

    GetWindowRect(hTaskBar, T);

    ScrW := Screen.Width;

    ScrH := Screen.Height;

    if (T.Top > scrH div 2) and (T.Right >= scrW) then

      Result := _BOTTOM

    else if (T.Top < scrH div 2) and (T.Bottom <= scrW div 2) then

      Result := _TOP

    else if (T.Left < scrW div 2) and (T.Top <= 0) then

      Result := _LEFT

    else // the last "if" is not really needed

   if T.Left >= ScrW div 2 then

      Result := _RIGHT;

  end;

end;

 

procedure TForm1.Button5Click(Sender: TObject);

var

  TaskBarPos: TTaskBarPos;

begin

  TaskBarPos := GetTaskBarPos;

  case TaskBarPos of

    _LEFT: ShowMessage('Left Position');

    _TOP: ShowMessage('Top Position');

    _RIGHT: ShowMessage('Right Position');

    _BOTTOM: ShowMessage('Bottom Position');

  end;

end;

 

©Drkb::01773

Взято с сайта: http://www.swissdelphicenter.ch