А где ваш пример скрипта?qqww22 сказал(а):... где мои грабли?
#include <GUIConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Date.au3>
#include <String.au3>
#include <GuiMenu.au3>
#include <WindowsConstants.au3>
#include <GuiImageList.au3>
#include <GuiScrollBars.au3>
HotKeySet("{f1}", "hide")
Opt('GUICloseOnESC', 0)
$iLVStyle = BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS)
$iLVExtStyle = BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT)
$hGUI=GUICreate('', 500, 500, 500,0,-1,$WS_EX_TOPMOST)
$listview = GUICtrlCreateListView ("TEST",16, 162, 373, @DesktopHeight+350-740,$iLVStyle, $iLVExtStyle)
$hwndlist = ControlGetHandle($hGUI, "", $listview)
$Button__EXIT = GUICtrlCreateButton("^", 390,141, 20,20,$WS_EX_TOPMOST)
global $nMsg
local enum $idDelete = 1000, $idDetail ,$iadd
local $gui010= $hgui
local $gui0102= $hgui
local $LV010 = $listview
local $dummyDet = guictrlcreatedummy()
local $dummyDel = guictrlcreatedummy()
local $dummyAdd = guictrlcreatedummy()
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Редактировать", $idDetail)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Удалить", $idDelete)
$hMenu2 = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu2, 1, "test", $iadd)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
exit
EndSwitch
WEnd
func hide()
Local $aWinList = WinList("[REGEXPTITLE:(?i)(.*SciTE.*|.*Internet Explorer.*)]")
_ArrayDisplay($aWinList)
endfunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $iIDFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iIDFrom
Case $lv010
Switch $iCode
Case $NM_RCLICK
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
;~ ConsoleWrite(@CR&"ZASHEL")
If DllStructGetData($tInfo, "Item") > -1 Then
_GUICtrlMenu_TrackPopupMenu($hMenu, $gui010)
else
_GUICtrlMenu_TrackPopupMenu($hMenu2, $gui0102)
EndIf
endswitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $iddetail
guictrlsendtodummy($dummyDET)
Case $iddelete
guictrlsendtodummy($dummyDEL)
Case $iadd
guictrlsendtodummy($dummyAdd)
EndSwitch
EndFunc
#include <GUIConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Date.au3>
#include <String.au3>
#include <GuiMenu.au3>
#include <WindowsConstants.au3>
#include <GuiImageList.au3>
#include <GuiScrollBars.au3>
Global $nMsg, $hPopupMenu
HotKeySet("{f1}", "hide")
Opt('GUICloseOnESC', 0)
$iLVStyle = BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS)
$iLVExtStyle = BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT)
Local $hGUI = GUICreate('', 500, 500, 500, -1, -1, $WS_EX_TOPMOST)
$listview = GUICtrlCreateListView("TEST", 16, 162, 373, @DesktopHeight + 350 - 740, $iLVStyle, $iLVExtStyle)
$hwndlist = ControlGetHandle($hGUI, "", $listview)
$Button__EXIT = GUICtrlCreateButton("^", 390, 141, 20, 20, $WS_EX_TOPMOST)
Local Enum $idDelete = 1000, $idDetail, $iadd
Local $gui010 = $hGUI
Local $gui0102 = $hGUI
Local $LV010 = $listview
Local $dummyDet = GUICtrlCreateDummy()
Local $dummyDel = GUICtrlCreateDummy()
Local $dummyAdd = GUICtrlCreateDummy()
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Редактировать", $idDetail)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Удалить", $idDelete)
$hMenu2 = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu2, 1, "test", $iadd)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $hPopupMenu Then
_GUICtrlMenu_TrackPopupMenu($hPopupMenu, $gui010)
$hPopupMenu = False
EndIf
WEnd
Func hide()
Local $aWinList = WinList("[REGEXPTITLE:(?i)(.*SciTE.*|.*Internet Explorer.*)]")
_ArrayDisplay($aWinList)
EndFunc ;==>hide
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $iIDFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iIDFrom
Case $LV010
Switch $iCode
Case $NM_RCLICK
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
$hPopupMenu = (DllStructGetData($tInfo, "Item") > -1) ? $hMenu : $hMenu2
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $idDetail
GUICtrlSendToDummy($dummyDet)
Case $idDelete
GUICtrlSendToDummy($dummyDel)
Case $iadd
GUICtrlSendToDummy($dummyAdd)
EndSwitch
If $iwParam Then
EndIf
EndFunc ;==>WM_COMMAND
#include <GUIConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Date.au3>
#include <String.au3>
#include <GuiMenu.au3>
#include <WindowsConstants.au3>
#include <GuiImageList.au3>
#include <GuiScrollBars.au3>
HotKeySet("{f1}", "hide")
Opt('GUICloseOnESC', 0)
$iLVStyle = BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS)
$iLVExtStyle = BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT)
$hGUI=GUICreate('', 500, 500, 500,0,-1,$WS_EX_TOPMOST)
$listview = GUICtrlCreateListView ("TEST",16, 162, 373, @DesktopHeight+350-740,$iLVStyle, $iLVExtStyle)
$hwndlist = ControlGetHandle($hGUI, "", $listview)
$Button__EXIT = GUICtrlCreateButton("^", 390,141, 20,20,$WS_EX_TOPMOST)
global $nMsg
local enum $idDelete = 1000, $idDetail ,$iadd
local $gui010= $hgui
local $gui0102= $hgui
local $LV010 = $listview
local $dummyDet = guictrlcreatedummy()
local $dummyDel = guictrlcreatedummy()
local $dummyAdd = guictrlcreatedummy()
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Редактировать", $idDetail)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Удалить", $idDelete)
$hMenu2 = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu2, 1, "test", $iadd)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_ACTIVATE, "WM_ACTIVATE")
Func WM_ACTIVATE($hWnd, $iMsg, $wParam, $lParam)
Return $GUI_RUNDEFMSG
EndFu
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
exit
EndSwitch
WEnd
func hide()
Local $aWinList = WinList("[REGEXPTITLE:(?i)(.*SciTE.*|.*Internet Explorer.*)]")
_ArrayDisplay($aWinList)
endfunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $iIDFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iIDFrom
Case $lv010
Switch $iCode
Case $NM_RCLICK
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
;~ ConsoleWrite(@CR&"ZASHEL")
If DllStructGetData($tInfo, "Item") > -1 Then
_GUICtrlMenu_TrackPopupMenu($hMenu, $gui010)
else
_GUICtrlMenu_TrackPopupMenu($hMenu2, $gui0102)
EndIf
endswitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $iddetail
guictrlsendtodummy($dummyDET)
Case $iddelete
guictrlsendtodummy($dummyDEL)
Case $iadd
guictrlsendtodummy($dummyAdd)
EndSwitch
EndFunc
ИМХО, кроме того это плохой тон и вредная привычка.Yashied сказал(а):А зачем вообще вызывать прерывающую функцию из обработчика? Это противоречит логике.
Аррей я поставил как пример, виснет также на переборе winlist(), etcAlofa сказал(а):ИМХО, кроме того это плохой тон и вредная привычка.Yashied сказал(а):А зачем вообще вызывать прерывающую функцию из обработчика? Это противоречит логике.