如何使弹出窗口出现在 App 的 TASKBAR 按钮的确切位置
How to make a popup appear on the exact location of App's TASKBAR Button
当 Application.OnActivate 发生时,我目前在 SysTray 图标附近弹出一个弹出窗口。
但是我现在需要在任务栏(开始菜单旁边)上单击应用程序按钮的地方弹出它。
如何找出我的应用的任务栏图标刚刚被点击的确切位置?
我知道我可以简单地让应用程序表单出现并要求用户单击一个按钮来弹出一个弹出窗口,但我需要更多 simpler/faster 才能为我的应用程序使用 GUI。
if (mode = 2) or ( (x =0) and (y=0) ) then begin
ABData.cbSize := SizeOf(TAppBarData);
//ABData.hWnd := FindWindow('Shell_TrayWnd', nil);
SHAppBarMessage(ABM_GETTASKBARPOS, ABData);
with ABData.Rc do begin
if (Top > 0) then Edge := ABE_BOTTOM
else if (Bottom < Screen.Height) then Edge := ABE_TOP
else if Right < Screen.Width then Edge := ABE_LEFT
else Edge := ABE_RIGHT;
end;
X := 1; Y := 1;
if Edge = ABE_BOTTOM then begin
X := ABData.Rc.Right-20;
Y := ABData.Rc.Top;
end else if Edge = ABE_TOP then begin
X := ABData.Rc.Right;
Y := ABData.Rc.Top;
end else if Edge = ABE_LEFT then begin
X := ABData.Rc.Left;
Y := ABData.Rc.Bottom;
end else if Edge = ABE_RIGHT then begin
X := ABData.Rc.Right;
Y := ABData.Rc.Bottom;
end;
end;
如果“任务栏图标”是指您拥有的系统托盘图标,那么您可以使用 Shell_NotifyIconGetRect()
。但是,如果您指的是任务栏按钮,则没有(官方)方法可以确定其在任务栏上的位置。
看来最简单的解决方案是检查鼠标位置并弹出鼠标所在的位置:
pt := Mouse.CursorPos;
x := pt.x;
y:= pt.y;
PS:C#和C++中似乎还有另一种解决方案:
当 Application.OnActivate 发生时,我目前在 SysTray 图标附近弹出一个弹出窗口。 但是我现在需要在任务栏(开始菜单旁边)上单击应用程序按钮的地方弹出它。 如何找出我的应用的任务栏图标刚刚被点击的确切位置?
我知道我可以简单地让应用程序表单出现并要求用户单击一个按钮来弹出一个弹出窗口,但我需要更多 simpler/faster 才能为我的应用程序使用 GUI。
if (mode = 2) or ( (x =0) and (y=0) ) then begin
ABData.cbSize := SizeOf(TAppBarData);
//ABData.hWnd := FindWindow('Shell_TrayWnd', nil);
SHAppBarMessage(ABM_GETTASKBARPOS, ABData);
with ABData.Rc do begin
if (Top > 0) then Edge := ABE_BOTTOM
else if (Bottom < Screen.Height) then Edge := ABE_TOP
else if Right < Screen.Width then Edge := ABE_LEFT
else Edge := ABE_RIGHT;
end;
X := 1; Y := 1;
if Edge = ABE_BOTTOM then begin
X := ABData.Rc.Right-20;
Y := ABData.Rc.Top;
end else if Edge = ABE_TOP then begin
X := ABData.Rc.Right;
Y := ABData.Rc.Top;
end else if Edge = ABE_LEFT then begin
X := ABData.Rc.Left;
Y := ABData.Rc.Bottom;
end else if Edge = ABE_RIGHT then begin
X := ABData.Rc.Right;
Y := ABData.Rc.Bottom;
end;
end;
如果“任务栏图标”是指您拥有的系统托盘图标,那么您可以使用 Shell_NotifyIconGetRect()
。但是,如果您指的是任务栏按钮,则没有(官方)方法可以确定其在任务栏上的位置。
看来最简单的解决方案是检查鼠标位置并弹出鼠标所在的位置:
pt := Mouse.CursorPos;
x := pt.x;
y:= pt.y;
PS:C#和C++中似乎还有另一种解决方案: