Видна ли панель задач? - PullRequest
1 голос
/ 21 ноября 2011

Мне нужно знать, назначена ли панель задач, но проверена ли «Автоматическая скрытие панели задач» и панель задач временно скрыта. У меня есть функция возвращает высоту панели задач, если она была назначена или ноль, если нет.

Но, если в Windows установлена ​​опция «Автоскрытие», функция по-прежнему возвращает высоту панели задач, хотя она не отображается, пока курсор не переместится к нижнему краю экрана.

Когда я установил Image.Height: = screen.height-MyTaskbarHeight он устанавливает высоту изображения, как если бы панель задач была видна постоянно.

В псевдокоде мне нужно

if Taskbar.Assigned then
if Taskbar.AutoHide.Checked then // Assume it is hidden
    Image.Height:=Screen.Height else
    Image.Height:=Screen.Height-MyTaskbarHeight;

Есть предложения?

Спасибо

Ответы [ 2 ]

7 голосов
/ 21 ноября 2011

Вы можете использовать функцию SHAppBarMessage

Uses
  ShellApi;

function  IsTaskbarAutoHideOn : Boolean;
Var
 ABData : TAppBarData;
begin
  ABData.cbSize := SizeOf(ABData);
  Result:= (SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE)<>0;
end;


function GetTaskBarRect(var ARect: TRect): Integer;
var
    ABData: TAppBarData;
begin
  ABData.cbSize := SizeOf(ABData);
  if SHAppBarMessage(ABM_GETTASKBARPOS, ABData) <> 0 then
  Result := ABData.uEdge;
  ARect  := ABData.rc;
end;
7 голосов
/ 21 ноября 2011

TAppBarData определен в ShellAPI.

var
  ABData : TAppBarData;
  State: Cardinal;
begin
  ABData.cbSize := sizeof(ABData);
  State := SHAppBarMessage(ABM_GETSTATE, ABData);
  Result := (State and ABS_AUTOHIDE) = ABS_AUTOHIDE;
end;
...