找回密码
 加入
搜索
查看: 2416|回复: 5

[GUI管理] 倒计时加载gif动画控件,请问如何用变量让gif和进度条、提示文字居中显示?

[复制链接]
发表于 2018-4-17 17:43:47 | 显示全部楼层 |阅读模式
本人最近做了一个带进度条和gif动画的倒计时窗体,是在分辨率为1920*1080下制作的,生成后控件全部在指定位置,但是在不同分辨率下,gif控件、进度条都不会在相对居中位置显示,请教论坛大神,如何在不同分辨率下gif和进度条、提示文字都居中?最小分辨率为1024*768。可能表达的不太准确,我的意思是在最小分辨率为1024*768下,进度条、提示文字都能显示出来
这是我在1920*1080分辨率下的效果


这是我在1024*768分辨率下的效果,显示不出提示文字和进度条


au3代码;具体的疑问在代码标注中已写出
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>



Dim $width=1924;自定义窗体宽度
Dim $height=1084;自定义窗体高度


$handle_gif = GUICreate("Form1", $width, $height, (@DesktopWidth-$width)/2,(@DesktopHeight-$height)/2, $ws_popup);窗体居中显示
GUISetBkColor(0x000000)
_WinAPI_SetLayeredWindowAttributes ($handle_gif, 0x010101,190)     
$Obj_gif = ObjCreate("AniGIFCtrl.AniGIF")                 ;创建GIF对象
$id_ctrl_gif = GUICtrlCreateObj($Obj_gif, 1, 62, 1920,960)  ;创建gif播放控件,1,62 分别为距离左边和上边的像素


GUISetState(@SW_SHOW)



$Obj_gif.ReadGIF("Honeycam .gif")               ;gif动画path。全路径,相对路径均可
        GUICtrlSetState(-1, $gui_disable)
$Obj_gif.Speed=1                                      ;播放速度。1-正常;数字增大速度变慢;
$Obj_gif.Play                                              ;播放

;$Obj_gif.stop                                            ;停止


Global $time = 240;240为倒计时秒数;如果有能力也可以写为几分几秒,可是我不会了
#Region ### START Koda GUI section ### Form=
$Label6 = GUICtrlCreateLabel("为了你的健康,主人你该起身活动3分钟了!!", 670, 10, 800,25);这是上方提示文字
GUICtrlSetColor($Label6, 0xFFFFFF)
GUICtrlSetFont($Label6, 20)

$Label5 = GUICtrlCreateLabel($time & "秒后你就可以开始工作了!", 720, 1034, 600,25);这是倒计时提示文字
GUICtrlSetColor($Label5, 0xFF0000)
GUICtrlSetFont($Label5, 20)
$Progress1 = GUICtrlCreateProgress(650, 1065, 500, 10);这是进度条
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibRegister("_timer", 1000)

Func _timer()
        $time -= 1
        GUICtrlSetData($Label5,$time & "秒后你就可以开始工作了!!")
        GUICtrlSetData($Progress1, (240 - $time) / 1)
        If $time <= 0 Then Exit
EndFunc   ;==>_timer



While 1
        
        Sleep(100);为了减少cpu占用率写的代码,但是感觉没有毛用,刚开始依旧是黑屏
        $nMsg = GUIGetMsg()
                
                
                

                
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
                
                
                
        Select
                Case $nMsg = $GUI_EVENT_CLOSE 
                        DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $handle_gif, "int", 500, "long", 0x00090000)
                        Exit
                Case $nMsg = $GUI_EVENT_PRIMARYDOWN
                        ;AdlibRegister()
                        GUICtrlSetState($Progress1,$GUI_DISABLE )
        EndSelect

WEnd
我把代码和附件全部上传,恳请群内大神支招。源码和图片压缩起来超过12兆了,只好分卷压缩了

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +20 收起 理由
zpmc123 + 20

查看全部评分

 楼主| 发表于 2018-4-17 17:45:28 | 显示全部楼层
重新传一下在1920*1080分辨率下的效果,也就是我成品的期待效果图

本帖子中包含更多资源

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

×
发表于 2018-4-17 18:09:01 | 显示全部楼层
论坛太寂静了,捣腾起来。。。。

感觉好像是你创建的GIF大小没变化吧,

应该创建的大小随着分辨率变化而变化就能解决?
发表于 2018-4-17 18:39:30 | 显示全部楼层
$handle_gif = GUICreate("Form1", $width, $height, (@DesktopWidth-$width)/2,(@DesktopHeight-$height)/2, $ws_popup);窗体居中显示
首先把上面那行改成如下,既然是全屏还计算居中…
$handle_gif = GUICreate("Form1", @DesktopWidth, @DesktopHeight, 0, 0, $ws_popup)
其它的坐标都应该根据 @DesktopWidth @DesktopHeight 计算相对值
发表于 2018-4-19 12:48:58 | 显示全部楼层
回复 1# 沉默的斗鱼


    属于屏保类,很不错的想法!
发表于 2020-2-23 13:07:05 | 显示全部楼层
请问我怎么运行出错:
$Obj_gif.ReadGIF("Honeycam .gif")
$Obj_gif^ ??
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 08:44 , Processed in 0.142916 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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