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

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

Ответить
Настройки темы
[решено] Режим "Поверх всех окон" совместно с ComboBox в GUI

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


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

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


Добрый день!
есть следующий код:


Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("WinWaitDelay", 0)
Opt("GUIOnEventMode", 1)

;ShellHook notification codes:
Global Const $HSHELL_WINDOWCREATED = 1
Global Const $HSHELL_WINDOWACTIVATED = 4

Global $bHook = 1


$hForm = GUICreate('Demo', 330, 185, -1, -1, BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_POPUP, $DS_SETFOREGROUND), $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Main_Events')

$Checkbox1 = GUICtrlCreateCheckbox("Поверх всех окон", 10, 20, 200, 21)


$sCombo = GUICtrlCreateCombo("", 15, 50, 200, 21)
GUICtrlSetData($sCombo, "элемент0|элемент1|элемент2|элемент3|элемент4|")

$nExit_Button = GUICtrlCreateButton('Exit', 330 - 100 - 10, 130 + 10 + 10, 100, 23)
GUICtrlSetOnEvent(-1, '_Main_Events')


GUISetState(@SW_SHOW, $hForm)
GUIRegisterMsg(RegisterWindowMessage("SHELLHOOK"), "HShellWndProc")
ShellHookWindow($hForm, $bHook)



While 1
    Sleep(10)
WEnd



Func _Main_Events()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE, $nExit_Button
            ShellHookWindow($hForm, 0)
            Exit
    EndSwitch
EndFunc

Func HShellWndProc($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
        Case $HSHELL_WINDOWCREATED, $HSHELL_WINDOWACTIVATED
            While Not WinActive($hForm)
                WinActivate($hForm)
            WEnd
    EndSwitch
EndFunc

;register/unregister ShellHook
Func ShellHookWindow($hWnd, $bFlag)
    Local $sFunc = 'DeregisterShellHookWindow'
    If $bFlag Then $sFunc = 'RegisterShellHookWindow'
    Local $aRet = DllCall('user32.dll', 'int', $sFunc, 'hwnd', $hWnd)
    Return $aRet[0]
EndFunc

;register window message
Func RegisterWindowMessage($sText)
    Local $aRet = DllCall('user32.dll', 'int', 'RegisterWindowMessage', 'str', $sText)
    Return $aRet[0]
EndFunc




Вопрос заключается в следующем:
Как сделать, чтобы по выбору Checkbox1 окно было поверх всех окон, и наоборот (теряло свойство "поверх всех окон", когда снята галка Checkbox1 ) ?
Если использовать WinSetOnTop - не работает ComboBox

Отправлено: 13:00, 19-12-2014

 

Аватара для Mike909

Новый участник


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

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


Чекбоксу задайте действие на событие , у меня так работает ваш пример.

Код: Выделить весь код
$Checkbox1 = GUICtrlCreateCheckbox("Поверх всех окон", 10, 20, 200, 21)
GUICtrlSetOnEvent($Checkbox1, "SetOnTop")
;.....
;.....
Func SetOnTop() 
   If GUICtrlRead($Checkbox1) = $GUI_CHECKED then 
	WinSetOnTop($hForm, "", 1)
   Else
        WinSetOnTop($hForm, "", 0)
   EndIf   
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:42, 19-12-2014 | #2



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

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


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


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

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


действительно, все оказалось проще чем я думал.
Ваше решение мне помогло, спасибо!

Отправлено: 15:03, 19-12-2014 | #3


Аватара для madmasles

Ветеран


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

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


support23,
Еще так можно сделать.
Код: Выделить весь код
;~ ...
$iCheckbox1 = GUICtrlCreateCheckbox('Поверх всех окон', 10, 20, 200, 21)
GUICtrlSetOnEvent($Checkbox1, 'SetOnTop')
;~ ...
Func SetOnTop()
    WinSetOnTop($hForm, '', GUICtrlSendMsg($iCheckbox1, 0xF0, 0, 0));$BM_GETCHECK = 0xF0
EndFunc   ;==>SetOnTop
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:48, 20-12-2014 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Диспетчер задач не сохраняет "поверх остальных окон" gendalf Microsoft Windows 8 и 8.1 18 09-03-2015 13:16
Интерфейс - Слетает режим "поверх всех окон" Mark012 Microsoft Windows 7 0 04-06-2011 09:55
Разное - Подскажите програмку "Поверх всех окон" для XP... nzhs Microsoft Windows 2000/XP 1 07-09-2010 22:34
Интерфейс - [решено] Как сделать любую программу "поверх всех окон"? DesignerMix Microsoft Windows 7 3 24-10-2009 13:17
C/C++ - [C++Builder 2007] Две формы поверх всех окон и одна форма поверх другой crashtuak Программирование и базы данных 3 13-04-2009 16:33




 
Переход