找回密码
 加入
搜索
楼主: jscpu

[图形处理] 。。。。。。。。。。。。。。。。。。。。。。。。

 火.. [复制链接]
 楼主| 发表于 2010-1-8 22:54:06 | 显示全部楼层
回复 15# 水木子

我想问的是像这样的话怎么改?
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
_11()
Func _11()
$dir = @ScriptDir&"\config.ini"
$Form1 = GUICreate("列表框操作", 280, 270)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$ListView1 = GUICtrlCreateListView("账号           |密码           |", 10, 10, 260, 150)
$Button1 = GUICtrlCreateButton("添加", 185, 178, 75, 25, $WS_GROUP)
$Input1 = GUICtrlCreateInput("", 60, 180, 120, 21)
$Input2 = GUICtrlCreateInput("", 60, 220, 120, 21)
$Label1 = GUICtrlCreateLabel("账号:", 20, 183, 36, 17)
$Label2 = GUICtrlCreateLabel("密码:", 20, 223, 36, 17)
$Label3 = GUICtrlCreateLabel("数据", 200, 223, 36, 17)
$Label4 = GUICtrlCreateLabel("0", 230, 223, 36, 17)
GUISetState(@SW_SHOW)
Read()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        tian()
        EndSwitch
WEnd
EndFunc


func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)

        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件

                        Case $ListView1

                                Switch $Event; 选择产生的事件

                                        Case $NM_CLICK ; 左击
                                                 $a = _GUICtrlListView_GetSelectedIndices($ListView1)
        $b = _GUICtrlListView_GetItemTextString($ListView1, Number($a))
        $c = StringSplit($b,"|")        
        GUICtrlSetData ($Input1 ,$c[1])
        GUICtrlSetData ($Input2 ,$c[2])               
                                        Case $NM_DBLCLK ; 双击
                                                        
                                        Case $NM_RCLICK ; 右击

                                EndSwitch
        EndSwitch 
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func Read()
        $z = 0
        _GUICtrlListView_DeleteAllItems($ListView1)
        $read = IniReadSection($dir,"config")
        If Not @error Then
                For $i = 1 To $read[0][0]
                        GUICtrlCreateListViewItem($read[$i][0], $ListView1)
                        _GUICtrlListView_AddSubItem($ListView1, $z, $read[$i][1], 1, $z+1)
                        GUICtrlSetData($Label4,$z+1)
                        $z += 1                
                Next
        EndIf
EndFunc

Func tian()
        $z = GUICtrlRead($Label4)
        $a = GUICtrlRead($Input1)
        $b = GUICtrlRead($Input2)        
        If $a <> "" And $b <> "" Then 
                IniWrite($dir,"config",$a,$b)
                GUICtrlCreateListViewItem($a, $ListView1)                
                _GUICtrlListView_AddSubItem($ListView1, $z, $b, 1, $z+1)
                MsgBox(0,"提示"," 账号: "&$a&" 密码: "&$b&" 保存成功 ")                
                GUICtrlSetData($Input1,"")
                GUICtrlSetData($Input2,"")
                GUICtrlSetData($Label4,$z+1)
        EndIf        
EndFunc  
 楼主| 发表于 2010-1-8 22:54:57 | 显示全部楼层
回复 14# netegg

请教下怎么改!
发表于 2010-1-8 23:06:15 | 显示全部楼层
本帖最后由 netegg 于 2010-1-8 23:07 编辑

# $hListView = _GUICtrlListView_Create($GUI, "", 10, 10, 260, 150)
# GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

下面的消息子函数就可以用了
发表于 2010-1-8 23:08:10 | 显示全部楼层
你是想做成事件模式吧?
发表于 2010-1-8 23:13:21 | 显示全部楼层
刚看明白楼主什么意思,做函数前,把listview定义成全局变量Globle $listview,后面的操作再说后面的
 楼主| 发表于 2010-1-8 23:37:09 | 显示全部楼层
回复 18# netegg

不行耶
还是提示变量为定义!

如16代码那样
只要他不提示错误就行了!
 楼主| 发表于 2010-1-8 23:38:36 | 显示全部楼层
回复 19# 水木子


也不是什么事件
您的代码就是我想要的效果
只是我想把那一整段代码放在FUNC里

可能有多处要用到 !
但是一放FUNC里就出错!
FUNC又不能嵌套   麻烦就在这!
发表于 2010-1-8 23:45:25 | 显示全部楼层
没仔细看。。。
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Dim $ListView1, $dir, $z, $Label4, $Input1, $Input2
_11()

Func _11()
        $dir = @ScriptDir & "\config.ini"
        $Form1 = GUICreate("列表框操作", 280, 270)
        GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
        $ListView1 = GUICtrlCreateListView("账号           |密码           |", 10, 10, 260, 150)
        $Button1 = GUICtrlCreateButton("添加", 185, 178, 75, 25, $WS_GROUP)
        $Input1 = GUICtrlCreateInput("", 60, 180, 120, 21)
        $Input2 = GUICtrlCreateInput("", 60, 220, 120, 21)
        $Label1 = GUICtrlCreateLabel("账号:", 20, 183, 36, 17)
        $Label2 = GUICtrlCreateLabel("密码:", 20, 223, 36, 17)
        $Label3 = GUICtrlCreateLabel("数据", 200, 223, 36, 17)
        $Label4 = GUICtrlCreateLabel("0", 230, 223, 36, 17)
        GUISetState(@SW_SHOW)
        Read()

        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                Exit
                        Case $Button1
                                tian()
                EndSwitch
        WEnd
