Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.14;
Скачать: CL | DM;

Вниз

TaskBar   Найти похожие ветки 

 
Dmk ©   (2003-05-03 14:32) [0]

Можно ли получить размеры и положение subj в координатах экрана?


 
Morfein ©   (2003-05-03 14:50) [1]

Пожалста:

var
rTrayWnd : TRECT;

begin
GetWindowRect(FindWindow("Shell_TrayWnd", nil), rTrayWnd);
end;


 
Юрий Зотов ©   (2003-05-03 15:01) [2]

Системный таскбар - это окно класса класса Shell_TrayWnd. Размер и положение любого окна дает функция GetWindowRect, а его хэндл можно получить, например, функцией FindWindow.

Но обычно прикладной программе требуется размер рабочей области экрана, а не самого таскбара (тем более, что таскбаров может быть несколько и они могут быть самоубирающимися). Его дает SystemParametersInfo с SPI_GETWORKAREA.


 
Song ©   (2003-05-03 15:10) [3]

ShAppBarMessage()+ABM_GETPOS


 
Юрий Зотов ©   (2003-05-03 16:21) [4]

> ShAppBarMessage()+ABM_GETPOS

Тут надо уточнить. Вероятно, имелось в виду ABM_GET TASKBARPOS. Но тогда результат не дает полного ответа - поскольку он не учитывает AUTOHIDE и всегда возвращает координаты ПОКАЗАННОГО таскбара, независимо от его фактического состояния. В то же время, GetWindowRect дает именно ТЕКУЩЕЕ состояние, а SystemParametersInfo - именно размер рабочей области (с автоматическим учетом AUTOHIDE и ALWAYSONTOP). Какой способ лучше - диктуется самой задачей.


 
Dmk ©   (2003-05-03 17:04) [5]

Спасибо за ответы всем.

Дело в том, что у меня для прокрутки окна используется
ScrollDC. Если мое окно перекрыто другим, то при прокрутке
все "смазывается". Задачу по перерисовке за Top-окнами я решил.
Но еще нужно перерисовывать если окно заползло под task bar.
Хотя может это по другому делается?


 
Юрий Зотов ©   (2003-05-03 18:38) [6]

Не сталкивался с такой задачей, но, думаю, система должна учитывать перекрытие окон автоматически (а таскбар - это тоже всего лишь окно). Наверное, я бы копнул в таком направлении:
1. Как получаете DC? Не для всего ли десктопа?
2. Можно попробовать ScrollWindow(Ex).


 
Dmk ©   (2003-05-03 19:52) [7]

Контекст получаю так: ScrollDC := GetDC(Form.handle);
А задача в том, что нужно как можно меньше использовать перерисовок в буфере. Поэтому все функции прорисовки клиентской части окна отключены. Происходит дорисовка по краям в зависимости
от величины сдвига. Поэтому и требуется восстановление
контента средствами моего приложения а не системы.
Под обычными окнами восстанавливать научился, а вот про
task bar позабыл.


 
Dmk ©   (2003-05-04 00:26) [8]

Спасибо Вам огромное!!!!! Все работает!
Осталось только сделать отрисовку в случае
попадания окна за границы клиентской части
родительского окна.
Надеюсь справлюсь сам :)



Страницы: 1 вся ветка

Текущий архив: 2003.07.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
4-44951
HollowMan
2003-05-12 15:23
2003.07.14
Как отследить положение мыши находящейся вне области программы?


11-44619
Konsool
2002-11-06 14:39
2003.07.14
Не найден Exptlntf.dcu


4-44942
HotDog
2003-05-13 13:51
2003.07.14
Время отключения дисков


1-44762
Man
2003-07-01 20:41
2003.07.14
Подскажите как сравнить 2 пер.


14-44886
Aristarh
2003-06-26 22:25
2003.07.14
Депутаты запретили подросткам возбуждаться