Что нового

ToolTip - проблема для дочерних окон

asdf8

Скриптер
Сообщения
564
Репутация
152
Код:
If ProcessExists('notepad.exe') Then
	$Hnd_Cur = WinWait("[CLASS:Notepad]", "", 3)
	If Not $Hnd_Cur Then Exit
	$Form1 = GUICreate("Form2", 300, 200, -1, -1, -1, -1, $Hnd_Cur)
	GUISetState(@SW_SHOW)
Else
	Run('notepad.exe')
	$Hnd_Cur = WinWait("[CLASS:Notepad]", "", 3)
	If Not $Hnd_Cur Then Exit
	$Form1 = GUICreate("Form1", 300, 100, -1, -1, -1, -1, $Hnd_Cur)
	$Label1 = GUICtrlCreateLabel(WinGetTitle($Hnd_Cur), 28, 28, 248, 45)
	GUICtrlSetBkColor(-1, 0xFFFF00)
	GUICtrlSetTip(-1, "Label1");если закоментировать эту строку, то все работает как надо
	GUISetState(@SW_SHOW)
EndIf

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
	EndSwitch
WEnd


Если скомпилировать и дважды запустить этот код, будет видна суть проблемы - окно "Form2", при его активации, уходит под родительское окно.
Подскажите - можно-ли это, как-то исправить?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Я так и не смог воспроизвести проблему (Windows 7).

:(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
А если заменить @SW_SHOW на @SW_SHOWNORMAL?
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Попробовал приделать tooltip к контролу на winapi - ничего не поменялось.
Удалось сделать только с отдельным обработчиком:

Код:
If ProcessExists('notepad.exe') Then
	$Hnd_Cur = WinWait("[CLASS:Notepad]", "", 3)
	If Not $Hnd_Cur Then Exit
	$Form1 = GUICreate("Form2", 300, 200, -1, -1, -1, -1, $Hnd_Cur)
	GUISetState(@SW_SHOW)
Else
	Run('notepad.exe')
	$Hnd_Cur = WinWait("[CLASS:Notepad]", "", 3)
	If Not $Hnd_Cur Then Exit
	$Form1 = GUICreate("Form1", 300, 100, -1, -1, -1, -1, $Hnd_Cur)
	$Label1 = GUICtrlCreateLabel(WinGetTitle($Hnd_Cur), 28, 28, 248, 45)
	GUICtrlSetBkColor(-1, 0xFFFF00)
	; 	GUICtrlSetTip(-1, "Label1");если закоментировать эту строку, то все работает как надо
	$hCtrl_1 = ControlGetHandle($Form1, "", $Label1)
	$iFlagTT_1 = 0
	GUISetState(@SW_SHOW)
	GUIRegisterMsg(0x0020, '_WM_SETCURSOR');WM_SETCURSOR=0x0020
EndIf

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
	EndSwitch
WEnd

Func _WM_SETCURSOR($hWnd, $Msg, $wParam)
	Static $lastHover
	If $wParam <> $lastHover Then
		If $iFlagTT_1 Then
			If $wParam <> $hCtrl_1 Then
				ToolTip("")
				$iFlagTT_1 = 0
			EndIf
		Else
			If $wParam = $hCtrl_1 Then
				ToolTip("Label1")
				$iFlagTT_1 = 1
			EndIf
		EndIf
		$lastHover = $wParam
	EndIf
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
А разве совет qsort'а не подходит?
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
А разве совет qsort'а не подходит?
Yashied дело в том что так себя ведут все другие дочерние окна (похоже только на ХР), т.е. если прицепить окно автоита, с всплывающими подсказками, к окну другого процесса, то все остальные дочерние окна, при активации, уходят под родительское окно, например если в блокноте вызвать диалог "Сохранить как" и потом активировать окно диалога, то потом замучаешься его ловить.
 
Верх