EndFunc   ;==>_11


Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)

        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件

                Case $ListView1

                        Switch $Event; 选择产生的事件

                                Case $NM_CLICK ; 左击
                                        $a = _GUICtrlListView_GetSelectedIndices($ListView1)
                                        $b = _GUICtrlListView_GetItemTextString($ListView1, Number($a))
                                        $c = StringSplit($b, "|")
                                        GUICtrlSetData($Input1, $c[1])
                                        GUICtrlSetData($Input2, $c[2])
                                Case $NM_DBLCLK ; 双击

                                Case $NM_RCLICK ; 右击

                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func Read()
        $z = 0
        _GUICtrlListView_DeleteAllItems($ListView1)
        $read = IniReadSection($dir, "config")
        If Not @error Then
                For $i = 1 To $read[0][0]
                        GUICtrlCreateListViewItem($read[$i][0], $ListView1)
                        _GUICtrlListView_AddSubItem($ListView1, $z, $read[$i][1], 1, $z + 1)
                        GUICtrlSetData($Label4, $z + 1)
                        $z += 1
                Next
        EndIf
EndFunc   ;==>Read

Func tian()
        $z = GUICtrlRead($Label4)
        $a = GUICtrlRead($Input1)
        $b = GUICtrlRead($Input2)
        If $a <> "" And $b <> "" Then
                IniWrite($dir, "config", $a, $b)
                GUICtrlCreateListViewItem($a, $ListView1)
                _GUICtrlListView_AddSubItem($ListView1, $z, $b, 1, $z + 1)
                MsgBox(0, "提示", " 账号: " & $a & " 密码: " & $b & " 保存成功 ")
                GUICtrlSetData($Input1, "")
                GUICtrlSetData($Input2, "")
                GUICtrlSetData($Label4, $z + 1)
        EndIf
EndFunc   ;==>tian
发表于 2010-1-9 01:42:07 | 显示全部楼层
本帖最后由 netegg 于 2010-1-9 01:44 编辑
回复  netegg

不行耶
还是提示变量为定义!

如16代码那样
只要他不提示错误就行了!
jscpu 发表于 2010-1-8 23:37

哪个变量未定义,不是有三个#include吗,下一行直接定义全局变量
把前面几位的代码里面dim改成global
发表于 2010-1-9 09:06:35 | 显示全部楼层
哎!简直没搞懂,基本靠猜。
发表于 2010-1-10 20:49:30 | 显示全部楼层
变量未声明
发表于 2010-1-11 09:56:45 | 显示全部楼层
回复 1# jscpu


1、根据选择的条目修改input的内容的方法,不建议楼主用检测鼠标点击操作的方法,那样既占资源(貌似),而且有出错的可能,更重要的是有一个最大的bug(就是鼠标点的时候,input可以根据所选内容进行修改,键盘上下键选的时候,input就傻了),解决这个问题我的方法,请参考【传送门
2、提示变量不存在的问题,说明你没有好好看过au3的帮助,我引用一下au3的帮助里的原文:
变量的作用域
某个变量的作用域要看您是何时以及如何声明该变量的. 如果您在脚本开头且在所有函数之外声明了某个变量 则该变量将在Global(全局)范围内存在,此时您就可以在脚本的任意位置读取或更改该变量, 我们把这种变量称为全局变量.
如果您是在某个 函数 内部声明一个变量则该变量就只在该函数的 Local(局部) 范围内有效,我们把这种变量称为局部变量. 在函数内创建的变量将在函数结束时 自动被销毁.
在默认情况下,使用 Dim 声明的变量或在函数内部直接赋值而成的变量都是 Local(局部)变量,除非 有同名的全局变量存在(此时将视此变量为该全局变量).  另外我们可以使用关键字 Local 和 Global 来声明变量以 强制 变量的作用域.


所以你要解决这个问题,有两个方法,
一、把所有的全局变量都在func 外边声明,也就是说你就不要去想着把一段创建gui的代码用func包括起来了,除非你在这个func外边把所有的控件变量都提前声明一遍,但那样就绕弯路啦,相当于你写了两遍gui的代码。
二、如果你非要把创建gui的代码部分用func包括起来,那另外一个方法就是,在func里面创建控件的时候把变量声明为全局变量 Global
三、要说啥来着,忘了,回头想起来再说。刚明明想好了的,被同事打断了,工作了,不说了。、、
发表于 2010-1-15 09:00:16 | 显示全部楼层
可怜的水木子,费老大劲了,呵呵

建议楼主上传全部代码,光让猜怎么行啊,光看你的出错情况,应该是简单的逻辑问题
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 23:02 , Processed in 0.069841 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表