![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Высота 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 это размер рабочей области за вычетом таскбара может это тебе нужно?