请教GUICtrlCreateLabel文字内容过长时如何自动进行滚动显示
#include <GUIConstantsEx.au3>#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 592, 151, 192, 124)
$Label1 = GUICtrlCreateLabel("我们都是共产主义接班人", 88, 40, 116, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd有可能获取的数据显示不全,就会自动换行,如果让他滚动显示而不自动换行呢!滚动到结尾然后停一会再滚动。就像手机QQ看签名的时候就是滚动式的 要滚动?我提个思路,label控件设置的长度足够显示全部文本,高度只够一行的高度,但是GUI窗体宽度不够,所以label中的内容显示不全,这时在while里或者注册个AdlibRegister函数,通过判断和循环等方式用GUICtrlSetPos函数不断的移动label控件即可,具体自己想吧 不懂耶,,帮顶,,等达人来解答 回复 2# 飘云
不懂 可否给个例子 是换行,不是滚动.. 本帖最后由 飘云 于 2010-12-17 19:14 编辑
回复 1# zz999
我想你要的是这种效果吧?
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1_1 = GUICreate("Form1", 593, 152, -1, -1)
$Label1 = GUICtrlCreateLabel("我们都是共产主义接班人", 100, 40, 136, 17,$SS_LEFTNOWORDWRAP)
$discov1 = GUICtrlCreateLabel("", 40, 40, 60, 17)
GUICtrlSetBkColor (-1,0xF0F0F0)
$discov2 = GUICtrlCreateLabel("", 200, 40, 50, 17)
GUICtrlSetBkColor (-1,0xF0F0F0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Dim $setup=1
AdlibRegister("yidong",50)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func yidong()
$pos = ControlGetPos($Form1_1,"",$Label1)
Select
Case $pos>66 And $setup=1
GUICtrlSetPos($Label1,$pos-1,$pos)
Case $pos<100 And $setup=-1
GUICtrlSetPos($Label1,$pos+1,$pos)
Case $pos=66 Or $pos=100
$setup *= -1
EndSelect
EndFunc
本帖最后由 飘云 于 2010-12-17 19:17 编辑
取巧的方法,用两个label封住左右,原始label宽度要达到能显示全部文本,当然,放置别的控件也可以,主要目的是遮住左右罢了,如果你的GUI窗体本身就不宽,那连控件也省了,利用窗体本身就能遮住,当然,我那代码很粗糙,具体问题具体分析,后面碰上啥不好办的再考虑~ 瞎写的,感觉闪烁不太好#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
$txt = "[欧洲冠军联赛1/8决赛抽签仪式在瑞士尼翁欧足联总部进行,巴塞罗那和皇马则分别碰上老对手阿森纳和里昂。]"
$t2 = $txt
$Label_width = 300 ;Label控件的宽度
$GUI = GUICreate("", 320, 120)
$Label = GUICtrlCreateLabel($txt, 10, 35, $Label_width, 20, $SS_LEFTNOWORDWRAP) ;$SS_LEFTNOWORDWRAP样式强制单行显示
GUICtrlSetCursor(-1, 0)
$hListView = GUICtrlCreateListView("", 2, 2, 300, 200) ;这个ListView只是用来计算字符串占用的像素宽度的,无实际意义。
GUICtrlSetState(-1, $GUI_HIDE)
$Switch = 0
GUISetState()
While 1
$t_width = _GUICtrlListView_GetStringWidth($hListView, $t2) ;计算字符串占用的像素宽度
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $t_width > $Label_width And $Switch = 0 Then
AdlibRegister("A", 200) ;时间越短滚动越快
$Switch = 1
ElseIf $t_width <= $Label_width Then ;如果剩下的字符占用的像素宽度小于或等于LABEL控件宽度,则说明字符已滚动至末尾
AdlibUnRegister("A")
Sleep(1000)
GUICtrlSetData($Label, $txt) ;将字符串恢复原状
$t2 = $txt
$Switch = 0
Sleep(1000)
EndIf
WEnd
Func A()
$t2 = StringTrimLeft($t2, 1) ;删除字符串从左起的第一个字符
GUICtrlSetData($Label, $t2)
EndFunc LS这个好,学习了 代码学习了....
页:
[1]