(已解决)为什么编辑框的数字会狂闪?
本帖最后由 fisher 于 2011-10-11 11:36 编辑用AU3做了个期货的外挂,对当日权益监控。
这是收盘后截图,框内数字跳的还比较均匀,可盘中数字会狂闪,如第一个是-3.11%,盘中会从0,-2.1%等等一堆数字狂闪,最后定格在-3.11%。
这个数字的原始来源数据(图2),盘中会变,是有节拍的变化,不会狂闪。
这是为什么?是代码有问题? 本帖最后由 fisher 于 2011-10-10 16:28 编辑
代码
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiButton.au3>
#include <GuiMenu.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("WH3", 350, 40, 0, 0)
;$Form1 = GUICreate("WH3", 350, 40, 0, 0,$WS_POPUP)
WinSetOnTop("WH3", "", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore")
$Button1 = GUICtrlCreateButton("平", 190, 8, 50, 30)
GUICtrlSetFont(-1, 33, 400, 0, "MS Sans Serif")
$Button2 = GUICtrlCreateButton("清", 240, 8, 50, 30)
GUICtrlSetFont(-1, 33, 400, 0, "MS Sans Serif")
$Button3 = GUICtrlCreateButton("退", 290, 8, 50, 30)
GUICtrlSetFont(-1, 33, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
AdlibRegister('show', 5000);每5秒监控一次资金
;Opt("GUIOnEventMode", 1)
While 1
;Sleep(1000)
;show()
$msg = GUIGetMsg()
Select
Case $msg = $Button1
Button1Click()
Case $msg = $Button2
Button2Click()
Case $msg = $Button3
Button3Click()
ExitLoop
EndSelect
WEnd
Func show()
$Edit1 = GUICtrlCreateEdit("", 8, 8, 85, 30, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
.............
$dryk = (Int($dqqy) - Int($sxf) / 2 - Int($qcqy)) * 100 / $qszj ;当日盈亏率
GUICtrlSetData(-1, Round($dryk, 2) & '%') ;显示当日总盈亏率,以起始资金计
;MsgBox(0, "窗口内容", $var)
If ($dryk < -4) Then
MsgBox(0, "警告", $dryk)
EndIf
$Edit2 = GUICtrlCreateEdit("", 100, 8, 85, 30, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
$fd = (Int($fdyk) - 4 * 50) * 100 / $qszj
Sleep(1000)
GUICtrlSetData(-1, Round($fd, 2) & '%') ;显示浮动盈亏率
EndFunc ;==>show 三个按钮控件,盘后调试的时候,一点击就有反应,盘中则不灵。
这是什么原因? 代码不全无法测试运行并改进又不可能帮你重新写个 所以等高人解决吧 光有代码不够,还得有相应期货软件,还得盘中。
实际就几行相关代码可能有问题:
AdlibRegister('show', 5000);每5秒监控一次资金***除Adlib还有别的调用函数吗?
GUICtrlSetData(-1, Round($dryk, 2) & '%') ;显示当日总盈亏率,以起始资金计***这句有问题吗? AdlibRegister('show', 5000);每5秒监控一次资金
;Opt("GUIOnEventMode", 1)
While 1
;Sleep(1000)
;show()
$msg = GUIGetMsg()
Select
Case $msg = $Button1
Button1Click()
Case $msg = $Button2
Button2Click()
Case $msg = $Button3
Button3Click()
ExitLoop
EndSelect
WEnd
是不是因为AdlibRegister('show', 5000) ,才造成按钮控件不灵?
又要隔段时间调用数据,又要按钮反应灵,有什么好办法? 每5秒创建2个EDIT? 每5秒创建2个EDIT?
3mile 发表于 2011-10-10 17:04 http://www.autoitx.com/images/common/back.gif
本意是要两个显示框,一个显示当日盈亏,一个显示当前盈亏
$Edit1 = GUICtrlCreateEdit("", 8, 8, 85, 30, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
$Edit12.。。。。。。。。。。。。。
这两个应该放在show的外面,是这个原因造成的?
放在show的外面,貌似不闪了。明天盘中再看看
多谢
按钮的问题? show有问题
有个sleep 每5秒创建2个EDIT?
3mile 发表于 2011-10-10 17:04 http://www.autoitx.com/images/common/back.gif
多谢提醒
把EDIT移到外面,数字跳动正常。
按钮也正常了 为什么要用;Opt("GUIOnEventMode", 1)
还要用GUIGetMsg()呢?
请参考消息模式和循环模式 为什么要用;Opt("GUIOnEventMode", 1)
还要用GUIGetMsg()呢?
请参考消息模式和循环模式
yeqing880 发表于 2011-10-11 12:51 http://www.autoitx.com/images/common/back.gif
没用Opt("GUIOnEventMode", 1),这个被注释掉了。
实际上就两部分:
1、监控资金状况:每3-5秒读取一次数据。时间间隔太短,怕CPU受不了;超过5秒,又怕行情变化大时跟不上。
2、根据行情做相应操作。
这个大框架应该怎么建立? 我写这个实时获取股票数据也是狂闪,同求解,谢谢#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Stock000 = GUICreate("Stock000", 1024, 450, 100, 100)
GUISetState(@SW_SHOW)
AdlibRegister("nowtime", 500)
create_gg()
While 1
Sleep(1)
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func create_gg()
GUISetFont(11)
create_t()
create_f()
AdlibRegister("create_t", 5000)
AdlibRegister("create_f", 1000 * 10)
EndFunc ;==>create_gg
Func create_t()
If WinActive($Stock000) Then
$a = StringReplace(StringRegExpReplace(BinaryToString(InetRead("http://hq.sinajs.cn/list=sh600115", 1)), 'var hq_str_.+="', ''), '"', '')
;指数------------------------------------------------------------
$zs1 = StringReplace(StringRegExpReplace(BinaryToString(InetRead("http://hq.sinajs.cn/list=sh000001,sz399001", 1)), 'var hq_str_.+="', ''), '"', '')
$all = StringSplit($zs1, ';,', 0)
$stock_n = ($all - 1) / 32
Dim $zs[$stock_n]
For $i = 0 To $stock_n - 1
For $j = 0 To 31
$zs[$i][$j] = $all[$j + 1 + $i * 32]
$zs[$i] = ($zs[$i] - $zs[$i]) / $zs[$i]
Next
Next
;指数------------------------------------------------------------
$b = StringSplit($a, ';,', 0)
$l1 = GUICtrlCreateLabel('时间:' & $b & ' ' & $b, 10, 15, 200)
$l2 = GUICtrlCreateLabel('上证指数:' & $zs & '涨跌:' & Round(($zs - $zs), 2) & ' / ' & Round((($zs - $zs) / $zs) * 100, 1) & '%' & Round($zs / 100000000, 2) & ' 亿', 10, 40, 380)
$l3 = GUICtrlCreateLabel('深证指数:' & $zs & ' 涨跌:' & Round(($zs - $zs), 2) & ' / ' & Round((($zs - $zs) / $zs) * 100, 1) & '%' & Round($zs / 100000000, 2) & ' 亿', 10, 60, 380)
$l4 = GUICtrlCreateLabel($b & ' ' & $b & ' / ' & Round((($b - $b) / $b) * 100, 1) & '% (' & $b & ' ~ ' & $b & ')成交:' & Round($b / 100000000, 2) & ' 亿', 10, 100, 390)
GUICtrlSetFont($l4, 11, 800, 4)
$l5 = GUICtrlCreateLabel('卖 5(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 120 + 20, 350)
$l6 = GUICtrlCreateLabel('卖 4(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 140 + 20, 350)
$l7 = GUICtrlCreateLabel('卖 3(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 160 + 20, 350)
$l8 = GUICtrlCreateLabel('卖 2(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 180 + 20, 350)
$l9 = GUICtrlCreateLabel('卖 1(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 200 + 20, 350)
$l10 = GUICtrlCreateLabel('买 1(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 240 + 20, 350)
$l11 = GUICtrlCreateLabel('买 2(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 260 + 20, 350)
$l12 = GUICtrlCreateLabel('买 3(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 280 + 20, 350)
$l13 = GUICtrlCreateLabel('买 4(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 300 + 20, 350)
$l14 = GUICtrlCreateLabel('买 5(元/手) ' & $b & ' ' & Round($b / 100, 0), 60, 320 + 20, 350)
EndIf
EndFunc ;==>create_t
Func create_f()
$IE = ObjCreate("Shell.Explorer.2")
GUICtrlCreateObj($IE, 420, 90, 570, 350)
_IENavigate($IE, "http://image.sinajs.cn/newchart/min/n/sh600115.gif")
EndFunc ;==>create_f
Func nowtime()
$TL = @HOUR & ":" & @MIN & ":" & @SEC
WinSetTitle($Stock000, "", $TL)
EndFunc ;==>nowtime 另问下楼主是如何从期货软件获取信息的啊? 同花顺看行情,自编指标报警
页:
[1]
2