|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Отображение формы в нижнем правом углу над панелью задач |
|
[решено] Отображение формы в нижнем правом углу над панелью задач
|
Пользователь Сообщения: 61 |
Профиль | Отправить PM | Цитировать как отобразить созданную форму в нижнем правом углу над панелью задач. Как делал я:
1. узнаем ширину раб.стола (макро - @DesktopWidth) 2. узнаем высоту раб.стола (макро - @DesktopHeight) 3. вычитаем из 1-го ширину своей формы (макро нет, можно ли как то узнать программно) 4. вычитаем из 2-го высоту своей формы (макро нет, можно ли как то узнать программно) 3 и 4 по идее нужные координаты формы ньюансы - по 4 пункту, почти у всех есть панель задач как вычислить ее высоту, чтобы форма была строго над панелью пробовал вычитать из 4 пункта еще высоту панели задач, определял через AU3Info (получилось 30), все равно ниже вычел еще раз т.е. уже 60 более менее но теперь чуть выше, в чем загвоздка и почему надо вычитать 2 раза высоту панели задач. Кстати Qip например сам пристыковывается к краю панели задач ровно ровно, как такого добиться. И что делать у кого панель задач сбоку или вообще сверху? |
|
Отправлено: 14:41, 16-09-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать #include <GUIConstantsEx.au3> $hGUI = GUICreate("_WinMoveAboveTaskBar Demo", 200, 500) GUISetState(@SW_SHOW) _WinMoveAboveTaskBar($hGUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _WinMoveAboveTaskBar($hWin) Local $aTaskBar_Pos = WinGetPos("[CLASS:Shell_TrayWnd]") Local $aWin_Pos = WinGetPos($hWin) Local $aClient_Size = WinGetClientSize($hWin) Local $iBorder_Width = ($aWin_Pos[2] - $aClient_Size[0]) Local $iCaption_Height = ($aWin_Pos[3] - $aClient_Size[1]) Local $iLeft = (@DesktopWidth-$aClient_Size[0]) - $iBorder_Width Local $iTop = (@DesktopHeight-$aClient_Size[1]-$aTaskBar_Pos[3]) - $iCaption_Height WinMove($hWin, "", $iLeft, $iTop) EndFunc |
------- Отправлено: 15:21, 16-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 553
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Я вот себе делал ... если панель не внизу - то окошко создаётся посередине десктопа. #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $aPositionToolBar[3] Global $aPositionToolBar = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:ToolbarWindow32; INSTANCE:2]") Switch _PosToolbarWindow() Case 1 $WIDTH_GUI = 280 $HEIGHT_GUI = 70 $TOP_GUI = @DesktopHeight - $HEIGHT_GUI * 1.35 - $aPositionToolBar[3] $LEFT_GUI = @DesktopWidth - $WIDTH_GUI - 5 Case 2 To 5 $WIDTH_GUI = 280 $HEIGHT_GUI = 70 $LEFT_GUI = @DesktopWidth / 2 - $WIDTH_GUI / 2 $TOP_GUI = @DesktopHeight / 2 - $HEIGHT_GUI / 2 EndSwitch GUICreate("", $WIDTH_GUI, $HEIGHT_GUI, $LEFT_GUI, $TOP_GUI, -1, BitOR($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE)) GUISetState() Do Until GUIGetMsg() = -3 Exit Func _PosToolbarWindow() Global $aReturnValue[5] $aReturnValue[0] = 1 $aReturnValue[1] = 2 $aReturnValue[2] = 3 $aReturnValue[3] = 4 $aReturnValue[4] = 5 Local $vPosToolbarWindow = ControlGetPos( "[CLASS:Shell_TrayWnd]", "", "[CLASS:ReBarWindow32; INSTANCE:1]") Local $vPosProgramManager = ControlGetPos( "[CLASS:Progman]", "", "[CLASS:SysListView32; INSTANCE:1]") If $vPosProgramManager[2] = @DesktopWidth And $vPosProgramManager[3] = @DesktopHeight Then Return $aReturnValue[4] Else If $vPosToolbarWindow[1] = 0 Then If $vPosProgramManager[1] = 0 Then Return $aReturnValue[0] If $vPosProgramManager[1] > 0 Then Return $aReturnValue[1] EndIf If $vPosToolbarWindow[0] = 0 Then If $vPosProgramManager[0] = 0 Then Return $aReturnValue[2] If $vPosProgramManager[0] > 0 Then Return $aReturnValue[3] EndIf EndIf EndFunc |
|
Отправлено: 17:21, 16-09-2009 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата FlatX007:
|
|
------- Отправлено: 21:35, 16-09-2009 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата FlatX007:
#include <GUIConstantsEx.au3> $hGUI = GUICreate("_WinMoveAboveTaskBar Demo", 200, 500) GUISetState(@SW_SHOW) _WinStickToRightCorner($hGUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _WinStickToRightCorner($hWin) Local $aWin_Pos = WinGetPos($hWin) Local $aClient_Size = WinGetClientSize($hWin) Local $iBorder_Width = ($aWin_Pos[2] - $aClient_Size[0]) Local $iCaption_Height = ($aWin_Pos[3] - $aClient_Size[1]) Local Const $SPI_GETWORKAREA = 48 Local $stRECT = DllStructCreate("long;long;long;long") Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", _ "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0) If @error Or $SPIRet[0] = 0 Then Return SetError(1, 0, 0) Local $sRightArea = DllStructGetData($stRECT, 3) Local $sBottomArea = DllStructGetData($stRECT, 4) Local $iTop = (@DesktopHeight-(@DesktopHeight-$sBottomArea)-$aClient_Size[1]) - $iCaption_Height Local $iLeft = (@DesktopWidth-$aClient_Size[0]) - $iBorder_Width If $sRightArea < @DesktopWidth Then $iLeft -= (@DesktopWidth - $sRightArea) WinMove($hWin, "", $iLeft, $iTop) EndFunc |
||
------- Отправлено: 22:21, 16-09-2009 | #5 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Использовал пример из второго сообщения,
Подведу итоги: Чтобы спозиционировать форму над панелью задач нужно 1. Знать где она, панель задач, находится (справа, слева, сверху или как обычно снизу) 2. Знать размеры панели задач 2. Знать размеры формы
X-координата=Ширина раб.стола- размер клиентской области - размер бордюров (видимо размер кл.области+размер бордюров и есть общий размер формы, так что можно вычитать именно его не рассчитывая бордюры) Y-координата=Высота раб.стола - высота клиентской области формы-высота панели задач - высота бордюра и заголовка формы (то же замечание что и выше плюс к этому можно прибавить еще и бордюр панели задач) |
Отправлено: 13:41, 17-09-2009 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата malev:
|
|
------- Отправлено: 15:20, 17-09-2009 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] 94 в нижнем правом углу и дальше загрузка не идёт | Shlyambur | Непонятные проблемы с Железом | 12 | 10-12-2015 15:58 | |
Версия Windows в правом нижнем углу рабочего стола | AKA_MOROZ | Автоматическая установка Windows 2000/XP/2003 | 5 | 25-02-2010 07:50 | |
Интерфейс - [решено] Как убрать надпись с логотипом в правом нижнем углу экрана | Aleox | Microsoft Windows Vista | 2 | 23-08-2008 02:01 | |
запускалась в правом нижнем углу | khvalera | Программирование и базы данных | 3 | 13-06-2004 20:59 | |
Надпись в нижнем правом углу.... | Chieftain | Microsoft Windows 2000/XP | 6 | 27-03-2003 17:29 |
|