Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Высота Task Bar [D7, WinXP]


Dezmond ©   (2005-05-29 22:40:00) 

Привет всем!
Возникла необходимость знать высоту Task Bar'a.
Как это сделать? Возникла идея исользовать FindWindow применительно к окну с классом Shell_TrayWnd (в ХР это и есть таск бар), во всех ли версиях Windows класс таскбара называется так?

Спасибо!


KilkennyCat   (2005-05-30 02:19:00) [1]

то же самое, но с некоторыми дополнениями
http://www.codeproject.com/shell/trayposition.asp


Andy BitOff   (2005-05-30 01:56:00) [2]

Вот так правильнее будет, имхо =)


var
 ABData: TAppBarData;
 bAlwaysOnTop: Boolean; {Поверх окон}
 bAutoHide   : boolean; {Авт. убирать с экрана}
 ClRect      : TRect;   {Клиентские области}
 Rect        : TRect;
 Edge        : UInt;    {Местоположение TaskBar}
begin
 //определение положения TaskBar'a и его размер
 ABData.hWnd   := FindWindow('Shell_TrayWnd', nil);
 ABData.cbSize := sizeof(AppBarData);
 bAlwaysOnTop      := strToBool(IntToStr((SHAppBarMessage(ABM_GETSTATE, ABData) and  ABS_ALWAYSONTOP)));
 bAutoHide         := strToBool(IntToStr((SHAppBarMessage(ABM_GETSTATE, ABData) and  ABS_AUTOHIDE)));
 windows.GetClientRect(ABData.hWnd, ClRect);
 GetWindowRect(ABData.hwnd, rect);
 if (Rect.top >  0) Then Edge := ABE_BOTTOM else if (Rect.Bottom <  Screen.Height) Then Edge := ABE_TOP
   else if Rect.Right <  Screen.Width Then Edge := ABE_LEFT else Edge := ABE_RIGHT;
 //установка положения и изменение размеров формы на весь экран по высоте
 a:=0;
 if Edge=ABE_TOP then a:=clRect.Bottom;
 MainForm.Top:=a;
 a:=Screen.Height-clRect.Bottom-MainForm.Height;
 MainForm.Height:=MainForm.Height+a;
end;


Dezmond   (2005-05-29 23:33:00) [3]

-> Anatoly Podgoretsky ©   (29.05.05 23:05) [3]

Всё правильно, мне это и нужно было. Это для того, чтобы сделать ICQ-like окошко (как версии 5) для отображения новых сообщений. Оно должно появляться в нижнем-правом углу "над часиками". Если таскбар будет справа (слева) значит окошка будет "вылезать" прямо из-за границы экрана. Конечно надо ещё учитывать WorkAreaWidth на случай если тасбар будет справа.

Ещё раз спасибо. Вроде простая вещь, а застопорился )


Sergey Masloff   (2005-05-29 23:12:00) [4]

Anatoly Podgoretsky ©   (29.05.05 23:05) [3]
Да я просто телепат понял что человеку нужно. Просто вся доступная поверхность а тут WorkAreaHeight в самый раз ;-)


Anatoly Podgoretsky   (2005-05-29 23:05:00) [5]

Sergey Masloff   (29.05.05 22:45) [1]
Не войдет если рассположен слева или справа


Dezmond   (2005-05-29 22:47:00) [6]

Именно это!
Спасибо!!!


Sergey Masloff   (2005-05-29 22:45:00) [7]

Не подойдет

Screen.Height - Screen.WorkAreaHeight

Вообще WorkAreaHeight это размер рабочей области за вычетом таскбара может это тебе нужно?


Наверх

Титульная страница Поиск, карта сайта Написать письмо