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

[AU3基础] 求教高手关于重复While的问题

 火.. [复制链接]
发表于 2014-5-29 09:38:49 | 显示全部楼层
本帖最后由 水木子 于 2014-5-29 09:44 编辑

回复 15# qsy666888
哦!难道是这个函数库截取了 WM_COMMAND 消息,导致按钮无法重绘?
按理说应该不会啊!WIN7是一切正常的。
要是这样的话,还是有办法解决的,只是不知道你要的完整程序是什么样的,因为这个问题牵连的东西比较多。


你换下面这代码试试!
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include 'GUICtrlOnHover.au3'
Opt('GUIOnEventMode', 1)

$MyGui1 = GUICreate('', 400, 300)
GUISetOnEvent(-3, '_GuiMsg')
$Btnton1_1 = GUICtrlCreateButton('显   示', 150, 100, 100, 40)
GUICtrlSetOnEvent($Btnton1_1, '_GuiMsg')
GUISetState()

$MyGui2 = GUICreate('', 300, 100, -1, -1, -1, -1, $MyGui1)
GUISetOnEvent(-3, '_GuiMsg')
GUICtrlCreatePic('bg.jpg', 0, 0, 300, 100)
GUICtrlSetState(-1, $GUI_DISABLE)

$Btnton2_1 = GUICtrlCreatePic('Bitmap_181.bmp', 50, 50, 115, 26)
GUICtrlSetOnEvent($Btnton2_1, '_GuiMsg')

$Btnton2_2 = GUICtrlCreateButton('', 200, 50, 32, 32, $BS_ICON)
GUICtrlSetImage(-1, 'Bitmap_181.ico')
GUICtrlSetOnEvent($Btnton2_2, '_GuiMsg')

While 1
        Sleep(250)
WEnd

