Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting VCL窗体应用程序中的延迟代码执行_Sorting_C++builder - Fatal编程技术网

Sorting VCL窗体应用程序中的延迟代码执行

Sorting VCL窗体应用程序中的延迟代码执行,sorting,c++builder,Sorting,C++builder,需要动画排序算法,与源代码逐行可视化 简介: 开头有一个表单(请参见附图)。在该表单的顶部显示一个由编辑组件组成的日常创建的数组,其中包含要排序的数组。 在稍下方的右侧,放置了一个包含算法的Memo组件。在该算法的每一行的左侧,都会放置一个标签,指示算法中的行号 我们的想法是通过给标签上色来突出这条线,此时执行在哪里。单击“开始”按钮时开始排序。其行动如下: int n = 10; bool swapped = true; hl(1); int j = 0; hl(2); int tmp; hl

需要动画排序算法,与源代码逐行可视化

简介:

开头有一个表单(请参见附图)。在该表单的顶部显示一个由编辑组件组成的日常创建的数组,其中包含要排序的数组。 在稍下方的右侧,放置了一个包含算法的Memo组件。在该算法的每一行的左侧,都会放置一个标签,指示算法中的行号

我们的想法是通过给标签上色来突出这条线,此时执行在哪里。单击“开始”按钮时开始排序。其行动如下:

int n = 10;
bool swapped = true; hl(1);
int j = 0; hl(2);
int tmp; hl(3);
while (swapped) { hl(4);
    swapped = false; hl(5);
    j++; hl(6);
    for (int i = 0; i < n - j; i++) { hl(7);
          if (arr[i] > arr[i + 1]) { hl(8);
                tmp = arr[i]; hl(9);
                arr[i] = arr[i + 1]; hl(10);
                arr[i + 1] = tmp; hl(11);
                swapped = true; hl(12);
          } hl(13);
    }  hl(14);
}  hl(15);
int n=10;
bool swapped=true;hl(1);
int j=0;hl(2);
int tmp;hl(3);
而(交换){hl(4);
交换=假;hl(5);
j++;hl(6);
对于(inti=0;iarr[i+1]){hl(8);
tmp=arr[i];hl(9);
arr[i]=arr[i+1];hl(10);
arr[i+1]=tmp;hl(11);
交换=真;hl(12);
}hl(13);
}hl(14);
}hl(15);
hl函数必须使用Sleep()函数为标签上色并暂停执行

void TForm2::hl(int l)
{
对于(int i=0;i<24;i++){
Form2->lines[i]->Font->Color=clGray;
}
Form2->lines[l-1]->Font->Color=clRed;
睡眠(300);
}
问题:

代码执行暂停(sleep函数正常工作),但当事件结束时,标签仍然是灰色的,除了最后一个标签外,没有可见的更改。第15行是红色的

问题:

谁能告诉我,我哪里错了,怎么做才对


您需要允许处理绘制消息,以便直观地更新显示。您可以通过
刷新
更新
过程来完成:

Form2->Lines[l-1]->Font->Color = clGray;
Form2->Update();            // or Form2->Refresh();
Update()
通常更适合使用,因为它仅在实际存在等待处理的绘制消息时才处理挂起的绘制消息<另一方面,代码>刷新(),即使没有任何更改,也会强制进行完全重新绘制。
Form2->Lines[l-1]->Font->Color = clGray;
Form2->Update();            // or Form2->Refresh();