发表回复 
问题·未解决 Guicontrol 快速且连续的更新text文本框内容时会闪烁,怎么解决?
2017-05-07, 12 : 57 (这个帖子最后修改于: 2017-05-07 13 : 47 by Modifier.)
Question Guicontrol 快速且连续的更新text文本框内容时会闪烁,怎么解决?
@feiyue
Guicontrol 快速且连续的更新text文本框内容时会闪烁,怎么解决?
定时器设置的是 50

“Gdip代码用来滚动.txt” 是一段在网上找的非常长的代码段,用来滚动的制造桌面特殊[/align]效果用的。上传到附件了

代码如下:
代码: (全选)
gosub, MAIN
CustomColor = cLime
Gui +LastFound +ToolWindow -Caption
WinSet, Transparent, 249
WinSet, ExStyle, ^0x20
Gui, Color, %CustomColor%
Gui, font, s10 cRed q1 w600, verdana
Gui, Add, Text, x0 y0 w1000 r%line_text% vMyText, ...........

Gui, font, s20
Gui, Add, text, x10 y500 r4 vMySystemLogin cGreen, System reboot...`nAnalyzing...
WinSet, transcolor, %CustomColor% 255

SetTimer, UpdateOSD, %time%
SetTimer, UpdataOSD_2, %time_2%
Gui, Show, w1000 h570 NoActivate, Black Window
goto, UpdateOSD
return

GuiClose:
ExitApp
return

MAIN:
FileRead, codes, Gdip代码用来滚动.txt
;我ahk8新手,不知道暂时没有找到传文件的按钮,先贴一段网上搜罗的codes请大佬帮忙测试解决闪烁的问题了。
;time for updating the data
line_text := 30
time := 50
time_2 := 500
ChangingTitle1 := "."
ChangingTitle2 := ".."
ChangingTitle3 := "..."
strLength := strlen(codes)
str_length := 0
m := 1
Return

UpdateOSD:
if(i>=strLength){
    ; reset all and start over
    i:=0
    j:=0
    str_length:=0
}
;i is a var
i+=1
StringLeft, strOutput, codes, %i%



strLines := StrSplit(strOutput, "`n", "`r")
;j is a var
lines := strLines.length()

if(lines>=line_text&&lines!=lines_temp){
    j++
    
    str_length_temp := StrLen(strLines[j])
    str_length := str_length + str_length_temp + 2


}
StringTrimLeft, strOutput, strOutput, %str_length%
lines_temp := lines
GuiControl,, MyText, %strOutput%
return

UpdataOSD_2:
ChangingTitleOUT := "System online `nAnalyzing" ChangingTitle%m%
GuiControl,, MySystemLogin, %ChangingTitleOUT%
if(m<3){
    m++
}
else{
    m=1
}
Return


附件
.txt  Gdip代码用来滚动.txt (大小: 5.28 KB / 下载: 2)
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-05-07, 15 : 53 (这个帖子最后修改于: 2017-05-07 15 : 54 by Modifier.)
Wink RE: Guicontrol 快速且连续的更新text文本框内容时会闪烁,怎么解决?
我改进了一下代码,虽然还是会闪烁,但是已经不明显了。
不过究竟为什么会闪烁呢?处理器速度跟不上还是ahk的代码优化不够?求解答
代码: (全选)
gosub, MAIN
CustomColor = Black
Gui +LastFound +ToolWindow -Caption
WinSet, Transparent, 249
WinSet, ExStyle, ^0x20
WinSet, AlwaysOnTop, on
Gui, Color, %CustomColor%
Gui, font, s10 cRed q1 w600, verdana
line_text_1 := line_text - 1
Gui, Add, Text, x0 y0 w970 r%line_text_1% Border vMyText, ...........

Gui, Add, Text, x0 w970 r1 Border vMyText_2, test
Gui, font, s20
Gui, Add, text, x10 y500 r4 vMySystemLogin cGreen, System reboot...`nAnalyzing...
;WinSet, transcolor, %CustomColor% 255

SetTimer, UpdateOSD, %time%
SetTimer, UpdataOSD_2, %time_2%
Gui, Show, w970 h570 NoActivate, Black Window
goto, UpdateOSD
return

GuiClose:
ExitApp
return

MAIN:
FileRead, codes, Gdip代码用来滚动.txt
;time for updating the data
line_text := 30
time := 50
time_2 := 500
ChangingTitle1 := "."
ChangingTitle2 := ".."
ChangingTitle3 := "..."
strLength := strlen(codes)
str_length := 0
m := 1
Return

UpdateOSD:
if(i>=strLength){
    ; reset all and start over
    i:=0
    j:=0
    str_length:=0
}
;i is a var
i+=1
StringLeft, strOutput, codes, %i%



strLines := StrSplit(strOutput, "`n", "`r")
;j is a var
lines := strLines.length()


str_length_2 := StrLen(strLines[lines])
;to avoid the "if" changes the strOutput
strInput := strOutput

if(lines!=lines_temp){
    if(lines>=line_text){
        j++
        
        str_length_temp := StrLen(strLines[j])
        str_length := str_length + str_length_temp + 2
        StringTrimLeft, strOutput, strOutput, %str_length%
    }
    StringTrimRight, strOutput, strOutput, %str_length_2%
    GuiControl,, MyText, %strOutput%
    

}


StringRight, strOutput, strInput, %str_length_2%
GuiControl,, MyText_2, %strOutput%


lines_temp := lines
return

UpdataOSD_2:
ChangingTitleOUT := "System online `nAnalyzing" ChangingTitle%m%
GuiControl,, MySystemLogin, %ChangingTitleOUT%
if(m<3){
    m++
}
else{
    m=1
}
Return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合