Что нового

[Элементы GUI] Установка для элемента Edit дефолтный текстовый курсор

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Здравствуйте, хотелось бы попросить о помощи т.к. сам я уже слабо понимаю:
Нужно для элемента Edit присвоить курсор текстового типа. Да это легко буквально в 1 функцию -
Код:
GUICtrlSetCursor($Ctrl,5)

но дело в том что к текстовому элементу присвоена функция которая "перехватывает" все сообщения в предложенную функцию, из-за чего выше упомянутая функция не работает.
Пример скрипта таков:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
OnAutoItExitRegister("__Exit")
Global $mEdit=DllCallbackRegister("__MsgMenu","ptr","hwnd;uint;wparam;lparam")
$GUI = GUICreate("", 399, 284)
$Edit1 = GUICtrlCreateEdit("", 0, 0, 377, 113)
$Edit2 = GUICtrlCreateEdit("", 0, 128, 377, 137)
$hEdit2=GUICtrlGetHandle($Edit2)
Global $wProc=_WinAPI_SetWindowLong($hEdit2,0xFFFFFFFC,DllCallbackGetPtr($mEdit))
GUICtrlSetCursor($Edit1,5)
GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Func __MsgMenu($hWnd,$Msg,$wParam,$lParam)
	If $hWnd=$hEdit2 Then
		Switch $Msg
			Case 0x0101
				If GUICtrlRead($Edit2)="Exit" Then
					Exit
				EndIf
		EndSwitch
	EndIf
	Local $aRet=DllCall("user32.dll", "int", "CallWindowProc", "ptr", $wProc, _
            "hwnd", $hWnd, "uint", $Msg, "wparam", $wParam, "lparam", $lParam)
	Return $aRet[0]
EndFunc
Func __Exit()
	GUIDelete($GUI)
	DllCallbackFree($mEdit)
EndFunc

Для более понятного разъяснения для чего мне это требуется выложу клип где видно что курсор на Windows8 и Windows8.1 для некоторых окон включая созданных AutoIt, плохо устанавливается смешиваясь с простым, на окнах Edit.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
MnM
Может установить курсор и второму полю тоже?
Код:
GUICtrlSetCursor($Edit2,5)
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
InnI
OffTopic:
Тихо шифером шурша, едет крыша не спеша... :laugh:

Извините, проблему решил аналогичным способом после вашей подсказки, но вчера что то подобное не работало :'(
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OffTopic:
В данном примере в $Edit2 всплывающее меню - чёрное (на Win7).
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
InnI
А без установки процедуры на этот элемент, какое меню?
У меня все нормально и с назначенной функцией и без
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
MnM [?]
А без установки процедуры на этот элемент, какое меню?
Обычное, как в $Edit1.
У меня все нормально и с назначенной функцией и без
При нажатии клавиши "меню" на клавиатуре - меню обычное. Если вызывать правой клавишей мыши - чёрное.
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
InnI
Это наверное из-за того что в функции идет проверка на получение команды WM_KEYUP - 0x0101
Попробуйте удалить условие из Switch или его само то же
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Удалил Switch
Код:
Func __MsgMenu($hWnd,$Msg,$wParam,$lParam)
    Local $aRet=DllCall("user32.dll", "int", "CallWindowProc", "ptr", $wProc, _
            "hwnd", $hWnd, "uint", $Msg, "wparam", $wParam, "lparam", $lParam)
    Return $aRet[0]
EndFunc

Всё равно меню чёрное.
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
InnI
Что то я то же начал замечать что меню при повторном вызове на том же элементе остается в той позиции как и на предыдущем вызове :stars:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
MnM [?]
меню при повторном вызове на том же элементе остается в той позиции
Верно. При этом оно обновляется и становится нормальным (не чёрным).
 
Верх