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

uses.., ShellApi;
var
 AppBarData: TAppBarData;
 bAlwaysOn: Boolean; {Поверх окон}
 bAutoHide: boolean; {Авт. убирать с экрана}
 ClRect: TRect; {Клиентские области}
 Rect: TRect;
 Edge: UInt; {Местоположение TaskBar}
procedure DetectTaskBar;
begin
 AppBarData.hWnd := FindWindow('Shell_TrayWnd', nil);
 AppBarData.cbSize := sizeof(AppBarData);
 bAlwaysOn := (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;


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

{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, , Right, Bottom]);
  case tabd.uEdge of
  ABE_LEFT: ShowMessage('Left Position' + PosString);
  ABE_TOP: ShowMessage(' Position' + PosString);
  ABE_RIGHT: ShowMessage('Right Position' + PosString);
  ABE_BOTTOM: ShowMessage('Bottom Position' + PosString);
  end;
 end;

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

{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. > scrH div 2) and (T.Right >= scrW) then

  Result := _BOTTOM

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

  Result := _TOP

  else if (T.Left < scrW div 2) and (T. <= 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(' Position');

  _RIGHT: ShowMessage('Right Position');

  _BOTTOM: ShowMessage('Bottom Position');

  end;

 end;

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

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...