我正在创建一个我的学生计划器的虚拟版本,它基本上可以让你记下你的主题作业。
这是界面:
用户从组合框中选择主题并在相邻备忘录中键入一些注释。完成后,他们将点击“保存”按钮,将其保存到.ini文件中。选定的日期将成为部分名称,主题将成为标识符,备忘录中的文本将成为每个标识符的值。
注意:有7个可能的科目。
我的问题是在选择日期时加载组合框和备忘录,因为每个日期的标识符总是不同的。
例如:
2月16日用户输入(界面):
英语 - 阅读小说第127页 数学 - 完成第6章。
2月16日,它将在.ini文件中显示如下:
[16/02/12]
英语=阅读小说第127页 数学=完成第6章。
2月20日,用户输入(界面):
SOSE - 阅读课本。
法律研究 - 填写在线调查。
2月20日,它将在.ini文件中显示如下:
[20/02/12]
SOSE =阅读课本。
法律研究=填写在线调查。
现在您看到用户是否选择了2月16日来查看他们的任务,因为每个标识符都不同,所以无法加载。
.ini文件有更好的替代方案吗?我怎样才能实现这个目标?
答案 0 :(得分:10)
您可以使用TIniFile.ReadSections
获取各个日期,并使用TIniFile.ReadSection
获取该部分中的各个项目。这是一个简单的例子:
// Sample ini file
[16/02/12]
English=Read up to page 127 of novel.
Maths=Complete chapter 6.
[20/02/12]
SOSE=Read textbook.
Legal Studies=Fill in online survey.
代码:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IniFiles;
type
TForm2 = class(TForm)
ListBox1: TListBox;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
FIni: TMemIniFile;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
const
IniName = 'd:\Temp\SampleNotes.ini';
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FIni.Free;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
FIni := TMemIniFile.Create(IniName);
Memo1.Lines.Clear;
FIni.ReadSections(ListBox1.Items);
end;
procedure TForm2.ListBox1Click(Sender: TObject);
var
Section: string;
begin
if ListBox1.ItemIndex > -1 then
begin
Section := ListBox1.Items[ListBox1.ItemIndex];
FIni.ReadSection(Section, Memo1.Lines);
end;
end;
end.
以上产生了这个:
答案 1 :(得分:8)
使用TIniFile
没有问题。该类有一个方法ReadSections()
,您可以用它来阅读所有带作业的日子,以及一个方法ReadSection()
来读取给定日期的所有条目。
您还可以使用ReadSectionValues()
来读取完整的行(主题和任务),然后您需要在第一个= char处拆分。