Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Положение TaskBar'a, К какому краю десктопа он придочен? 
:(
    Опции темы
Dimich
Дата 25.2.2005, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 1
Всего: 7



Не могу что-то сообразить, подскажите плиз, как определить, к какому краю рабочего стола прилеплен TaskBar? И заодно получить его размеры?
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Bes
Дата 25.2.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



У Димыча легких вопросов не бывает. :-)
Могу только предположить, что таскбар в концепции винды это тоже окно. Стало быть у него есть свой идентификатор в системе. А дальше уже с ним работать, получить положение, размер и из этого с учетом разрешения рабочего стола вычислить куда прилеплен. Но это теоретически.
Где-то видел, как получить иденификатор, но сейчас уже не вспомню где, но точно можно.
PM MAIL   Вверх
Dimich
Дата 25.2.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 1
Всего: 7



Цитата(Bes @ 25.2.2005, 13:36)
У Димыча легких вопросов не бывает
- зато бывают тупые. Я просто когда спрошу, быстрее самому доходит видно...
Есть же Screen.DesktopRect и Screen.WorkAreaRect

--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
z-END
Дата 25.2.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Дернуто из DRKB smile
Код

var
 Form1: TForm1;

добавить следующий код:

AppBarData : TAppBarData;
bAlwaysOnTop, bAutoHide : boolean;
Clrect,rect : TRect;
Edge: UInt;

затем после слова Implementation пишем

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, 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;
end;


и осталось описать самое главное - обработчик нажатия кнопки:


procedure TForm1.Button1Click(Sender: TObject);
begin
 DetectTaskBar;

 StringGrid1.Cells[0,0] := 'Выше других окон';
 StringGrid1.Cells[0,1] := 'Автоматически убирать с экрана';
 StringGrid1.Cells[0,2] := 'Клиентская область';
 StringGrid1.Cells[0,3] := 'Оконная область';
 StringGrid1.Cells[0,4] := 'Края';

 if bAlwaysOnTop = true then
   StringGrid1.Cells[1,0] := 'true'
 else
   StringGrid1.Cells[1,0] := 'false';

 if bAutoHide = true then
   StringGrid1.Cells[1,1] := 'true'
 else
   StringGrid1.Cells[1,1] := 'false';

 StringGrid1.Cells[1,2] := IntToStr(Clrect.Left)+':'+IntToStr(Clrect.Top) +
 ':'+IntToStr(Clrect.Right)+':'+IntToStr(Clrect.Bottom);

 StringGrid1.Cells[1,3] := IntToStr(rect.Left)+':'+IntToStr(rect.Top) +
 ':'+IntToStr(rect.Right)+':'+IntToStr(rect.Bottom);

 StringGrid1.Cells[1,4] := IntToStr(Edge);
end;



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Cashey
Дата 25.2.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Цитата(Bes @ 25.2.2005, 13:36)
Могу только предположить, что таскбар в концепции винды это тоже окно

А разве это не элемент окна? И разве он может сам по себе быть прикреплен к рабочему столу? Может быть речь идет о прикрепление TaskBar к стороне окна?


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Dimich
Дата 25.2.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 1
Всего: 7



Однако могут быть еще ToolBar'ы.... И тут засада с Screen.DesktopRect и Screen.WorkAreaRect....
Добавлено @ 13:45
Ну и скорость у Вас, ребята!
z-END, спасибо! Я оценил Вашу помощь "+", а мне можно и "-" наверное поставить за такую невнимательность!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.