我有一個名爲HistoryText的屬性存儲爲一個字符串的對象。 我想顯示網格中的所有行。我應該可以刪除和編輯網格中的行。 格式爲:帶分隔符作爲字符串的字符串?
16.5.2003-$-12:09-$-anna-$-Organization created
2.6.2005-$-13:03-$-jimmy-$-Organization edited
19.12.2005-$-13:33-$-madeleine-$-Organization edited
所以每行有4個字段,日期,時間,用戶和消息的分隔字符串爲「 - $ - 」。 作爲字符串的分隔符而不是char,它不能被分配給stringlists分隔符屬性。
我有一個例行的字符串中提取到的StringList:
procedure ParseDelimited(const aStringList: TStringList; const aOrgList, aDelimiter: string);
var
vDelimiterPos : integer;
vPartialStr : string;
vRemaingTxt : string;
vDelimiterLength : integer;
begin
vDelimiterLength := Length(aDelimiter);
if (AnsiRightStr(aOrgList, Length(aDelimiter)) = aDelimiter) then
vRemaingTxt := aOrgList
else
vRemaingTxt := aOrgList + aDelimiter;
aStringList.BeginUpdate;
aStringList.Clear;
try
while Length(vRemaingTxt) > 0 do
begin
vDelimiterPos := Pos(aDelimiter, vRemaingTxt);
vPartialStr := Copy(vRemaingTxt,0,vDelimiterPos-1);
aStringList.Add(vPartialStr);
vRemaingTxt := Copy(vRemaingTxt,vDelimiterPos+vDelimiterLength,MaxInt);
end;
finally
aStringList.EndUpdate;
end;
end;
,似乎很好地工作。我的問題是將StringList中的更改同步到原始的String屬性中?有這麼多的歷史數據,所以我不認爲改變TChar是一個現實的選擇。
更新: 澄清。我想我可以設法使用上面的方法將字符串轉換爲StringList。然後在網格中顯示它不應該那麼辛苦。當我想將TStringList轉換回原來的String屬性wih' - $ - '作爲分隔符時,問題就出現了。例如,我無法執行HistoryText:= myStringList.Delimitedtext。
第二次更新: 我已經解決了它。你們都得到了+1的快速答案,真的很想幫忙。總之我是如何做到的。
讀自Historytext:
MyStringList.Text := Historytext;
現在每排有3個分隔符「 - $ - 」每行由一個換行符照常分離。
- 在循環中解析Stringlist並將其顯示在網格中。我不再擔心MyStringList。
- 讓用戶刪除並編輯網格中的行。
- 當按網格中的行和列循環完成並構建與原始格式相同的新字符串時。
- 將該字符串指定給HistoryText。
所以從StringList的焦點轉移到電網可以更容易:)
你真正的問題是什麼?你提到想要在網格中顯示,並且stringlist過程似乎「正常工作」。 「同步變更」也有點寬泛。你需要什麼? – Tobiasopdenbrouw 2010-07-21 09:54:41
Se我的更新:) – 2010-07-21 10:50:02
我的解決方案在D2007 +中都可以工作 - 而且要短得多。 – 2010-07-21 11:02:00