[Delphi] タスクバーの大きさを知る

タスクバーの位置や大きさを知るにはどうしたらよいのでしょうか? タスクバーの大きさを知るためには、SHAppBarMessage APIを使います。 このAPIでタスクバーの大きさがわかるのですが、このAPIで得られる値はなぜかタスクバーが画面をはみ出していることを示しています。
タスクバーの大きさを知りたい理由が、タスクバー以外の部分の画面の大きさを知るということであれば、SystemParametersInfo APIで知ることができるので、こちらを使うとよいでしょう。

サンプルプログラムのダウンロードは→[Delphi FAQ用サンプル] タスクバーの大きさを知る

implementation

uses
  ShellApi;

{$R *.DFM}

procedure TForm1.btnGetTaskBarSizeClick(Sender: TObject);
var
  AppBarData: TAPPBARDATA;
  rc: TRect;
begin
  // タスクバーの大きさ取得 **********************
  AppBarData.cbSize := sizeof(TAPPBARDATA);
  SHAppBarMessage(ABM_GETTASKBARPOS, AppBarData);
  // 取得した情報をMemoコンポに表示
  with Memo1, AppBarData do
  begin
    Clear;
    Lines.Add('タスクバーの大きさ');
    Lines.Add(Format('Left   : %4d', [rc.Left]));
    Lines.Add(Format('Right  : %4d', [rc.Right]));
    Lines.Add(Format('Top    : %4d', [rc.Top]));
    Lines.Add(Format('Bottom : %4d', [rc.Bottom]));
  end;

  // タスクバー以外のスクリーンの大きさ取得 *****
  SystemParametersInfo(SPI_GETWORKAREA, 0, @rc, 0);
  // 取得した情報をMemoコンポに表示
  with Memo1 do
  begin
    Lines.Add('タスクバー以外の部分の大きさ');
    Lines.Add(Format('Left   : %4d', [rc.Left]));
    Lines.Add(Format('Right  : %4d', [rc.Right]));
    Lines.Add(Format('Top    : %4d', [rc.Top]));
    Lines.Add(Format('Bottom : %4d', [rc.Bottom]));
  end;
end;
end.

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0032