gto250 发表于 2011-5-11 18:05:50

使用P版的ListViewEditEvent遇到的问题

在使用P版的ListViewEditEvent这个UDF的时候,遇到了一个问题,就在在编辑的时候,使用鼠标右键时,不能完全显示出EDIT系统右键菜单。
图如下:


这是我在WIN7系统上使用时候的截图,右键菜单上,鼠标经过时候还能显示出文字来,但是在xp系统上,鼠标经过也不能显示出文字

希望能解决一下!是什么地方出现了问题


#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <ListViewEditEvent.au3>
#include <GuiMenu.au3>
#include <ComboConstants.au3>
#include <GuiTab.au3>
#include <GuiComboBoxEx.au3>
#include <GuiButton.au3>
#include <GuiImageList.au3>
Opt("GUIOnEventMode", 1)





$gui = GUICreate("test", 721, 647, -1, -1)
$hImage = _GUIImageList_Create(1, 18)
$wuliao_listview = GUICtrlCreateListView("序号|物料编号", 4, 280, 710, 358, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($wuliao_listview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES));, $LVS_EX_TRACKSELECT
_GUICtrlListView_SetColumn($wuliao_listview, 0, "序号", 40, 2)
_GUICtrlListView_SetColumn($wuliao_listview, 1, "物料编号", 100, 2)
_GUICtrlListView_SetImageList($wuliao_listview, $hImage, 1)
GUICtrlCreateListViewItem("0|0", $wuliao_listview)
_GUICtrlListView_RegisterEditEvent($wuliao_listview)

GUISetOnEvent($GUI_EVENT_CLOSE, "out");退出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GUISetState(@SW_SHOW)


GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY");注册系统消息,列表视图框的修改和菜单



#EndRegion ### END Koda GUI section ###

While 1
        Sleep(10)
WEnd


Func out()
        ProcessClose(@AutoItPID)
        Exit
EndFunc





Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $tBuffer, $iCode, $iItem, $iSubItem, $hWndFrom

        $tBuffer = DllStructCreate($tagNMLISTVIEWHDR, $ilParam)
        $iCode = DllStructGetData($tBuffer, "Code")
        $hWndFrom = HWnd(DllStructGetData($tBuffer, "hWndFrom"))
        Switch $iCode
                Case $LVN_EDITBEGIN ; 将要开始编辑。
                        Local $tEditBegin = DllStructCreate($tagLISTVIEW_EDITBEGIN, $ilParam)
                        $iItem = DllStructGetData($tEditBegin, "Item")
                        $iSubItem = DllStructGetData($tEditBegin, "SubItem")

                        ; 判断是否为SubItem 0,若是,拒绝编辑。
                        If ($iSubItem = 0) Then
                                DllStructSetData($tEditBegin, "Show", 0)
                        Else
                                DllStructSetData($tEditBegin, "Show", 1) ; 此句可以删除,因为默认就是为1.
                        EndIf
                       
                Case $LVN_EDITEND ; 结束编辑。
                        Local $tEditEnd, $iFlags
                        $tEditEnd = DllStructCreate($tagLISTVIEW_EDITEND, $ilParam)
                        $iFlags = DllStructGetData($tEditEnd, "EndFlags")

                        ; 判断是否输入enter键结束,若非,不保存编辑结果。
                        ;        If ($iFlags <> $LVEF_ENTER) Then
                        ;                DllStructSetData($tEditEnd, "AutoComplete", 0)
                        ;        Else
                        ;                DllStructSetData($tEditEnd, "AutoComplete", 1)
                        ;        EndIf
                        ; 以上的2句DllStructSetData,可以删除其中一句,
                        ; 因为AutoComplete的值默认为_GUICtrlListView_RegisterEditEvent中$fAutoComplete的值。
                Case $LVN_SELCHANGING ; 所选条目即将发生改变。
                        Local $tChanging, $iFlags
                        $tChanging = DllStructCreate($tagLISTVIEW_SELCHANGING, $ilParam)
                        $iFlags = DllStructGetData($tChanging, "ChangeFlags")

                        ; 判断是否是鼠标选择,若否,拒绝选择。
                        ;If ($iFlags <> $LVCF_LBUTTON) And ($iFlags <> $LVCF_RBUTTON) Then
                        ;        DllStructSetData($tChanging, "AllowChange", 0)
                        ;EndIf
                Case $LVN_SELCHANGED ; 所选条目已经改变。
                        Local $tChanged, $iItem, $iPreviousItem, $iFlags, $sFlags = "Left"

                        $tChanged = DllStructCreate($tagLISTVIEW_SELCHANGED, $ilParam)
                        $iItem = DllStructGetData($tChanged, "CurrentItem") ; 当前所选。
                        $iPreviousItem = DllStructGetData($tChanged, "PreviousItem") ; 之前所选。
                        $iFlags = DllStructGetData($tChanged, "ChangeFlags") ; 选择标识。
                        If ($iFlags = $LVCF_RBUTTON) Then $sFlags = "Right"
                Case $LVN_ITEMCHECKING ; CheckBox 状态即将改变。
                        Local $tChecking, $iFlags
                        $tChecking = DllStructCreate($tagLISTVIEW_ITEMCHECKING, $ilParam)
                        $iFlags = DllStructGetData($tChecking, "Flags")
                        $iItem = DllStructGetData($tChecking, "Item")

                        ; 判断是否为第9条目,或是否不使用鼠标左键进行选择,若成立,拒绝CheckBox的选择。
                        ;If ($iFlags <> $LVICF_LBUTTON) Or ($iItem = 9) Then
                        ;        DllStructSetData($tChecking, "AllowCheck", 0)
                        ;EndIf


                        Return 0 ; allow the default processing
        EndSwitch
        $tBuffer = 0
EndFunc   ;==>WM_NOTIFY

qiziyun7410 发表于 2011-5-12 03:04:17

楼主是准备做个管理进销存工具??

wsfda 发表于 2011-5-12 08:55:46

楼主是准备做个管理进销存工具??
qiziyun7410 发表于 2011-5-12 03:04 http://www.autoitx.com/images/common/back.gif


    希望到时提供源码,学习,呵呵

netegg 发表于 2011-5-20 05:44:20

在使用P版的ListViewEditEvent这个UDF的时候,遇到了一个问题,就在在编辑的时候,使用鼠标右键时,不能完全 ...
gto250 发表于 2011-5-11 18:05 http://www.autoitx.com/images/common/back.gif

没看明白你说的情况是什么意思,看截图edit不是已经嵌入listview了吗,右键是指什么

gto250 发表于 2011-5-21 19:17:33

回复 4# netegg


    对嵌入的EDIT进行右键点击,你就能发现问题了。
对截图中空白的框你不觉得奇怪吗?

republican 发表于 2011-5-22 07:43:03

我承认我也遇到了。以前还真没发现。

Netfox 发表于 2011-6-9 00:45:48

我没用P版的,哈哈,当时测试也是有点问题

xinsiye 发表于 2011-6-9 13:35:22

好帖子!!!路过要顶上一顶!!!!!超给力























http://www.jiudingji8.com/images/xiaoshuo.gif
淘宝网女装夏装新款2011韩版 淘宝网女装秋装新款 异世邪君5200 斗破苍穹5200 吞噬星空5200 天珠变5200 遮天5200 异界魅影逍遥5200 永生5200 大周皇族5200 灵罗戒5200 黄金瞳5200
页: [1]
查看完整版本: 使用P版的ListViewEditEvent遇到的问题