在整个GUI窗口显示图片,图片2秒钟换一张,怎样实现点击每个图片执行命令呢
在整个GUI窗口显示图片,图片2秒钟换一张,怎样实现点击每个图片执行命令呢源码如下:
#include <array.au3>
#include <file.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
Local $path =@MyDocumentsDir&"\My Pictures\"
Local $xfile = _FileListToArray($path, "*.jpg")
Local $f, $shell, $s, $i
$win = GUICreate("")
$Form1 = GUICreate("Form1", 249, 352, @DesktopWidth-260, @DesktopHeight-515,0x80000000,0,$win)
$jpg = GUICtrlCreatePic("", -1, -1, 250, 353)
GUISetState()
While 1
For $i = 1 To UBound($xfile) - 1
$file = $path& $xfile[$i]
$num=$xfile[$i]
GUICtrlSetImage($jpg, $file)
Sleep(2000)
Next
WEnd
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $jpg
MsgBox(0,"",$num)
EndSwitch
WEnd 要实现图片2秒钟换一张 应该用 AdlibRegister 函数
你的第1个循环要取消, 用AdlibRegister函数注册的函数替换掉 本帖最后由 xwt620 于 2011-10-27 01:11 编辑
你的窗口控件不能响应啊,因为程序一直在第一个whlie 1里循环出不来了#include <array.au3>
#include <file.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
Global $path = @MyDocumentsDir & "\My Pictures\"
Global $xfile = _FileListToArray($path, "*.jpg")
Global $f, $shell, $s, $i = 1, $num
$win = GUICreate("111", 400, 300)
$Form1 = GUICreate("Form1", 249, 352, @DesktopWidth - 260, @DesktopHeight - 515);,0x80000000,0,$win)
$jpg = GUICtrlCreatePic("", -1, -1, 250, 353)
GUISetState()
AdlibRegister("ShowImage", 2000)
Func ShowImage()
If $i <= UBound($xfile) - 1 Then
$file = $path & $xfile[$i]
$num = $xfile[$i]
GUICtrlSetImage($jpg, $file)
$i += 1
Else
$i = 1
$file = $path & $xfile[$i]
$num = $xfile[$i]
GUICtrlSetImage($jpg, $file)
$i += 1
EndIf
EndFunc ;==>ShowImage
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $jpg
;~ MsgBox(0, "", $num)
AdlibUnRegister()
If $i <= UBound($xfile) - 1 Then
$file = $path & $xfile[$i]
$num = $xfile[$i]
GUICtrlSetImage($jpg, $file)
$i += 1
Else
$i = 1
$file = $path & $xfile[$i]
$num = $xfile[$i]
GUICtrlSetImage($jpg, $file)
$i += 1
EndIf
AdlibRegister("ShowImage", 2000) EndSwitch
WEnd
{:face (377):}我也知道是第一个WHILE的问题,忘了还有这个AdlibRegister函数,谢谢楼上两位大哥了,
非常感谢:xwt620 接触AU3很久了,GUI还是有很多不懂,真是惭愧啊 本帖最后由 xms77 于 2011-10-26 22:36 编辑
回复 1# qzhid #include <array.au3>
#include <file.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
Local $path = @MyDocumentsDir & "\My Pictures\"
Local $xfile = _FileListToArray($path, "*.jpg",1)
;_ArrayDisplay($xfile)
Local $i
Global $pic_info,$file,$Timer
Opt('GUIOnEventMode', 1) ;事件模式
HotKeySet("{Esc}","_Exit") ;按Esc键退出程序
$win = GUICreate("")
$Form1 = GUICreate("Form1", 249, 352, @DesktopWidth-260, @DesktopHeight-515,0x80000000,0,$win)
$jpg = GUICtrlCreatePic("", -1, -1, 250, 353)
GUICtrlSetOnEvent(-1, '_ShowPic')
GUISetState()
$i = 1
While 1
If $i > $xfile Then $i = 1
If $Timer = 0 Then
AdlibRegister("_Setpic",2000)
$Timer = 1
$pic_info = $xfile[$i]
$file = $path&"\"&$pic_info
$i += 1
EndIf
Sleep(100)
WEnd
Func _Setpic()
GUICtrlSetImage($jpg,$file)
$Timer = 0
EndFunc;==> _Setpic
Func _ShowPic()
Switch @GUI_CtrlId
Case $jpg
MsgBox(0,"现在显示的图片名为", $pic_info,2)
EndSwitch
EndFunc;==> _ShowPic
Func _Exit()
Exit
EndFunc;==> _Exit 回复 3# xwt620
怎么没有图片显示啊? 回复 7# xms77
$path = @MyDocumentsDir & "\My Pictures\"
说明 你的路径里没有图片 回复 8# xwt620
我是使用的有图片的路径,非这个代码里的路径 回复 7# xms77
算了,我请你看神仙妹妹,好嘛!
#NoTrayIcon
#Include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Memory.au3>
#include <String.au3>
#include <GDIPlus.au3>
Global $SocketID
_SlidePicture()
Func _SlidePicture()
Local $hImage, $iWidth, $iHeight, $hGui
Local $sLink = "myarticle.enet.com.cn", $sPic = "/images/2007/0917/1189986155220/"
Opt("GUIOnEventMode", 1)
$hGui = GUICreate("Slide Picture", -1, -1, -1, -1, -1, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
GUISetState()
WinSetOnTop($hGui, "", 1)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_GuiOnEvent", $hGUI)
For $i = 1 To 6
_GDIPlus_Startup()
$hImage = _ImageFromNet($sLink, $sPic & $i & ".jpg")
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
WinMove($hGUI, "", -1, -1, $iWidth, $iHeight)
For $j = 0 to 255 step 1
_SetGuiBitmap($hGui, $hImage, $j)
Sleep(10)
Next
For $j = 255 to 0 step -1
_SetGuiBitmap($hGui, $hImage, $j)
Sleep(10)
Next
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
Next
GUIDelete($hGUI)
EndFunc
Func _ImageFromNet($sHost, $sSource)
Local $sIp, $sData, $sSocket, $sRecvHeader = "", $sRecvBin = "0x", $aRet
Local $iBytes, $mBitmap, $iLength, $hData, $pData, $tMem, $aResult
TCPStartup()
$sIp = TCPNameToIP($sHost)
$sData = "GET " & $sSource & " HTTP/1.1" & @Crlf & "Host: " & $sHost & @Crlf & @CRLF
$sSocket = TCPConnect ($sIp, 80)
TCPSend ($sSocket, $sData)
If @error Then Return Seterror(1, 1, 1)
Do
$sRecvHeader = TCPRecv($sSocket, 1)
Until $sRecvHeader <> ""
Do
$sRecvHeader &= TCPRecv($sSocket, 1)
Until StringInStr($sRecvHeader, @Crlf & @Crlf)
$aRet = _StringBetween($sRecvHeader, 'Content-Length: ', @Crlf )
If IsArray($aRet) Then
$iBytes = $aRet
Do
$sRecvBin &= StringTrimLeft(TCPRecv($sSocket, 1024, 1 ), 2)
Until BinaryLen(Binary($sRecvBin)) >= $iBytes
TCPCloseSocket($sSocket)
TCPShutdown()
$mBitmap = Binary($sRecvBin)
$iLength =BinaryLen($mBitmap)
$hData = _MemGlobalAlloc ($iLength, $GMEM_MOVEABLE)
$pData = _MemGlobalLock ($hData)
$tMem =DllStructCreate ( "byte[" & $iLength & "]", $pData )
DllStructSetData ($tMem, 1, $mBitmap)
_MemGlobalUnlock ($hData)
$aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "hwnd", $pData, "int", True, "ptr*", 0)
If @error Then Return SetError(@error, @extended, 0)
$aResult = DllCall ($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $aResult, "int*", 0)
If @error Then Return SetError (@error, @extended, 0)
Return $aResult
Else
TCPCloseSocket($SocketID)
TCPShutdown( )
Return Seterror(1, 1, 1)
EndIf
EndFunc
Func _SetGuiBitmap($hGUI, $hImage, $iTrans)
Local $hDC, $hCDC, $hBitmap, $hObj, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hDC = _WinAPI_GetDC(0)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hObj = _WinAPI_SelectObject($hCDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha" , $iTrans)
DllStructSetData ($tBlend, "Format", 1)
_WinAPI_UpdateLayeredWindow($hGUI, $hDC, 0, $pSize, $hCDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC(0, $hDC)
_WinAPI_SelectObject($hCDC, $hObj)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hCDC)
EndFunc
Func _GuiOnEvent()
ConsoleWrite("Hit Left key!" & @CRLF)
EndFunc
_slidepicure()不错哈 回复 10# happytc
哇,果然有神仙MM,是亦非MM吗?
页:
[1]