找回密码
 加入
搜索
查看: 4258|回复: 9

在GUI里面做个图片按钮,如何在鼠标悬停的时候显示另外一个图片?

[复制链接]
发表于 2008-10-29 21:35:14 | 显示全部楼层 |阅读模式
在GUI里面做个图片按钮,如何在鼠标悬停的时候显示另外一个图片?
请教了,谢谢
发表于 2008-10-29 23:00:13 | 显示全部楼层
一个想法:
  比对鼠标的坐标和控件自身的坐标,在设定范围内的就触发GUICtrl...
 楼主| 发表于 2008-10-30 01:14:06 | 显示全部楼层
原帖由 liongodmien 于 2008-10-29 23:00 发表
一个想法:
  比对鼠标的坐标和控件自身的坐标,在设定范围内的就触发GUICtrl...

能否给段例子?非常感谢
发表于 2008-10-30 09:56:58 | 显示全部楼层
给你一个未完成的脚本,仅供参考!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2008-10-30 15:51:11 | 显示全部楼层
原帖由 pcbar 于 2008-10-30 09:56 发表
给你一个未完成的脚本,仅供参考!!

不错,可惜这个是按下去之后才变图片的.
发表于 2008-10-30 17:00:49 | 显示全部楼层
原帖由 l4ever 于 2008-10-30 15:51 发表

不错,可惜这个是按下去之后才变图片的.


无语....
发表于 2008-10-30 22:54:11 | 显示全部楼层
我日,这个GUICtrlSetOnHover_UDF复杂得吓人!
发表于 2009-2-17 00:10:54 | 显示全部楼层
使用下面这个函数,后面有一段简单的示例,是用消息提示做的例子,图片也一样,case下面跟的代码不同就是了

GUIGetCursorInfo ( [窗口句柄] )
成功: 返回一个5个元素的数组来表示鼠标的坐标信息:  
$array[0] = X 坐标 (水平轴)
$array[1] = Y 坐标(垂直轴)
$array[2] = 鼠标左键被按下 (1 为按下, 0 为未按下)
$array[3] = 鼠标右键被按下 (1 未按下, 0 为未按下)  
$array[4] = 鼠标下面的控件的控件ID( 0 为没有或者无法获取)  


#include <GuiConstants.au3>
Opt("GUIOnEventMode", 1)

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 120, 350, 192, 114)
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
$t=10;定义需要批量产生的按钮个数
Dim $Button[999999];批量产生的按钮个数上限为999999
GUISetState()
#EndRegion ### END Koda GUI section ###
For $i = 1 To $t
        $Button[$i] = GUICtrlCreateButton("Button" & $i, 30, 30*($i)-15, 60, 25, 0)
        GUICtrlSetOnEvent($Button[$i], "main")
Next
_ReduceMemory(@AutoItPID);释放内存
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()
                For $i = 1 To $t
                $mouse = GUIGetCursorInfo()
                $pos = MouseGetPos()
                Switch $mouse[4]
                        Case $Button[$i]
                                ToolTip('这是自动生产的第'&$i&'按钮', $pos[0] + 10, $pos[1] + 25)
                EndSwitch
        Next
        Sleep(100)
        _ReduceMemory(@AutoItPID);释放内存
WEnd

Func main()
        For $i = 1 To $t
                Switch @GUI_CtrlId
                        Case $GUI_EVENT_CLOSE
                                Exit
                        Case $Button[$i]
                                MsgBox(0, "第"&$i&"个", "button" & $i)
                                _ReduceMemory(@AutoItPID);释放内存
                EndSwitch
        Next
EndFunc   ;==>main

Func _ReduceMemory($i_PID = -1);内存释放函数
        If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf
        Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory 


[ 本帖最后由 298311657 于 2009-2-17 00:12 编辑 ]
发表于 2009-2-17 09:24:56 | 显示全部楼层
支持狮子的说法
发表于 2009-2-17 23:16:00 | 显示全部楼层
我挺好奇这个释放内存的效果如何,即使有,那么认为一般的小程序有必要么?
——纯粹的疑惑。


不小心发个疑惑,马上测试了一下,我一个原占用物理内存19M占用虚拟内存16M的程序,在启动后使用了如上的释放内存作业,检查占用物理内存1M占用虚拟内存16M。

没话说。效果明显。

顺便跑题来谢谢这位 298311657 的朋友。呵呵

[ 本帖最后由 KiwiCsj 于 2009-2-17 23:44 编辑 ]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 13:34 , Processed in 0.089379 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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