找回密码
 加入
搜索
查看: 8102|回复: 21

[GUI管理] 滚动文字提问!(已解决)

 火.. [复制链接]
发表于 2010-5-8 19:27:29 | 显示全部楼层 |阅读模式
本帖最后由 nmgwddj 于 2010-5-14 16:35 编辑

搜了搜论坛 做了个透明的GUI加Label文字。。

想让文字在窗口中滚动。。自己写了一个 。但是拓展性太小了。。

比如设置了Label的固定宽度 多写一些文字就显示不了了。还有没办法判断文字是否已经滚动完毕 思路不是很清晰 请教下高手帮忙改一下
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 600, 40, 192, 654, $WS_POPUP, $WS_EX_LAYERED)
$WGP = WinGetPos($Form1)
GUISetBkColor(0xABCDEF)
$Label1 = GUICtrlCreateLabel("什么东西????????", 0, 0, 600, 40)
GUICtrlSetColor($Label1, 0xe000ff) ;设置文本颜色
GUICtrlSetFont($Label1, 30, 400) ;设置字体效果
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_API_SetLayeredWindowAttributes($Form1, 0xABCDEF)
move()
;MsgBox(0, '', $WGP[0] & $WGP[1] & $WGP[2] & $WGP[3])
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Func move()
        $s = 600
        While 1
                ControlMove('', '', $Label1, $s - 1, 0)
                $s -= 1
                Sleep(5)
        WEnd
EndFunc   ;==>move
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

        Local Const $AC_SRC_ALPHA = 1
        Local Const $ULW_ALPHA = 2
        Local Const $LWA_ALPHA = 0x2
        Local Const $LWA_COLORKEY = 0x1
        If Not $isColorRef Then
                $i_transcolor = Hex(String($i_transcolor), 6)
                $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
        EndIf
        Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
        Select
                Case @error
                        Return SetError(@error, 0, 0)
                Case $Ret[0] = 0
                        Return SetError(4, 0, 0)
                Case Else
                        Return 1
        EndSelect
EndFunc   ;==>_API_SetLayeredWindowAttributes

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-5-8 19:33:17 | 显示全部楼层
还有就是窗口置顶的问题
WinSetOnTop函数中的标题文本应该如何填 用什么来获取呢?
发表于 2010-5-8 20:38:45 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("滚动文字", 600, 40, 192, 654,$WS_POPUP, $WS_EX_LAYERED)
;$WGP = WinGetPos($Form1)
GUISetBkColor(0xABCDEF)
$txt = "中广网北京5月8日消息据中国之声《全国新闻联播》18时30分报道,应俄罗斯联邦总统梅德韦杰夫邀请,国家主席胡锦涛当地时间8号下午抵达莫斯科,出席俄罗斯纪念卫国战争胜利65周年庆典"
$Label1 = GUICtrlCreateLabel($txt, 0, 0, StringLen ($txt)*40, 40)
;MsgBox(0,StringLen ($txt)*40,$txt)
GUICtrlSetColor($Label1, 0xe000ff) 
GUICtrlSetFont($Label1, 30, 400) 
GUISetState(@SW_SHOW)
;WinSetOnTop("滚动文字", "", 1)
_API_SetLayeredWindowAttributes($Form1, 0xABCDEF)
move()
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Func move()
        $s = StringLen ($txt) + 600
        Do
                ControlMove('', '', $Label1, $s - 1, 0)
                $s -= 1
                Sleep(5)
                        
                Until $s = -StringLen ($txt)*50
                MsgBox(0,0,'滚动完毕')
                Exit
        EndFunc   
        
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

        Local Const $AC_SRC_ALPHA = 1
        Local Const $ULW_ALPHA = 2
        Local Const $LWA_ALPHA = 0x2
        Local Const $LWA_COLORKEY = 0x1
        If Not $isColorRef Then
                $i_transcolor = Hex(String($i_transcolor), 6)
                $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
        EndIf
        Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
        Select
                Case @error
                        Return SetError(@error, 0, 0)
                Case $Ret[0] = 0
                        Return SetError(4, 0, 0)
                Case Else
                        Return 1
        EndSelect
EndFunc 
解决问题:
1.任意长度的字符串都可滚动显示
2.显示完会提示并且自动退出

未解决问题:
窗口置顶
不管是否添加WinSetOnTop("滚动文字", "", 1)
只要点击屏幕其他地方
滚动会静止
只要在任务栏重新点击此脚本方可继续滚动

评分

参与人数 1金钱 +25 贡献 +5 收起 理由
nmgwddj + 25 + 5 太帅了 学习了

查看全部评分

发表于 2010-5-8 21:56:49 | 显示全部楼层
上面的问题都好解决,但透明后移动会闪烁…
发表于 2010-5-9 00:59:34 | 显示全部楼层
不单单ControlMove 确实有问题。。在png背景模式下任何移动都。。。让人恼火啊。。闪屏~~
发表于 2010-5-9 06:52:04 | 显示全部楼层
看两位高手有什么好的解决办法啦...
发表于 2010-5-9 08:31:00 | 显示全部楼层
蛮厉害的好例子!
 楼主| 发表于 2010-5-9 09:21:24 | 显示全部楼层
回复 3# lynfr8


    开始也想到设置字体宽度了。但是一些标点符号实际宽度没有40
 楼主| 发表于 2010-5-9 09:35:51 | 显示全部楼层
回复 4# afan


    写个代码一起研究研究啊
 楼主| 发表于 2010-5-9 12:06:49 | 显示全部楼层
发现用了
$WS_EX_TOOLWINDOW
样式之后 窗口就可以置顶了。但是走动暂停的情况还存在 希望高手帮忙解决
发表于 2010-5-9 13:05:36 | 显示全部楼层
本帖最后由 afan 于 2010-5-9 13:07 编辑

置顶可以加 $WS_EX_TOPMOST 扩展样式
ControlMove() 加上标题就不暂停
发表于 2010-5-9 20:46:29 | 显示全部楼层
闪屏的问题我也正烦着呢。难道对透明的支持就这么不好?那个高人能写个UDF啊。
发表于 2010-5-10 01:27:47 | 显示全部楼层
支持一下。继续关注!
发表于 2010-5-10 01:28:14 | 显示全部楼层
我的钱少得可怜!!呜呜呜呜我........
发表于 2010-5-10 15:13:30 | 显示全部楼层
继续关注。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 09:25 , Processed in 0.082527 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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