我使用以下方法隐藏了我的主要应用程序:

Application.ShowMainForm:= False;


该应用程序使用了TTrayIcon,我已为其分配了一个弹出菜单。

通过使用并选择“任务栏图标”中的“弹出菜单”之一,我想使我的应用程序再次可见,但是我希望将应用程序的位置弹出到任务栏上方。

默认情况下,Windows任务栏位于底部,因此在这种情况下,我的应用程序将显示在时钟上方的右下方-当然,用户可以移动任务栏并调整其大小,因此我需要一种明确了解这些指标的方法。

简而言之,我希望我的应用程序出现在系统时钟上方(或旁边)的任务栏的一角。

提前致谢。

最佳答案

使用SHAppBarMessage获取任务栏的位置:

SHAppBarMessage(ABM_GETTASKBARPOS, appBarData);


以及“主要”监视器的大小:

nScreenWidth := GetSystemMetrics(SM_CXSCREEN);
nScreenHeight := GetSystemMetrics(SM_CYSCREEN);


并且您可以算出任务栏位于


最佳
剩下
底部



屏幕的大小及其大小。

{Calculate taskbar position from its window rect. However,
 on XP it may be that the taskbar is slightly larger or smaller than the
 screen size. Therefore we allow some tolerance here.
}
if NearlyEqual(rcTaskbar.Left, 0, TASKBAR_X_TOLERANCE) and
        NearlyEqual(rcTaskbar.Right, nScreenWidth, TASKBAR_X_TOLERANCE) then
begin
    // Taskbar is on top or on bottom
    if NearlyEqual(rcTaskbar.Top, 0, TASKBAR_Y_TOLERANCE) then
        FTaskbarPlacement := ABE_TOP
    else
        FTaskbarPlacement := ABE_BOTTOM;
end
else
begin
    // Taskbar is on left or on right
    if NearlyEqual(rcTaskbar.Left, 0, TASKBAR_X_TOLERANCE) then
        FTaskbarPlacement := ABE_LEFT
    else
        FTaskbarPlacement := ABE_RIGHT;
end;


这样您可以弹出您的吐司:

case FTaskbarPlacement of
ABE_RIGHT:
   begin
      Self.Left := rcTaskbar.Left-Self.Width;
      Self.Top := rcTaskbar.Bottom - Self.Height;
   end;
ABE_LEFT:
   begin
      Self.Left := rcTaskbar.Right;
      Self.Top := rcTaskbar.Bottom - Self.Height;
   end;
 ABE_TOP:
    begin
       Self.Left := rcTaskbar.Right - Self.Height;
       Self.Top := rcTaskbar.Bottom;
    end;
 else //ABE_BOTTOM
    // Taskbar is on the bottom or Invisible
    Self.Left := rcTaskbar.Right - Self.Width;
    Self.Top := rcTaskbar.Top - Self.Height;
 end;

关于delphi - 获取任务栏位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6565048/

10-12 14:56