我在Delphi XE2中製作了一個簡單的應用程序,它專門使用了「碳」風格。有一個有成千上萬行的大型字符串網格。我有一個循環遍歷這個網格記錄的過程,做了一些工作,並對網格進行了一些更改。當過程循環時,當前正在處理的行會突出顯示(通過設置TStringGrid.Row
)。在Delphi中使用樣式的字符串網格XE2 - 滾動條不更新
問題是,當我將樣式應用到此網格時,滾動條不會隨着行更改而更改位置。當循環處理時,循環會正確地突出顯示每一行,但當它到達列表的末尾時,右側的滾動條仍然位於頂部。
如何讓網格的滾動條隨之一起移動?
這裏是我如何循環的一個示例:當我不使用任何樣式
procedure TForm1.Button1Click(Sender: TObject);
var
X: Integer;
begin
FStop:= False;
for X:= 1 to Grid.RowCount - 1 do begin
if FStop then Break; //Ability to stop loop
Grid.Row:= X; //Highlight current row
DoSomeLenghyWork;
ChangeSomethingOnGrid;
Application.ProcessMessages; //Keep program responding
end;
end;
一切工作就好了。
這聽起來像是對我的錯誤。 「無效」是強制執行繪製循環的方法。我想我會傾向於在後臺執行處理,並使用虛擬控件(例如虛擬模式下的列表視圖)來更新UI。在計時器上更新用戶界面,例如每一秒。 – 2012-02-11 20:15:49
我正在將其轉換爲處理線程中的每個項目,並且正在爲各種事件添加消息。我可以有一個'MSG_BEGIN','MSG_END','MSG_NEXT','MSG_ERROR'等。 – 2012-02-11 20:26:14
你應該有一個線程來完成這項工作,然後在主線程中運行一個定時器來獲取UI更新。使用虛擬列表視圖來顯示。用鎖同步化可能就足夠了。 – 2012-02-11 20:27:39