![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, где находится панель ТаскБара?
TankMan © (2002-10-13 02:33:00)У меня вот проблема... вобщем сабж. И еще как узнать какой она высоты ?
TankMan (2002-10-15 03:41:00) [1]Спасибо попробую...
turusov (2002-10-14 08:40:00) [2]TAppBarData - ShellAPI
turusov (2002-10-14 08:38:00) [3]Где взял инф. для написания не помню, не спрашивате.
procedure GetDesktop(var R: TRect; var Edge: UInt);
var
AppBarData : TAppBarData;
bAlwaysOnTop, //Taskbar всегда на экране
bAutoHide : boolean;
Clrect, WRect : TRect;
// Edge: UInt; <-- //Местоположение TaskBar
{---}
procedure DetectTaskBar;
begin
AppBarData.hWnd := FindWindow("Shell_TrayWnd", nil);
AppBarData.cbSize := sizeof(AppBarData);
bAlwaysOnTop := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_ALWAYSONTOP) <> 0;
bAutoHide := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_AUTOHIDE) <>0;
GetClientRect(AppBarData.hWnd, Clrect);
GetWindowRect(AppBarData.hwnd, WRect);
if (WRect.top > 0) then Edge := ABE_BOTTOM
else
if (WRect.bottom < screen.height) then Edge:=ABE_TOP
else
if WRect.right < screen.width then Edge:=ABE_LEFT
else
Edge:=ABE_RIGHT;
end;
{---}
begin
try
R:= Rect(Screen.DesktopLeft, Screen.DesktopTop,
Screen.DesktopWidth, Screen.DesktopHeight);
DetectTaskBar;
case Edge of
ABE_LEFT: begin
R.Left:= Screen.DesktopLeft + Clrect.Right + 4;
R.Right:= Screen.DesktopWidth - R.Left - 4;
end;
ABE_TOP: begin
R.Top:= Screen.DesktopTop + Clrect.Bottom + 4;
R.Bottom:= Screen.DesktopHeight - R.Top - 4;
end;
ABE_RIGHT: R.Right:= Screen.DesktopWidth - Clrect.Right - 4;
ABE_BOTTOM: R.Bottom:= Screen.DesktopHeight - Clrect.Bottom - 4;
end;//case
except
R:= Rect(Screen.DesktopLeft, Screen.DesktopTop,
Screen.DesktopWidth, Screen.DesktopHeight);
Edge:= ABE_BOTTOM;
end;
end;
Song (2002-10-13 10:30:00) [4]ShAppBarMessage()
Совет (2002-10-13 09:38:00) [5]Зайдите на сайт "Delphi X-Files" (www.delphixfiles.narod.ru). Там все написано!
pirat (2002-10-13 09:30:00) [6]берете winsight, находите окно таскбара (и как называется его оконный класс) и на каком он уровне вложенности (и путь к нему через его parents). В программе
с помощью EnumChildWindows отталкиваясь от окна с handle 0 доходите до таск бара. А дальше GetWindowRect или нечто подоюное (см MSDN)