Alofa сказал(а):при помощи...WinMove
MsgBox(262144, "Сообщение" ,"После правки - отжать кнопку Ок")
Sleep(400)
; Перемещает и изменяет размер окна блокнота
WinMove("Сообщение", "" , 200,200)
Без особой разницы - главное чтобы с кнопкой ок и чтобы после её отжатия скрипт продолжил работу в нормальном потоке. Именно поэтому и была выбрана функция msgbox, как наиболее подходящая.mmsgeorge сказал(а):dr.room
тебе именно msgbox нужно или чтобы просто выводилась информация?
И не старайтесь. Прошу прощения (как не горько в этом сознаваться) ввел вас в заблуждение. Совсем вылетело из головы, что "MsgBox()" является блокирующей функцией, т.е. на ней скрипт останавливается до тех пор, пока окно не будет закрыто.dr.room сказал(а):... Не получается почему-то ...
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <WinAPISys.au3>
_My_MsgBox()
Func _My_MsgBox()
Local $iWidth = 300 ; Ширина окна
Local $iHeight = 150 ; Высота окна
Local $iWidthBatt = 88 ; Ширина кнопки
Local $iHeightBatt = 26 ; Высота кнопки
$hGui = GUICreate("Мое Окно", $iWidth, $iHeight, -1, -1, $DS_SETFOREGROUND)
$aClientSize = WinGetClientSize($hGui)
$tRECT = _WinAPI_GetWorkArea()
;~ $iLeft = 0 ; Прижимаем к левому нижнему углу
$iLeft = DllStructGetData($tRECT, 'Right') - $iWidth ; Прижимаем к правому нижнему углу
$iTop = DllStructGetData($tRECT, 'Bottom') - $iHeight
WinMove($hGui, '', $iLeft, $iTop)
GUICtrlCreateLabel("Это мое суперское окно", 0, 0, $aClientSize[0], $aClientSize[1] - 46, BitOR($SS_CENTERIMAGE, $SS_CENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Button = GUICtrlCreateButton("Ok", $iWidth / 2 - $iWidthBatt / 2, $aClientSize[1] - 46 + ((46 - $iHeightBatt) / 2), $iWidthBatt, $iHeightBatt)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ContinueCase
Case $Button
MsgBox(64, 'Инфо', 'Продолжаем работу скрипта!')
Return 1
EndSwitch
WEnd
EndFunc ;==>_My_MsgBox
Да мне решение важно СпасибоAlofa сказал(а):ввел вас в заблуждение.
;~ MsgBox(64, 'Инфо', 'Продолжаем работу скрипта!')
Честно - не понял о чем это?dr.room сказал(а):...Вы используете двойное подтверждение...
dr.room сказал(а):...Достаточно ли будет просто закоментировать строчку чтобы исключить второе окно ?
MsgBox(64, 'Инфо', 'Продолжаем работу скрипта!') ; Это просто ДЕМОНСТРАЦИЯ того, что при нажатии "Ok" функция вообще реагирует на эту кнопку.
Return 1 ; к стати, возвращаемое значение этой пользовательской функции "_My_MsgBox()" соответствует ID одноименной кнопки штатной "MsgBox()"
#Include <WinAPI.au3>
_MsgBoxEx(64, 'MsgBoxEx', 'Test', 0, 0, 50, 50)
Func _MsgBoxEx($iFlag, $sTitle, $sText, $iTimeout = 0, $hWnd = 0, $iLeft = -1, $iTop = -1)
Assign('MsgBoxEx:Left', $iLeft, 2)
Assign('MsgBoxEx:Top', $iTop, 2)
Local $CBT_ProcCB = DllCallbackRegister('MsgBoxEx_CBT_Proc', 'long', 'int;hwnd;lparam')
Local $CBT_Hook = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($CBT_ProcCB), 0, _WinAPI_GetCurrentThreadId())
Local $Ret = MsgBox($iFlag, $sTitle, $sText, $iTimeout, $hWnd)
Local $Error = @Error
_WinAPI_UnhookWindowsHookEx($CBT_Hook)
DllCallbackFree($CBT_ProcCB)
Assign('MsgBoxEx:Left', 0, 2)
Assign('MsgBoxEx:Top', 0, 2)
Return SetError($Error, 0, $Ret)
EndFunc
Func MsgBoxEx_CBT_Proc($nCode, $wParam, $lParam)
If $nCode = 5 Then ; HCBT_ACTIVATE
Local $iLeft = Eval('MsgBoxEx:Left')
Local $iTop = Eval('MsgBoxEx:Top')
If $iLeft <> -1 Or $iTop <> -1 Then
Local $aMBPos = WinGetPos($wParam)
If $iLeft = -1 Then
$iLeft = (@DesktopWidth / 2) - ($aMBPos[2] / 2)
EndIf
If $iTop = -1 Then
$iTop = (@DesktopHeight / 2) - ($aMBPos[3] / 2)
EndIf
WinMove($wParam, '', $iLeft, $iTop)
EndIf
EndIf
Return _WinAPI_CallNextHookEx(0, $nCode, $wParam, $lParam)
EndFunc
Спасибо, я только не понял как изменить положение окна сообщения: в нижний левый или правый уголCreatoR сказал(а):И ещё вариант:
[list type=decimal]dr.room сказал(а):... я только не понял как изменить положение окна сообщения: в нижний левый или правый угол
$iLeft = 50 ; Координата левого края окна
$iTop = 50 ; Координата верхнего края окна
_MsgBoxEx(64, 'MsgBoxEx', 'Test', 0, 0, $iLeft, $iTop)
А как в Вашем варианте сделать у окна GUICtrlCreateLabel , так, чтобыAlofa сказал(а):Вот, как вариант:
Вот вам ссылка на стили "GUICtrlCreateLabel".dr.room сказал(а):- текст мог переносится на новую строку
Вы сейчас имеете дело с ЯП изначально предназначенным для автоматизации подобных операций.dr.room сказал(а):(хотя его размеры легко в ручную меняются...)
$SS_CENTER
Выравнивание текста по центру по горизонтали. Если текст не помещается по ширине, то автоматически переносится на следующую строку к центру.
А что если быть хитрее и почитать про стиль "$SS_CENTERIMAGE", который суммируется со стилем "$SS_CENTER" в скрипте?dr.room сказал(а):Текст идет одно строкой а переноса нет
У васAlofa сказал(а):А что если быть хитрее и почитать про стиль
BitOR($SS_CENTERIMAGE, $SS_CENTER))
($SS_CENTER)
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <WinAPISys.au3>
_My_MsgBox()
Func _My_MsgBox()
Local $iWidth = 300 ; Ширина окна
Local $iHeight = 150 ; Высота окна
Local $iWidthBatt = 88 ; Ширина кнопки
Local $iHeightBatt = 26 ; Высота кнопки
$hGui = GUICreate("Мое Окно", $iWidth, $iHeight, -1, -1, $DS_SETFOREGROUND)
$aClientSize = WinGetClientSize($hGui)
$tRECT = _WinAPI_GetWorkArea()
;~ $iLeft = 0 ; Прижимаем к левому нижнему углу
$iLeft = DllStructGetData($tRECT, 'Right') - $iWidth ; Прижимаем к правому нижнему углу
$iTop = DllStructGetData($tRECT, 'Bottom') - $iHeight
WinMove($hGui, '', $iLeft, $iTop)
GUICtrlCreateLabel("Это мое суперское окно", 0, 0, $aClientSize[0], $aClientSize[1] - 46, BitOR($SS_CENTERIMAGE, $SS_CENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Button = GUICtrlCreateButton("Ok", $iWidth / 2 - $iWidthBatt / 2, $aClientSize[1] - 46 + ((46 - $iHeightBatt) / 2), $iWidthBatt, $iHeightBatt)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ContinueCase
Case $Button
MsgBox(64, 'Инфо', 'Продолжаем работу скрипта!')
Return 1
EndSwitch
WEnd
EndFunc ;==>_My_MsgBox
_My_MsgBox1()
Func _My_MsgBox1()
Local $iWidth = 300 ; Ширина окна
Local $iHeight = 150 ; Высота окна
Local $iWidthBatt = 88 ; Ширина кнопки
Local $iHeightBatt = 26 ; Высота кнопки
$hGui = GUICreate("Мое Окно", $iWidth, $iHeight, -1, -1, $DS_SETFOREGROUND)
$aClientSize = WinGetClientSize($hGui)
$tRECT = _WinAPI_GetWorkArea()
;~ $iLeft = 0 ; Прижимаем к левому нижнему углу
$iLeft = DllStructGetData($tRECT, 'Right') - $iWidth ; Прижимаем к правому нижнему углу
$iTop = DllStructGetData($tRECT, 'Bottom') - $iHeight
WinMove($hGui, '', $iLeft, $iTop)
GUICtrlCreateLabel("Это мое суперское окно", 0, 0, $aClientSize[0], $aClientSize[1] - 46, BitOR($SS_CENTERIMAGE, $SS_CENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Button = GUICtrlCreateButton("Ok", $iWidth / 2 - $iWidthBatt / 2, $aClientSize[1] - 46 + ((46 - $iHeightBatt) / 2), $iWidthBatt, $iHeightBatt)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ContinueCase
Case $Button
MsgBox(64, 'Инфо', 'Продолжаем работу скрипта!')
Return 1
EndSwitch
WEnd
EndFunc ;==>_My_MsgBox