Func _GuiMsg()
        Switch @GUI_CtrlId
                Case -3
                        Switch @GUI_WinHandle
                                Case $MyGui1
                                        Exit
                                Case $MyGui2
                                        __GUICtrl_SOH_ReleaseResources()
                                        GUISetState(@SW_ENABLE, $MyGui1)
                                        GUISetState(@SW_HIDE, $MyGui2)
                        EndSwitch
                Case $Btnton1_1
                        GUISetState(@SW_SHOW, $MyGui2)
                        GUISetState(@SW_DISABLE, $MyGui1)
                        _GUICtrl_SetOnHover($Btnton2_1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
                        _GUICtrl_SetOnHover($Btnton2_2, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
                        
                Case $Btnton2_1
                        GUICtrlSetImage($Btnton2_1, 'Bitmap_187.BMP')
;~                         MsgBox(0, 0, '响应鼠标点击')
                Case $Btnton2_2
                        GUICtrlSetImage($Btnton2_2, 'Bitmap_187.ico')
;~                         MsgBox(0, 0, '响应鼠标点击2')                        
        EndSwitch
EndFunc   ;==>_GuiMsg

Func _Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $Btnton2_1
                        GUICtrlSetImage($Btnton2_1, 'Bitmap_186.bmp')
                Case $Btnton2_2
                        GUICtrlSetImage($Btnton2_2, 'Bitmap_186.ico')                        
        EndSwitch
EndFunc   ;==>_Hover_Proc

Func _Leave_Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $Btnton2_1
                        GUICtrlSetImage($Btnton2_1, 'Bitmap_181.bmp')
                Case $Btnton2_2
                        GUICtrlSetImage($Btnton2_2, 'Bitmap_181.ico')                        
        EndSwitch
EndFunc   ;==>_Leave_Hover_Proc
 楼主| 发表于 2014-5-29 09:49:45 | 显示全部楼层
好点了,不过点击查看按钮,弹出对话框,然后再把对话框关闭掉,”查看“ 按钮无框边,鼠标经过才显示出框边
发表于 2014-5-29 09:53:39 | 显示全部楼层
是啊!所以我刚刚说不知道你完整的程序是什么样的。
 楼主| 发表于 2014-5-29 09:57:37 | 显示全部楼层
我是想点击动态按钮能够弹出设置的gui窗口
发表于 2014-5-29 10:09:22 | 显示全部楼层
回复 19# qsy666888
回到你原来的。
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include '_dButton.au3'
Opt("GUIOnEventMode", 1)
zhugui()

Global $Gui, $btn_ok, $btn_ex

Func xshi()
        Global $Gui = GUICreate("动态按钮he控件指示", 300, 100, -1, -1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "GuiClose")
        Global $ex = GUICtrlCreateLabel(" X ", 280, 2, 17, 12)
        WinSetTrans($Gui, "", 255);必须要使用此函数,即使透明值设置为255,也就是不透明都可以,但是不能没有
        Global $btn_ok = GUICtrlCreateButton("", 50, 47, 100, 26, $BS_BITMAP)
        GUICtrlSetImage(-1, "Bitmap_181.bmp")
        GUICtrlSetCursor(-1, 0)
        Global $btn_ex = GUICtrlCreateButton("", 180, 44, 32, 32, $BS_ICON)
        GUICtrlSetImage(-1, "Bitmap_181.ico")
        GUICtrlSetCursor(-1, 0)
        Global $Pic1 = GUICtrlCreatePic("bg.jpg", 0, 0, 300, 100, $WS_CLIPSIBLINGS)
        GUICtrlCreateLabel("", 0, 0, 300, 100, $WS_CLIPSIBLINGS, $GUI_WS_EX_PARENTDRAG)
        Global $label = GUICtrlCreateLabel("当鼠标处于本行文字上方,将进行提示", 50, 15)
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        GUICtrlSetColor(-1, 0xff0000)
        GUISetState(@SW_SHOW)
EndFunc   ;==>xshi

While 1
        Sleep(250)
        _dButton($Gui, $btn_ok, "Bitmap_181.bmp", "Bitmap_186.bmp", "Bitmap_187.bmp");如果去掉,但达不到效果
        _dButton($Gui, $btn_ex, "Bitmap_181.ico", "Bitmap_186.ico", "Bitmap_187.ico");这两行        
WEnd

Func GuiClose()
        Exit
EndFunc   ;==>GuiClose

Func zhugui()
        Global $Form1 = GUICreate("Form1", 475, 203, 192, 124)
        GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
        Global $Button1 = GUICtrlCreateButton("显   示", 128, 88, 185, 41)
        GUICtrlSetOnEvent($Button1, "xianshi")
        GUISetState()
EndFunc   ;==>zhugui

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close

Func xianshi()
        xshi()
EndFunc   ;==>xianshi
 楼主| 发表于 2014-5-29 10:30:35 | 显示全部楼层
回复 20# 水木子
谢谢你,非常感谢
发表于 2014-5-29 10:36:04 | 显示全部楼层
本帖最后由 水木子 于 2014-5-29 10:39 编辑

回复 21# qsy666888

没什么,是我把问题搞复杂了。
最开始我为什么要改你原来的,因为我觉得这样循环检查,效率很差。
没想到我这个方法在WIN8里还存在不少问题。
 楼主| 发表于 2014-5-29 11:04:12 | 显示全部楼层
回复 22# 水木子

大侠,为什么我一点别的窗口或桌面,也就是说点击不在本gui窗口区域外,就自动退出,下面是提示
"C:\Users\qinshiyong\Desktop\While??\While??\_dButton.au3" (23) : ==> ??????????.:
If $mouse[4] = $btn_ctrlid Then
If $mouse^ ERROR
发表于 2014-5-29 11:11:34 | 显示全部楼层
回复 23# qsy666888

貌似是你这个_dButton.au3 有点小问题,可能还需要加一些判断,容错。
 楼主| 发表于 2014-5-29 11:14:17 | 显示全部楼层
哦,能帮我改改吗,大侠
发表于 2014-5-29 14:12:36 | 显示全部楼层
e,学习学习,露个脸。
发表于 2014-5-29 15:47:12 | 显示全部楼层
学习一下。。。。
发表于 2014-5-29 17:19:24 | 显示全部楼层
学习了,超版好厉害
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 04:42 , Processed in 0.069074 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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