cashiba 发表于 2017-3-6 11:59:28

Label等静态控件如何让文字垂直居中并且保持原来的多行显示?

本帖最后由 cashiba 于 2017-3-10 22:55 编辑

#include <GUIConstantsEx.au3>
#Include <Staticconstants.Au3>

Example()

Func Example()
    GUICreate("Label")
    GUICtrlCreateLabel("锦瑟无端五十弦,一弦一柱思华年。", 10, 10, 100, 70,8388608+$Ss_Center)
    GUICtrlCreateLabel("庄生晓梦迷蝴蝶,望帝春心托杜鹃。", 10, 90, 100, 70,8388608+$Ss_Centerimage)
    GUICtrlCreateLabel("沧海月明珠有泪,蓝田日暖玉生烟。", 10, 170,100, 70,8388608)
    GUICtrlCreateLabel("此情可待成追忆,只是当时已惘然。", 10, 250,100, 70,8388608+$Ss_Centerimage)
    GUICtrlCreateLabel("--锦瑟 ·李商隐", 10, 330,100,70,8388608+$Ss_Right)

    GUISetState(@SW_SHOW)

    While 1
      Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
      EndSwitch
    WEnd
EndFunc
如上图示文字显示有问题.
文字垂直居中没问题,问题是如何保持原来的多行显示,而不是变成单行显示并且被截断呢?

1361739590 发表于 2017-3-6 14:30:09

好像不能这样。

229989799 发表于 2017-3-6 17:28:29

利用换行符比较累#include <GUIConstantsEx.au3>
#Include <Staticconstants.Au3>
Example()
Func Example()
    GUICreate("Label")
    GUICtrlCreateLabel('我' & @CRLF & '是' & @CRLF & '例' & @CRLF & '子',100,100,80,100,0x2000)
    GUISetState(@SW_SHOW)

    While 1
      Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
      EndSwitch
    WEnd
EndFunc

Alam 发表于 2017-3-6 18:00:09

GUICreate("Test", 200, 100)
GUICtrlCreateLabel(StringFormat('我\n才是\n好例\n子'),10,20,180,80,BitOR(0x01,0x2000))
GUISetState()
Do
Sleep(10)
Until GUIGetMsg()= -3

cashiba 发表于 2017-3-6 21:20:14

好像都达不到效果阿....
{:face (396):}

Alam 发表于 2017-3-7 00:23:56

感觉楼主有点过于呆板了,虽然5#的图看起来很灵俏. GUICtrlCreateLabel(StringFormat("\n\n此情可待成追忆,\n只是当时已惘然。"), 10, 250,100, 70,8388608+BitOR(0x01,0x2000))

cashiba 发表于 2017-3-7 18:13:32

本帖最后由 cashiba 于 2017-3-7 21:07 编辑

感觉楼主有点过于呆板了,虽然5#的图看起来很灵俏.
Alam 发表于 2017-3-7 00:23 http://www.autoitx.com/images/common/back.gif
看起来是目前最好的解决办法了....
只是觉得像这样用换行符的效果不太好控制,上面的例子是为了演示,label高度都很大,如果小点的那种,就没那么方便了#include <GUIConstantsEx.au3>
#Include <Staticconstants.Au3>
Example()
Func Example()
    GUICreate("Label")
    GUICtrlCreateLabel(StringFormat("锦瑟无端五十弦,\n一弦一柱思华年。"), 10, 10, 100, 35,8388608+BitOR(0x01,0x2000))
    GUICtrlCreateLabel(StringFormat("\n庄生晓梦迷蝴蝶,\n望帝春心托杜鹃。"), 10, 55, 100, 50,8388608+BitOR(0x01,0x2000))
    GUICtrlCreateLabel(StringFormat("\n\n沧海月明珠有泪,\n蓝田日暖玉生烟。"), 10,115,100, 65,8388608+BitOR(0x01,0x2000))
    GUICtrlCreateLabel(StringFormat("\n\n此情可待成追忆,\n只是当时已惘然。"), 10, 195,100, 80,8388608+BitOR(0x01,0x2000))
    GUICtrlCreateLabel(StringFormat("\n\n--锦瑟 ·李商隐"), 10, 290,100,70,8388608+$Ss_Right)
    GUISetState(@SW_SHOW)
    While 1
      Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
      EndSwitch
    WEnd
EndFunc

cashiba 发表于 2017-3-7 21:12:29

不用$Ss_Centerimage和$bs_center参数的时候,文字是很自然的触边自动换行.
自然的就是好....
{:face (125):}

skysmile 发表于 2017-3-7 22:43:50

你这样写,为了什么,
如果想换行直接用 @CRLF换行不就行了

1361739590 发表于 2017-3-7 23:06:31

回复 6# Alam


    有没有办法达到 上下居中,长度超过的话能自动换行

skysmile 发表于 2017-3-7 23:12:55

本帖最后由 skysmile 于 2017-3-7 23:16 编辑

回复 10# 1361739590
垂直居中可以用 BitOR($ss_center,$bs_center)

1361739590 发表于 2017-3-7 23:16:17

回复 11# skysmile


    不会换行。

skysmile 发表于 2017-3-7 23:18:18

BitOR($ss_center,$bs_center,$BS_MULTILINE)

1361739590 发表于 2017-3-7 23:24:24

回复 13# skysmile


    一样不行。

帆船 发表于 2017-3-8 13:08:19

回复 13# skysmile
BS系列是按钮的样式啊……你说话前就没有自己试试?
页: [1] 2
查看完整版本: Label等静态控件如何让文字垂直居中并且保持原来的多行显示?