滚动文字提问!(已解决)
本帖最后由 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 & $WGP & $WGP & $WGP)
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
Return SetError(4, 0, 0)
Case Else
Return 1
EndSelect
EndFunc ;==>_API_SetLayeredWindowAttributes 还有就是窗口置顶的问题
WinSetOnTop函数中的标题文本应该如何填 用什么来获取呢? #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
Return SetError(4, 0, 0)
Case Else
Return 1
EndSelect
EndFunc 解决问题:
1.任意长度的字符串都可滚动显示
2.显示完会提示并且自动退出
未解决问题:
窗口置顶
不管是否添加WinSetOnTop("滚动文字", "", 1)
只要点击屏幕其他地方
滚动会静止
只要在任务栏重新点击此脚本方可继续滚动 上面的问题都好解决,但透明后移动会闪烁… 不单单ControlMove 确实有问题。。在png背景模式下任何移动都。。。让人恼火啊。。闪屏~~
:face (30): 看两位高手有什么好的解决办法啦... 蛮厉害的好例子! 回复 3# lynfr8
开始也想到设置字体宽度了。但是一些标点符号实际宽度没有40 回复 4# afan
写个代码一起研究研究啊:face (37): 发现用了$WS_EX_TOOLWINDOW样式之后 窗口就可以置顶了。但是走动暂停的情况还存在 希望高手帮忙解决 本帖最后由 afan 于 2010-5-9 13:07 编辑
置顶可以加 $WS_EX_TOPMOST 扩展样式
ControlMove() 加上标题就不暂停 闪屏的问题我也正烦着呢。难道对透明的支持就这么不好?那个高人能写个UDF啊。 支持一下。继续关注! 我的钱少得可怜!!呜呜呜呜我........ 继续关注。。
页:
[1]
2