找回密码
 加入
搜索
查看: 2627|回复: 4

[GUI管理] 【已解决】状态栏文本设置的奇怪问题

[复制链接]
发表于 2010-4-12 12:19:21 | 显示全部楼层 |阅读模式
本帖最后由 shqf 于 2010-4-16 22:15 编辑

近在编一程序,发现 状态栏设置的文本过长时导致程序出问题。程序意图是当在TAB的3 个标签页间切换时,状态栏能有不同的文本显示。摘录代码 如下:
#NoTrayIcon
#include <GuiTab.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>

$Form1_1 = GUICreate("Form1", 570, 449, 230, 133)
$Tab1 = GUICtrlCreateTab(6, 6, 558, 410)
_GUICtrlTab_SetItemSize($Tab1, 70, 22)
GUICtrlSetFont(-1, 10)

$TabSheet1 = GUICtrlCreateTabItem("安装软件")
$TabSheet2 = GUICtrlCreateTabItem("U盘管理")
$TabSheet3 = GUICtrlCreateTabItem("系统工具")
GUICtrlCreateTabItem("") ;关闭标签项目

$StatusBar1 = _GUICtrlStatusBar_Create($Form1_1)
Dim $StatusBar1_PartsWidth[3] = [300, 445, -1]
_GUICtrlStatusBar_SetParts($StatusBar1, $StatusBar1_PartsWidth)
_GUICtrlStatusBar_SetText($StatusBar1, "请选择要安装的软件", 0)
_GUICtrlStatusBar_SetText($StatusBar1, "        " & @YEAR & "年" & @MON & "月" & @MDAY & "日", 1)
_GUICtrlStatusBar_SetText($StatusBar1, "        BY SHQF", 2)
_GUICtrlStatusBar_SetMinHeight($StatusBar1, 25)

GUISetState(@SW_SHOW)

While 1
        $TabCurSel = _GUICtrlTab_GetCurSel($Tab1)
        $BarText = _GUICtrlStatusBar_GetText($StatusBar1, 0)
        If $TabCurSel = 0 And $BarText <> "请选择要安装的软件" Then
                _GUICtrlStatusBar_SetText($StatusBar1, "请选择要安装的软件", 0)
        ElseIf $TabCurSel = 1 And $BarText <> "12345678" Then 
                _GUICtrlStatusBar_SetText($StatusBar1, "12345678",0)
        ElseIf $TabCurSel = 2 And $BarText <> "3333333" Then 
                _GUICtrlStatusBar_SetText($StatusBar1, "3333333",0)        
        EndIf
        
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd
如上代码,慢速切换好象没有问题,快速切换时autoit马上出错。编译成可执行程序后也同样出错 。
如将31行、32行的“12345678”缩短成7个字符则没有问题。发现:当重新设置状态栏文本半角字符超过7个,全解
字符超过3个,在快速切换标签页时程序就出错。
不知是否是GuiStatusBar.au3存在BUG?还是其他什么原因?各位有兴趣的帮忙看一下。
PS:我的系统XPSP2,AUTOIT程序版本:3.3.5.6 第一汉化版(2010-03-04)

评分

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

查看全部评分

 楼主| 发表于 2010-4-16 22:14:32 | 显示全部楼层
算是解决了吧。今看到TAB控件的一个帮助示例,才知道要实现当在TAB的3 个标签页间切换时,状态栏显示不同文本的代码很简单。唉,原来我怎么会想到那么复杂的思路呢?现贴出 代码如下,与新手共勉:
#NoTrayIcon
#include <GuiTab.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>

$Form1_1 = GUICreate("Form1", 570, 449, 230, 133)
$Tab1 = GUICtrlCreateTab(6, 6, 558, 410)
_GUICtrlTab_SetItemSize($Tab1, 70, 22)
GUICtrlSetFont(-1, 10)

$TabSheet1 = GUICtrlCreateTabItem("安装软件")
$TabSheet2 = GUICtrlCreateTabItem("U盘管理")
$TabSheet3 = GUICtrlCreateTabItem("系统工具")
GUICtrlCreateTabItem("") ;关闭标签项目

$StatusBar1 = _GUICtrlStatusBar_Create($Form1_1)
Dim $StatusBar1_PartsWidth[3] = [300, 445, -1]
_GUICtrlStatusBar_SetParts($StatusBar1, $StatusBar1_PartsWidth)
_GUICtrlStatusBar_SetText($StatusBar1, "请选择要安装的软件", 0)
_GUICtrlStatusBar_SetText($StatusBar1, "        " & @YEAR & "年" & @MON & "月" & @MDAY & "日", 1)
_GUICtrlStatusBar_SetText($StatusBar1, "        BY SHQF", 2)
_GUICtrlStatusBar_SetMinHeight($StatusBar1, 25)

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Tab1
                        If GUICtrlRead($Tab1) = 0 Then _GUICtrlStatusBar_SetText($StatusBar1, "请选择要安装的软件", 0)
                        If GUICtrlRead($Tab1) = 1 Then _GUICtrlStatusBar_SetText($StatusBar1, "1234567789", 0)
                        If GUICtrlRead($Tab1) = 2 Then _GUICtrlStatusBar_SetText($StatusBar1, "876544412rsf", 0)
        EndSwitch
WEnd
发表于 2010-4-17 09:16:23 | 显示全部楼层
很好!!!
谢谢分享
发表于 2010-4-17 10:32:36 | 显示全部楼层
呵呵,学习一下。。
发表于 2010-4-17 10:49:22 | 显示全部楼层
可是切换时出错的原因是什么呢?一直困扰中.......
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 15:39 , Processed in 0.082426 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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