文章 "图形界面 IX: 进度条和线形图表控件 (第二章)" - 页 3

 

Anatol,你能告诉我是否可以动态更改进度条中的进程描述吗?

假设我们有一些符号名称 数组。我们在这个数组中循环并获取字符名。然后程序处理每个符号,从中获取数据。整个循环由一个进度条显示,但我希望显示每个符号的处理过程。因此,在进程名称上标注 "处理 CMG",然后在处理下一个进程时,再写上另一个进程名 称:"处理 EQIX",等等。

事先不知道数组中会有哪些符号,因此不可能准备一堆进度条,而且不同符号的名称超过 一千个也不是最佳选择....。

 
Artyom Trishkin:

Anatol,你能告诉我是否可以动态更改进度条中的进程描述吗?

假设我们有一些符号名称 数组。我们在这个数组中循环并获取字符名。然后程序处理每个符号,从中获取数据。整个循环由一个进度条显示,但我希望显示每个符号的处理过程。因此,在进程名称上写上 "处理 CMG",然后在处理下一个进程时,再写上另一个进程名称:"处理 EQIX",等等。

您事先并不知道数组中可能有哪些符号,也就是说,您无法准备一堆进度条,而且对于超过 1000 个不同符号的名称....,这也不是最佳选择。

现在还没有这种方法。在下一次更新中,我将为每个有文字说明的元素添加这一功能。也就是说,可以在创建项目后更改文本。
 
Anatoli Kazharski:
现在还没有这种方法。在下一次更新中,我将为每个有文字说明的元素添加这一功能。也就是说,可以在创建项目后更改文本。

谢谢,非常期待;)

问题:在您的示例中,有这样一段代码用于创建进度条:

//+------------------------------------------------------------------+
//| 创建进度条|
//+------------------------------------------------------------------+
bool CProgram::CreateProgressBar(const int x_gap,const int y_gap)
  {
//--- 保存指向表单的指针
   m_progress_bar.WindowPointer(m_window);
//--- 坐标
   int x=m_window.X()+x_gap;
   int y=m_window.Y()+y_gap;
//--- 创建前设置属性
   m_progress_bar.YSize(15);
   m_progress_bar.BarYSize(11);
   m_progress_bar.BarXOffset(65);
   m_progress_bar.BarYOffset(2);
   m_progress_bar.BarBorderWidth(1);
   m_progress_bar.LabelText("Processing:");
   m_progress_bar.AreaColor(C'225,225,225');
   m_progress_bar.BarAreaColor(clrWhiteSmoke);
   m_progress_bar.BarBorderColor(clrWhiteSmoke);
   m_progress_bar.IsDropdown(true);
   m_progress_bar.AutoXResizeMode(true);
   m_progress_bar.AutoXResizeRightOffset(230);
//--- 创建一个元素
   if(!m_progress_bar.CreateProgressBar(m_chart_id,m_subwin,x,y))
      return(false);
//--- 隐藏元素
   m_progress_bar.Hide();
//--- 添加指向基本元素的指针
   CWndContainer::AddToElementsArray(0,m_progress_bar);
   return(true);
  }
//+------------------------------------------------------------------+

下拉元素的符号是什么?

m_progress_bar.IsDropdown(true);

???

 
Artyom Trishkin:

问题:在您的示例中,有这样一段代码用于构建进度条:

下拉元素特质的目的是什么?

???

为了避免在表单展开时显示进度条,而此时进度条是不可见的。
 
Anatoli Kazharski:
为了避免在表单展开时显示进度条,而此时进度条不应该可见。
这是否适用于可以使用您的程序库创建的任何对象?
 
Artyom Trishkin:
这是否适用于可以使用您的库构建的任何对象?
是的。IsDropdown() 方法位于CElement 基类中,适用于所有图形用户界面 元素。
 

动态更改进度条属性不起作用。

例如,我想更改颜色:

   void              IndicatorColor(const color clr)    { m_indicator_color=clr;           }

零响应。显然,在 Update 方法中,除了更改索引和总值外,还必须指定其他 m_indicator_color 等。否则,这些方法除了在创建过程中应用外,在其他任何地方都不会应用。或者,这就是它的原意?

 
Alexander Fedosov:

...否则,这些方法除了在创造时适用外,在其他地方都不适用。或者这就是它的初衷?

是的,这是一个临时版本。很快(在接下来的几篇文章中),所有控件都将进行大规模更新,您可以在运行时 更改任何属性。
 
Anatoli Kazharski:
是的,这是一个临时版本。很快(在接下来的几篇文章中),所有控件都将进行大规模更新,您可以在运行时 更改任何属性。

太激动人心了。与此同时,我找到了一个临时解决方案:

//+------------------------------------------------------------------+
//| 更新进度条|
//+------------------------------------------------------------------+
void CProgressBar::Update(const int index,const int total)
  {
//--- 设置新索引
   CurrentIndex(index);
//--- 设置新范围
   StepsTotal(total);
//-- 计算指标的宽度
   double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize();
//--- 如果小于 1,则进行调整
   if((int)new_width<1)
      new_width=1;
   else
     {
      //--- 调整框架宽度
      int x_size=m_bar_bg.XSize()-(m_bar_border_width*2);
      //--- 如果出界则更正
      if((int)new_width>=x_size)
         new_width=x_size;
     }
//--- 为指示器设置新的宽度
   m_indicator.X_Size((int)new_width);
//-- 计算百分比并形成字符串
   double percent =m_current_index/m_steps_total*100;
   string desc    =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%";
//--- 设置新值
   m_percent.Description(desc);
   
   m_indicator.BackColor(m_indicator_color);
   m_indicator.Color(m_indicator_color);
  }
 
172218684:
你们都到这个黄金实战喊单群 172218684    172218684 ,必将继续狂赚利润,单子在这里喊 验证--- 实力无价 

骗子