/// <summary> /// 加载宏 /// </summary> /// <param name="macro">宏信息</param> private void LoadMacro(Macro macro) { TextBoxA txtMacroName = GetTextBox("txtMacroName"); TextBoxA txtMacroDescription = GetTextBox("txtMacroDescription"); TextBoxA txtMacroScript = GetTextBox("txtMacroScript"); SpinA spinInterval = GetSpin("spinInterval"); SpinA spinCD = GetSpin("spinCD"); ButtonA btnDelete = GetButton("btnDelete"); ButtonA btnApply = GetButton("btnApply"); ButtonA btnCreate = GetButton("btnCreate"); ButtonA btnSave = GetButton("btnSave"); ComboBoxA cbType = GetComboBox("cbType"); m_divIcon.BackImage = macro.m_icon; txtMacroName.Text = macro.m_name; txtMacroDescription.Text = macro.m_description; txtMacroScript.Text = macro.m_script; spinInterval.Value = macro.m_interval; spinCD.Value = macro.m_cd; cbType.SelectedIndex = macro.m_type; bool btnEnabled = (macro.m_macroID != null && macro.m_macroID.Length > 0); btnDelete.Enabled = btnEnabled; btnSave.Enabled = btnEnabled; }
/// <summary> /// 获取K线静态数值 /// </summary> /// <param name="div">K线层</param> private void SetCandleStaticValue(SandBoxCandleDiv div) { SecurityData data = div.Data; SpinA spinOpen = GetSpin("txtOpen"); SpinA spinClose = GetSpin("txtClose"); SpinA spinHigh = GetSpin("txtHigh"); SpinA spinLow = GetSpin("txtLow"); SpinA spinVolume = GetSpin("txtVolume"); SpinA spinAmount = GetSpin("txtAmount"); LabelA lblDate = GetLabel("lblDate"); data.m_open = (float)spinOpen.Value; data.m_close = (float)spinClose.Value; data.m_high = (float)spinHigh.Value; data.m_low = (float)spinLow.Value; data.m_volume = spinVolume.Value; data.m_amount = spinAmount.Value; String strDate = lblDate.Text; if (strDate != null && strDate.Length > 0) { data.m_date = m_chart.Chart.ConvertDateToNum(Convert.ToDateTime(strDate)); } div.Data = data; }
/// <summary> /// 加载代理信息 /// </summary> private void LoadProxyInfo() { ComboBoxA cbProxyType = GetComboBox("cbProxyType"); TextBoxA txtProxyIP = GetTextBox("txtProxyIP"); SpinA spinProxyPort = GetSpin("spinProxyPort"); TextBoxA txtProxyUserName = GetTextBox("txtProxyUserName"); TextBoxA txtProxyUserPwd = GetTextBox("txtProxyUserPwd"); TextBoxA txtProxyDomain = GetTextBox("txtProxyDomain"); List <ProxyInfo> proxyInfos = new List <ProxyInfo>(); m_proxyService.GetProxyInfos(proxyInfos); int proxyInfosSize = proxyInfos.Count; for (int i = 0; i < proxyInfosSize; i++) { ProxyInfo proxyInfo = proxyInfos[i]; if (cbProxyType.SelectedIndex == proxyInfo.m_type) { txtProxyIP.Enabled = (proxyInfo.m_type == 1 || proxyInfo.m_type == 2); spinProxyPort.Enabled = (proxyInfo.m_type == 1 || proxyInfo.m_type == 2); txtProxyUserName.Enabled = (proxyInfo.m_type == 1 || proxyInfo.m_type == 2 || proxyInfo.m_type == 3); txtProxyUserPwd.Enabled = (proxyInfo.m_type == 1 || proxyInfo.m_type == 2 || proxyInfo.m_type == 3); txtProxyDomain.Enabled = proxyInfo.m_type == 2; txtProxyIP.Text = proxyInfo.m_ip; spinProxyPort.Value = proxyInfo.m_port; txtProxyUserName.Text = proxyInfo.m_name; txtProxyUserPwd.Text = proxyInfo.m_pwd; txtProxyDomain.Text = proxyInfo.m_domain; break; } } m_window.Invalidate(); proxyInfos.Clear(); }
/// <summary> /// 保存配置 /// </summary> private void SaveData() { List <ConnectInfo> connectInfos = new List <ConnectInfo>(); m_connectServer.GetConnects(connectInfos); int connectInfosSize = connectInfos.Count; for (int i = 0; i < connectInfosSize; i++) { ConnectInfo connectInfo = connectInfos[i]; String type = connectInfo.m_type; if (type == "主服务器") { connectInfo.m_ip = m_cbMainServerIP.Text; connectInfo.m_port = CStr.ConvertStrToInt(m_txtMainServerPort.Text); } m_connectServer.UpdateConnect(connectInfo); } connectInfos.Clear(); //保存代理信息 ComboBoxA cbProxyType = GetComboBox("cbProxyType"); TextBoxA txtProxyIP = GetTextBox("txtProxyIP"); SpinA spinProxyPort = GetSpin("spinProxyPort"); TextBoxA txtProxyUserName = GetTextBox("txtProxyUserName"); TextBoxA txtProxyUserPwd = GetTextBox("txtProxyUserPwd"); TextBoxA txtProxyDomain = GetTextBox("txtProxyDomain"); ProxyInfo proxyInfo = new ProxyInfo(); proxyInfo.m_domain = txtProxyDomain.Text; proxyInfo.m_ip = txtProxyIP.Text; proxyInfo.m_port = (int)spinProxyPort.Value; proxyInfo.m_name = txtProxyUserName.Text; proxyInfo.m_pwd = txtProxyUserPwd.Text; proxyInfo.m_type = cbProxyType.SelectedIndex; proxyInfo.m_use = true; List <ProxyInfo> proxyInfos = new List <ProxyInfo>(); m_proxyService.GetProxyInfos(proxyInfos); int proxyInfosSize = proxyInfos.Count; for (int i = 0; i < proxyInfosSize; i++) { ProxyInfo pInfo = proxyInfos[i]; if (cbProxyType.SelectedIndex == pInfo.m_type) { m_proxyService.UpdateConnect(proxyInfo); } else { pInfo.m_use = false; m_proxyService.UpdateConnect(pInfo); } } }
/// <summary> /// 数值输入变化方法 /// </summary> /// <param name="spinA">数值控件</param> public void OnSpinTextChanged(SpinA spin) { int divsSize = m_divs.Count; for (int i = 0; i < divsSize; i++) { SandBoxCandleDiv div = m_divs[i]; if (!div.Moving) { SecurityData data = div.Data; String name = spin.Name; double value = spin.Value; if (name == "txtOpen") { data.m_open = (float)value; } else if (name == "txtClose") { data.m_close = (float)value; } else if (name == "txtHigh") { data.m_high = (float)value; } else if (name == "txtLow") { data.m_low = (float)value; } else if (name == "txtVolume") { data.m_volume = value; } else if (name == "txtAmount") { data.m_amount = value; } div.Data = data; m_native.Invalidate(); break; } } }
/// <summary> /// 获取参数 /// </summary> private void GetParameters() { if (m_indicator != null) { m_window.Text = "参数设置(" + m_indicator.Name + ")"; IndicatorData indicatorData = m_indicator.Tag as IndicatorData; String[] strs = indicatorData.m_parameters.Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); int strsSize = strs.Length; //依此创建控件 int addHeight = 0; for (int i = 0; i < strsSize; i++) { String str = strs[i]; String[] strs2 = str.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries); String name = strs2[0]; String value = strs2[3]; //创建标签 LabelA label = new LabelA(); POINT location = new POINT(50, addHeight + 40); label.Location = location; label.Text = name; m_window.AddControl(label); //创建数值控件 SpinA spin = new SpinA(); location.x = 130; location.y = addHeight + 40; spin.Location = location; spin.Maximum = 10000000; spin.Value = CStrA.ConvertStrToDouble(value); m_window.AddControl(spin); addHeight += 30; } m_window.Height += addHeight; //调整按钮的位置 ButtonA cancelButton = GetButton("btnCancel"); ButtonA submitButton = GetButton("btnSubmit"); cancelButton.Top += addHeight; submitButton.Top += addHeight; } }
/// <summary> /// 注册事件 /// </summary> /// <param name="control">控件</param> private void RegisterEvents(ControlA control) { ControlMouseEvent clickButtonEvent = new ControlMouseEvent(ClickButton); ControlEvent spinInputChangedEvent = new ControlEvent(SpinTextChanged); List <ControlA> controls = control.GetControls(); int controlsSize = controls.Count; for (int i = 0; i < controlsSize; i++) { ButtonA button = controls[i] as ButtonA; if (button != null) { button.RegisterEvent(clickButtonEvent, EVENTID.CLICK); } SpinA spin = controls[i] as SpinA; if (spin != null) { spin.RegisterEvent(spinInputChangedEvent, EVENTID.TEXTCHANGED); } RegisterEvents(controls[i]); } }
/// <summary> /// 把指定日期K线的高开低收数据设置到画面的数值控件上 /// </summary> /// <param name="date">日期</param> private void SetSpinValue(double date) { ChartA chart = m_chart.Chart; CTable dataSource = chart.DataSource; int rowsCount = dataSource.RowsCount; if (rowsCount > 0) { int index = dataSource.GetRowIndex(date); if (index < 1) { index = rowsCount - 1; } SpinA spinOpen = GetSpin("txtOpen"); SpinA spinClose = GetSpin("txtClose"); SpinA spinHigh = GetSpin("txtHigh"); SpinA spinLow = GetSpin("txtLow"); SpinA spinVolume = GetSpin("txtVolume"); SpinA spinAmount = GetSpin("txtAmount"); LabelA lblDate = GetLabel("lblDate"); spinOpen.Value = dataSource.Get2(index, KeyFields.OPEN_INDEX); spinClose.Value = dataSource.Get2(index, KeyFields.CLOSE_INDEX); spinHigh.Value = dataSource.Get2(index, KeyFields.HIGH_INDEX); spinLow.Value = dataSource.Get2(index, KeyFields.LOW_INDEX); spinVolume.Value = dataSource.Get2(index, KeyFields.VOL_INDEX); spinAmount.Value = dataSource.Get2(index, KeyFields.AMOUNT_INDEX); DateTime dateTime = m_chart.Chart.ConvertNumToDate(date); int m_cycle = m_chart.Cycle; if (m_cycle <= 60) { lblDate.Text = dateTime.ToString("yyyy-MM-dd HH:mm:ss"); } else { lblDate.Text = dateTime.ToString("yyyy-MM-dd"); } m_window.Invalidate(); } }
/// <summary> /// 获取宏信息 /// </summary> /// <param name="macro">宏信息</param> public void GetMacro(ref Macro macro) { TextBoxA txtMacroName = GetTextBox("txtMacroName"); TextBoxA txtMacroDescription = GetTextBox("txtMacroDescription"); TextBoxA txtMacroScript = GetTextBox("txtMacroScript"); SpinA spinInterval = GetSpin("spinInterval"); SpinA spinCD = GetSpin("spinCD"); if (m_macro.m_macroID != null && m_macro.m_macroID.Length > 0) { macro.m_macroID = m_macro.m_macroID; } ComboBoxA cbType = GetComboBox("cbType"); macro.m_type = cbType.SelectedIndex; macro.m_name = txtMacroName.Text; macro.m_description = txtMacroDescription.Text; macro.m_script = txtMacroScript.Text; macro.m_interval = (int)spinInterval.Value; macro.m_cd = (int)spinCD.Value; macro.m_icon = m_divIcon.BackImage; macro.m_userID = DataCenter.UserID; }
/// <summary> /// 文本框输入值变化 /// </summary> /// <param name="sender">控件</param> private void SpinTextChanged(object sender) { SpinA spin = sender as SpinA; OnSpinTextChanged(spin); }
/// <summary> /// 创建内部控件 /// </summary> /// <param name="parent">父控件</param> /// <param name="clsid">控件标识</param> /// <returns>内部控件</returns> public override ControlA CreateInternalControl(ControlA parent, String clsid) { //日历控件 CalendarA calendar = parent as CalendarA; if (calendar != null) { if (clsid == "datetitle") { return(new DateTitle(calendar)); } else if (clsid == "headdiv") { HeadDiv headDiv = new HeadDiv(calendar); headDiv.Width = parent.Width; headDiv.Dock = DockStyleA.Top; return(headDiv); } else if (clsid == "lastbutton") { return(new ArrowButton(calendar)); } else if (clsid == "nextbutton") { ArrowButton nextBtn = new ArrowButton(calendar); nextBtn.ToLast = false; return(nextBtn); } } //分割层 SplitLayoutDivA splitLayoutDiv = parent as SplitLayoutDivA; if (splitLayoutDiv != null) { if (clsid == "splitter") { ButtonA splitter = new ButtonA(); splitter.BackColor = CDraw.PCOLORS_BACKCOLOR; splitter.Size = new SIZE(5, 5); return(splitter); } } //滚动条 ScrollBarA scrollBar = parent as ScrollBarA; if (scrollBar != null) { scrollBar.BackColor = COLOR.EMPTY; if (clsid == "addbutton") { RibbonButton addButton = new RibbonButton(); addButton.Size = new SIZE(15, 15); if (scrollBar is HScrollBarA) { addButton.ArrowType = 2; } else if (scrollBar is VScrollBarA) { addButton.ArrowType = 4; } return(addButton); } else if (clsid == "backbutton") { ButtonA backButton = new ButtonA(); return(backButton); } else if (clsid == "scrollbutton") { ButtonA scrollButton = new ButtonA(); scrollButton.AllowDrag = true; scrollButton.BackColor = CDraw.PCOLORS_BACKCOLOR; scrollButton.BorderColor = CDraw.PCOLORS_LINECOLOR3; return(scrollButton); } else if (clsid == "reducebutton") { RibbonButton reduceButton = new RibbonButton(); reduceButton.Size = new SIZE(15, 15); if (scrollBar is HScrollBarA) { reduceButton.ArrowType = 1; } else if (scrollBar is VScrollBarA) { reduceButton.ArrowType = 3; } return(reduceButton); } } //页夹 TabPageA tabPage = parent as TabPageA; if (tabPage != null) { if (clsid == "headerbutton") { RibbonButton button = new RibbonButton(); button.AllowDrag = true; SIZE size = new SIZE(100, 20); button.Size = size; return(button); } } //下拉列表 ComboBoxA comboBox = parent as ComboBoxA; if (comboBox != null) { if (clsid == "dropdownbutton") { RibbonButton dropDownButton = new RibbonButton(); dropDownButton.ArrowType = 4; dropDownButton.DisplayOffset = false; int width = comboBox.Width; int height = comboBox.Height; POINT location = new POINT(width - 20, 0); dropDownButton.Location = location; SIZE size = new SIZE(20, height); dropDownButton.Size = size; return(dropDownButton); } else if (clsid == "dropdownmenu") { ComboBoxMenu comboBoxMenu = new ComboBoxMenu(); comboBoxMenu.ComboBox = comboBox; comboBoxMenu.Popup = true; SIZE size = new SIZE(100, 200); comboBoxMenu.Size = size; return(comboBoxMenu); } } //日期选择 DatePickerA datePicker = parent as DatePickerA; if (datePicker != null) { if (clsid == "dropdownbutton") { RibbonButton dropDownButton = new RibbonButton(); dropDownButton.ArrowType = 4; dropDownButton.DisplayOffset = false; int width = datePicker.Width; int height = datePicker.Height; POINT location = new POINT(width - 16, 0); dropDownButton.Location = location; SIZE size = new SIZE(16, height); dropDownButton.Size = size; return(dropDownButton); } else if (clsid == "dropdownmenu") { MenuA dropDownMenu = new MenuA(); dropDownMenu.Padding = new PADDING(1); dropDownMenu.Popup = true; SIZE size = new SIZE(200, 200); dropDownMenu.Size = size; return(dropDownMenu); } } //数字选择 SpinA spin = parent as SpinA; if (spin != null) { if (clsid == "downbutton") { RibbonButton downButton = new RibbonButton(); downButton.ArrowType = 4; downButton.DisplayOffset = false; SIZE size = new SIZE(16, 16); downButton.Size = size; return(downButton); } else if (clsid == "upbutton") { RibbonButton upButton = new RibbonButton(); upButton.ArrowType = 3; upButton.DisplayOffset = false; SIZE size = new SIZE(16, 16); upButton.Size = size; return(upButton); } } //容器层 DivA div = parent as DivA; if (div != null) { if (clsid == "hscrollbar") { HScrollBarA hScrollBar = new HScrollBarA(); hScrollBar.Visible = false; hScrollBar.Size = new SIZE(15, 15); return(hScrollBar); } else if (clsid == "vscrollbar") { VScrollBarA vScrollBar = new VScrollBarA(); vScrollBar.Visible = false; vScrollBar.Size = new SIZE(15, 15); return(vScrollBar); } } //表格 GridA grid = parent as GridA; if (grid != null) { if (clsid == "edittextbox") { TextBoxA textBox = new TextBoxA(); textBox.BackColor = CDraw.PCOLORS_BACKCOLOR; return(textBox); } } return(null); }
/// <summary> /// 设置参数 /// </summary> private void SetParameters() { List <ControlA> controls = m_window.GetControls(); List <LabelA> labels = new List <LabelA>(); List <SpinA> spins = new List <SpinA>(); int controlsSize = controls.Count; for (int i = 0; i < controlsSize; i++) { ControlA control = controls[i]; LabelA label = control as LabelA; SpinA spin = control as SpinA; if (label != null) { labels.Add(label); } else if (spin != null) { spins.Add(spin); } } int labelsSize = labels.Count; String newParameters = ""; for (int i = 0; i < labelsSize; i++) { newParameters += labels[i].Text + ",0,0," + spins[i].Value.ToString(); newParameters += ";"; } labels.Clear(); spins.Clear(); m_indicator.Clear(); m_indicator.SetSourceField(KeyFields.CLOSE, KeyFields.CLOSE_INDEX); m_indicator.SetSourceField(KeyFields.HIGH, KeyFields.HIGH_INDEX); m_indicator.SetSourceField(KeyFields.LOW, KeyFields.LOW_INDEX); m_indicator.SetSourceField(KeyFields.OPEN, KeyFields.OPEN_INDEX); m_indicator.SetSourceField(KeyFields.VOL, KeyFields.VOL_INDEX); m_indicator.SetSourceField(KeyFields.AMOUNT, KeyFields.AMOUNT_INDEX); m_indicator.SetSourceField(KeyFields.CLOSE.Substring(0, 1), KeyFields.CLOSE_INDEX); m_indicator.SetSourceField(KeyFields.HIGH.Substring(0, 1), KeyFields.HIGH_INDEX); m_indicator.SetSourceField(KeyFields.LOW.Substring(0, 1), KeyFields.LOW_INDEX); m_indicator.SetSourceField(KeyFields.OPEN.Substring(0, 1), KeyFields.OPEN_INDEX); m_indicator.SetSourceField(KeyFields.VOL.Substring(0, 1), KeyFields.VOL_INDEX); m_indicator.SetSourceField(KeyFields.AMOUNT.Substring(0, 1), KeyFields.AMOUNT_INDEX); IndicatorData indicatorData = m_indicator.Tag as IndicatorData; indicatorData.m_parameters = newParameters; String constValue = ""; if (newParameters != null && newParameters.Length > 0) { String[] strs = newParameters.Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); int strsSize = strs.Length; for (int i = 0; i < strsSize; i++) { String str = strs[i]; String[] strs2 = str.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries); constValue += "const " + strs2[0] + ":" + strs2[3] + ";"; } } m_indicator.Script = constValue + indicatorData.m_script; m_indicator.OnCalculate(0); if (m_indicator.AttachVScale == AttachVScale.Left) { //m_indicator.Div.TitleBar.Text = m_indicator.Title; } m_chart.Chart.Update(); m_chart.Chart.Invalidate(); }
/// <summary> /// 数值输入变化方法 /// </summary> /// <param name="spinA">数值控件</param> public void OnSpinTextChanged(SpinA spin) { SetParameters(); }