zz999 发表于 2010-12-17 12:37:40

请教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看签名的时候就是滚动式的

飘云 发表于 2010-12-17 12:45:22

要滚动?我提个思路,label控件设置的长度足够显示全部文本,高度只够一行的高度,但是GUI窗体宽度不够,所以label中的内容显示不全,这时在while里或者注册个AdlibRegister函数,通过判断和循环等方式用GUICtrlSetPos函数不断的移动label控件即可,具体自己想吧

都市浪子666 发表于 2010-12-17 12:58:23

不懂耶,,帮顶,,等达人来解答

zz999 发表于 2010-12-17 13:17:25

回复 2# 飘云


    不懂      可否给个例子

lxz 发表于 2010-12-17 14:30:42

是换行,不是滚动..

飘云 发表于 2010-12-17 19:06:31

本帖最后由 飘云 于 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:10:29

本帖最后由 飘云 于 2010-12-17 19:17 编辑

取巧的方法,用两个label封住左右,原始label宽度要达到能显示全部文本,当然,放置别的控件也可以,主要目的是遮住左右罢了,如果你的GUI窗体本身就不宽,那连控件也省了,利用窗体本身就能遮住,当然,我那代码很粗糙,具体问题具体分析,后面碰上啥不好办的再考虑~

yhxhappy 发表于 2010-12-18 01:16:35

瞎写的,感觉闪烁不太好#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

飘云 发表于 2010-12-18 14:53:33

LS这个好,学习了

lxz 发表于 2010-12-18 16:35:35

代码学习了....
页: [1]
查看完整版本: 请教GUICtrlCreateLabel文字内容过长时如何自动进行滚动显示