0
需要使用源代碼逐行顯示來爲排序算法設置動畫。在VCL Forms應用程序中執行延遲代碼
INTRO:
對於開始時,有一個表格(看到它在附圖)。在該窗體的頂部顯示一個由Dinamicaly創建的編輯組件陣列,其中包含要排序的數組。 稍低一點,在右側放置一個Memo組件,其中包含算法。在該算法的每一行的左邊,dinamicaly被放置一個標籤,表示算法中的行號。
這個想法是通過着色該標籤來突出顯示行,此刻執行的是哪裏。點擊「開始」按鈕後開始排序。它的作用是以下幾點:
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);
的HL功能必須彩色標籤,並通過使用睡眠暫停執行()函數
void TForm2::hl(int l)
{
for (int i = 0; i < 24; i++) {
Form2->lines[i]->Font->Color = clGray;
}
Form2->lines[l-1]->Font->Color = clRed;
Sleep(300);
}
問題:
代碼執行暫停(睡眠功能正常工作),但標籤仍爲灰色,沒有明顯的變化,除最後一個事件外飾面。第十五行是紅色的。
問題:
可有人告訴我,在這裏我錯了,怎麼做是正確的?
http://i.stack.imgur.com/crGyC.jpg
非常感謝。我不知道這個,現在它正在工作! –
'Update()'通常更好用,因爲它只在實際上有待處理的繪製消息時才處理掛起的繪製消息。另一方面,刷新()會強制完全重新繪製,即使沒有任何變化。 –