我有一个名为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