l4ever 发表于 2008-10-29 21:35:14

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

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

liongodmien 发表于 2008-10-29 23:00:13

一个想法:
  比对鼠标的坐标和控件自身的坐标,在设定范围内的就触发GUICtrl...

l4ever 发表于 2008-10-30 01:14:06

原帖由 liongodmien 于 2008-10-29 23:00 发表 http://www.autoitx.com/images/common/back.gif
一个想法:
  比对鼠标的坐标和控件自身的坐标,在设定范围内的就触发GUICtrl...
能否给段例子?非常感谢

pcbar 发表于 2008-10-30 09:56:58

给你一个未完成的脚本,仅供参考!!

l4ever 发表于 2008-10-30 15:51:11

原帖由 pcbar 于 2008-10-30 09:56 发表 http://www.autoitx.com/images/common/back.gif
给你一个未完成的脚本,仅供参考!!
不错,可惜这个是按下去之后才变图片的.

pcbar 发表于 2008-10-30 17:00:49

原帖由 l4ever 于 2008-10-30 15:51 发表 http://www.autoitx.com/images/common/back.gif

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

无语....

make2855 发表于 2008-10-30 22:54:11

我日,这个GUICtrlSetOnHover_UDF复杂得吓人!

298311657 发表于 2009-2-17 00:10:54

使用下面这个函数,后面有一段简单的示例,是用消息提示做的例子,图片也一样,case下面跟的代码不同就是了

GUIGetCursorInfo ( [窗口句柄] )
成功: 返回一个5个元素的数组来表示鼠标的坐标信息:
$array = X 坐标 (水平轴)
$array = Y 坐标(垂直轴)
$array = 鼠标左键被按下 (1 为按下, 0 为未按下)
$array = 鼠标右键被按下 (1 未按下, 0 为未按下)
$array = 鼠标下面的控件的控件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
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
                        Case $Button[$i]
                                ToolTip('这是自动生产的第'&$i&'按钮', $pos + 10, $pos + 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)
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf
        Return $ai_Return
EndFunc   ;==>_ReduceMemory

[ 本帖最后由 298311657 于 2009-2-17 00:12 编辑 ]

xrbenbeba 发表于 2009-2-17 09:24:56

支持狮子的说法

KiwiCsj 发表于 2009-2-17 23:16:00

我挺好奇这个释放内存的效果如何,即使有,那么认为一般的小程序有必要么?
——纯粹的疑惑。


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

没话说。效果明显。

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

[ 本帖最后由 KiwiCsj 于 2009-2-17 23:44 编辑 ]
页: [1]
查看完整版本: 在GUI里面做个图片按钮,如何在鼠标悬停的时候显示另外一个图片?