【发布时间】:2016-09-15 04:06:59
【问题描述】:
我正在使用 TMemIniFile 来存储配置,我需要按 alpha 顺序对部分进行排序。
为此,我创建了 TMemIniFile 的后代
TRWStudioMemIniFile = class(TMemIniFile)
public
procedure UpdateFile; override;
procedure GetSortedStrings(List: TStrings);
end;
{ TRWStudioMemIniFile }
procedure TRWStudioMemIniFile.GetSortedStrings(List: TStrings);
var
I, J: Integer;
Strings: TStrings;
begin
List.BeginUpdate;
try
Sections.Sort;
for I := 0 to Sections.Count - 1 do
begin
List.Add('[' + Sections[I] + ']');
Strings := TStrings(Sections.Objects[I]);
for J := 0 to Strings.Count - 1 do List.Add(Strings[J]);
List.Add('');
end;
finally
List.EndUpdate;
end;
end;
procedure TRWStudioMemIniFile.UpdateFile;
var
List: TStringList;
begin
List := TStringList.Create;
try
GetSortedStrings(List);
List.SaveToFile(FileName, Encoding);
finally
List.Free;
end;
end;
但它需要访问Sections(实际上是FSections:TStringList,即TMemIniFile的私有成员)
我创建了一个 Helper 类来通过属性公开该成员。但是,Delphi 10.1 不再支持此行为
我开始将 TMemIniFile 复制/粘贴到我的单元,经过无休止的过程,我最终制作了整个 System.IniFile 的副本,只是为了访问 FSections。
我的问题是如何访问该 FSections 成员,而无需复制该单元的所有内容来获得可见性
或者是否有另一种方法可以在保存之前对部分进行排序? (我只是从 FSections 调用 TStringList.Sort)
【问题讨论】:
-
如何创建一个
TMemIniFile的新实例并按照您想要的顺序将各个部分一一添加? -
顺序在 ini 文件中并不重要。为什么你需要这样做。
-
顺序在 ini 文件中通常并不重要,但有时它可能很重要:为了可读性、文档,或者只是为了保持排序以满足客户的需求。它是一种文本格式是有原因的 - 可供人类阅读/编辑。
-
如果你想走这条路,可以在
RTTI的帮助下得到私人成员FSections的地址。 -
@DavidHeffernan 因为我的老板要求这样做,还需要什么?
标签: oop delphi delphi-10.1-berlin