Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Отображение формы в нижнем правом углу над панелью задач

Ответить
Настройки темы
[решено] Отображение формы в нижнем правом углу над панелью задач

Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


как отобразить созданную форму в нижнем правом углу над панелью задач. Как делал я:
1. узнаем ширину раб.стола (макро - @DesktopWidth)
2. узнаем высоту раб.стола (макро - @DesktopHeight)
3. вычитаем из 1-го ширину своей формы (макро нет, можно ли как то узнать программно)
4. вычитаем из 2-го высоту своей формы (макро нет, можно ли как то узнать программно)
3 и 4 по идее нужные координаты формы
ньюансы - по 4 пункту, почти у всех есть панель задач как вычислить ее высоту, чтобы форма была строго над панелью
пробовал вычитать из 4 пункта еще высоту панели задач, определял через AU3Info (получилось 30), все равно ниже вычел еще раз т.е. уже 60 более менее но теперь чуть выше, в чем загвоздка и почему надо вычитать 2 раза высоту панели задач. Кстати Qip например сам пристыковывается к краю панели задач ровно ровно, как такого добиться. И что делать у кого панель задач сбоку или вообще сверху?

Отправлено: 14:41, 16-09-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить 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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:21, 16-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
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


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата FlatX007:
А если панель с верху ? или с боку »
То это уже другая задача (читай внимательнее первый пост).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:35, 16-09-2009 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата FlatX007:
если панель не внизу - то окошко создаётся посередине десктопа »
А можно определить где панель находится, и соответственно пристыковывать GUI к нижнему правому краю:

Код: Выделить весь код
#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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:21, 16-09-2009 | #5


Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Использовал пример из второго сообщения,
Подведу итоги:
Чтобы спозиционировать форму над панелью задач нужно
1. Знать где она, панель задач, находится (справа, слева, сверху или как обычно снизу)
2. Знать размеры панели задач
2. Знать размеры формы
  • при создании формы $hGUI = GUICreate("_WinMoveAboveTaskBar Demo", 200, 500) указываются размеры только клиентской области, т.е. ширина 200 - это ширина без учета бордюров формы, с ними будет 206
  • а высота 500 - это высота без учета бордюров и заголовка формы, с ними будет уже 525
соответственно нужные нам координаты будут вычисляться по следующей формуле
X-координата=Ширина раб.стола- размер клиентской области - размер бордюров (видимо размер кл.области+размер бордюров и есть общий размер формы, так что можно вычитать именно его не рассчитывая бордюры)
Y-координата=Высота раб.стола - высота клиентской области формы-высота панели задач - высота бордюра и заголовка формы (то же замечание что и выше плюс к этому можно прибавить еще и бордюр панели задач)

Отправлено: 13:41, 17-09-2009 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата malev:
Использовал пример из второго сообщения,
Подведу итоги »
Под эти итоги больше подходит последний пример - Хотя в нём форма создаётся не над панелью задач, а в правом нижнем углу, если там панели задачь нет, то форма всё ровно будет в углу, т.е вычитается размер и положение панели задач.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:20, 17-09-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Отображение формы в нижнем правом углу над панелью задач

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] 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




 
Переход