你没有使用有效的 .ini
格式,所以这不会很容易。如果你使用一个格式正确的 .ini
文件,那么就会简单得多。
一个有效的 ini
文件的格式如下:
[section]
akey=value
bkey=value
ckey=value
下面是从ini文件中读取多行的示例代码。虽然它使用了一个TListBox而不是TEdit,但应该足以让您开始。
下面的代码也可以处理格式不正确的文件,但您可能需要更改ListBox1Click事件中的代码,使用ReadSectionValues来手动解析每个项目并在显示之前进行一些操作;在这种情况下,请在事件处理程序中创建另一个TStringList并传递它,而不是Memo1.Lines。
对于格式正确的ini文件,您可以使用TIniFile.ReadSection或TMemIniFile.ReadSections将所有部分加载到TStrings派生类中,然后使用ReadSection(SectionName)获取每个部分的值。
以下是一个示例-请将此ini文件保存在某个地方(我已经使用了d:\temp\sample.ini:)。
[A Section]
Item1=Item A1
Item2=Item A2
Item3=Item A3
Item4=Item A4
[B Section]
Item1=Item B1
Item2=Item B2
Item3=Item B3
Item4=Item B4
[C Section]
Item1=Item C1
Item2=Item C2
Item3=Item C3
Item4=Item C4
这里是表单代码的示例:
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
FIni: TMemIniFile;
public
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
const
IniName = 'd:\Temp\Sample.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.
在ListBox
中点击每个部分名称会显示该部分中的项目,如下所示:
![Application Screen Capture](https://istack.dev59.com/ajI1Q.webp)
编辑:好吧。我很好奇你在问题中发布的ini文件内容是如何工作的。
所以我做了以下更改:
- 将您的示例ini内容逐字复制并粘贴为新部分,添加到上面创建的
Sample.ini
文件的末尾。
运行代码,然后单击新的richardmarx
项。这是我得到的结果:
![Sample image 2](https://istack.dev59.com/Zdgyq.webp)
显然,那不起作用。所以我进行了以下额外更改:
- 将
ListBox1Click
事件更改为使用FIni.ReadSectionValues
而不是ReadSection
。
- 运行修改后的应用程序,单击
C Section
项以查看其显示方式,然后单击新的richardmarx
项以查看其显示方式。结果如下:
![Image with C Section selected](https://istack.dev59.com/r5kzB.webp)
![Image with richardmarx selected](https://istack.dev59.com/Gy3Ms.webp)