主要的问题是如何通过combobox的取值来返回ini文件的小节变量!ini文件
[language]
ivar=2
[frmCount]
wCount=3
[frm1]
total=3
frmCaption=测试窗口1
label1=TestName1^测试测试按钮标题1^ALT+D ^255 ^8 ^测试提示1^参考1
label2=TestName2^测试测试按钮标题2^ALT+D ^255 ^8 ^测试提示2^参考2
label3=TestName3^测试测试按钮标题3^ALT+D ^255 ^8 ^测试提示3^参考3
[frm2]
total=3
frmCaption=测试窗口2
label1=TestName1^测试测试按钮标题1^ALT+D ^255 ^8 ^测试提示1^参考1
label2=TestName2^测试测试按钮标题2^ALT+D ^255 ^8 ^测试提示2^参考2
label3=TestName3^测试测试按钮标题3^ALT+D ^255 ^8 ^测试提示3^参考3
[frm3]
total=3
frmCaption=测试窗口3
label1=TestName1^测试测试按钮标题1^ALT+D ^255 ^8 ^测试提示1^参考1
label2=TestName2^测试测试按钮标题2^ALT+D ^255 ^8 ^测试提示2^参考2
label3=TestName3^测试测试按钮标题3^ALT+D ^255 ^8 ^测试提示3^参考3源代码
unit Language;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Menus, DB, DBClient, Grids, DBGrids, IniFiles,
StdCtrls;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
File1: TMenuItem;
Exit1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
SaveAs1: TMenuItem;
Save1: TMenuItem;
Close1: TMenuItem;
Open1: TMenuItem;
New1: TMenuItem;
ClientDataSet1Field: TStringField;
ClientDataSet1Field2: TStringField;
ClientDataSet1Field3: TStringField;
ClientDataSet1Field4: TStringField;
ClientDataSet1Field5: TStringField;
ClientDataSet1Field6: TStringField;
ClientDataSet1Field7: TStringField;
ClientDataSet1Field8: TStringField;
Label1: TLabel;
ComboBox1: TComboBox;
DBGrid1: TDBGrid;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
IniFile:TIniFile;
ivar,i,j,total,wCount:Integer;
slabel:string;
implementation{$R *.dfm}
function SplitStr(var AStr: string; ASplitChar: Char = ';'): string;//截取字符串
var
sF: string;
begin
sF := '';
if AStr <> '' then
if Pos(ASplitChar, AStr) > 0 then
begin
sF := Copy(AStr, 1, Pos(ASplitChar, AStr) - 1);
AStr := Copy(AStr, Pos(ASplitChar, AStr) + 1, MaxInt);
end
else
begin
sF := AStr;
AStr := '';
end;
Result := sF;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.CreateDataSet;
ClientDataSet1.Open;
end;procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;procedure TForm1.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
IniFile:=TIniFile.Create(OpenDialog1.FileName);
ivar:= IniFile.ReadInteger('language','ivar',0);
if ivar = 0 then
begin
Label2.Caption:= '窗口语言:英语';
end;
if ivar = 1 then
begin
Label2.Caption:= '窗口语言:繁体';
end;
if ivar = 2 then
begin
Label2.Caption:= '窗口语言:简体';
end;
wCount:=IniFile.ReadInteger('frmCount','wCount',1);
Label3.Caption:= '窗口数量:' + IntToStr(wCount);
for i := 1 to wCount do
begin
total:=IniFile.ReadInteger('frm'+IntToStr(i),'total',1);
Combobox1.Text:=IniFile.ReadString('frm'+IntToStr(1),'frmCaption','');
Combobox1.Items.Add(IniFile.ReadString('frm'+IntToStr(i),'frmCaption','')) ;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
i:=2 ; //如何根据Combobox的值来判断小节
begin
for j := 1 to total do
begin
slabel:=IniFile.ReadString('frm'+IntToStr(i),'label'+IntToStr(j),'');
ClientDataSet1.Append;
ClientDataSet1.FieldByName('窗口名称').AsString:=IniFile.ReadString('frm'+IntToStr(i),'frmCaption','');
ClientDataSet1.FieldByName('程序名称').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('标题语言').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('快捷键').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('颜色').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('字体大小').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('提示说明').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('备注').AsString:=SplitStr(slabel,'^');
ClientDataSet1.Post;
end;
end;
end;end.
我每次都会给分的!大家可以看看我以前的发问贴!
[language]
ivar=2
[frmCount]
wCount=3
[frm1]
total=3
frmCaption=测试窗口1
label1=TestName1^测试测试按钮标题1^ALT+D ^255 ^8 ^测试提示1^参考1
label2=TestName2^测试测试按钮标题2^ALT+D ^255 ^8 ^测试提示2^参考2
label3=TestName3^测试测试按钮标题3^ALT+D ^255 ^8 ^测试提示3^参考3
[frm2]
total=3
frmCaption=测试窗口2
label1=TestName1^测试测试按钮标题1^ALT+D ^255 ^8 ^测试提示1^参考1
label2=TestName2^测试测试按钮标题2^ALT+D ^255 ^8 ^测试提示2^参考2
label3=TestName3^测试测试按钮标题3^ALT+D ^255 ^8 ^测试提示3^参考3
[frm3]
total=3
frmCaption=测试窗口3
label1=TestName1^测试测试按钮标题1^ALT+D ^255 ^8 ^测试提示1^参考1
label2=TestName2^测试测试按钮标题2^ALT+D ^255 ^8 ^测试提示2^参考2
label3=TestName3^测试测试按钮标题3^ALT+D ^255 ^8 ^测试提示3^参考3源代码
unit Language;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Menus, DB, DBClient, Grids, DBGrids, IniFiles,
StdCtrls;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
File1: TMenuItem;
Exit1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
SaveAs1: TMenuItem;
Save1: TMenuItem;
Close1: TMenuItem;
Open1: TMenuItem;
New1: TMenuItem;
ClientDataSet1Field: TStringField;
ClientDataSet1Field2: TStringField;
ClientDataSet1Field3: TStringField;
ClientDataSet1Field4: TStringField;
ClientDataSet1Field5: TStringField;
ClientDataSet1Field6: TStringField;
ClientDataSet1Field7: TStringField;
ClientDataSet1Field8: TStringField;
Label1: TLabel;
ComboBox1: TComboBox;
DBGrid1: TDBGrid;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
IniFile:TIniFile;
ivar,i,j,total,wCount:Integer;
slabel:string;
implementation{$R *.dfm}
function SplitStr(var AStr: string; ASplitChar: Char = ';'): string;//截取字符串
var
sF: string;
begin
sF := '';
if AStr <> '' then
if Pos(ASplitChar, AStr) > 0 then
begin
sF := Copy(AStr, 1, Pos(ASplitChar, AStr) - 1);
AStr := Copy(AStr, Pos(ASplitChar, AStr) + 1, MaxInt);
end
else
begin
sF := AStr;
AStr := '';
end;
Result := sF;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.CreateDataSet;
ClientDataSet1.Open;
end;procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;procedure TForm1.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
IniFile:=TIniFile.Create(OpenDialog1.FileName);
ivar:= IniFile.ReadInteger('language','ivar',0);
if ivar = 0 then
begin
Label2.Caption:= '窗口语言:英语';
end;
if ivar = 1 then
begin
Label2.Caption:= '窗口语言:繁体';
end;
if ivar = 2 then
begin
Label2.Caption:= '窗口语言:简体';
end;
wCount:=IniFile.ReadInteger('frmCount','wCount',1);
Label3.Caption:= '窗口数量:' + IntToStr(wCount);
for i := 1 to wCount do
begin
total:=IniFile.ReadInteger('frm'+IntToStr(i),'total',1);
Combobox1.Text:=IniFile.ReadString('frm'+IntToStr(1),'frmCaption','');
Combobox1.Items.Add(IniFile.ReadString('frm'+IntToStr(i),'frmCaption','')) ;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
i:=2 ; //如何根据Combobox的值来判断小节
begin
for j := 1 to total do
begin
slabel:=IniFile.ReadString('frm'+IntToStr(i),'label'+IntToStr(j),'');
ClientDataSet1.Append;
ClientDataSet1.FieldByName('窗口名称').AsString:=IniFile.ReadString('frm'+IntToStr(i),'frmCaption','');
ClientDataSet1.FieldByName('程序名称').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('标题语言').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('快捷键').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('颜色').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('字体大小').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('提示说明').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('备注').AsString:=SplitStr(slabel,'^');
ClientDataSet1.Post;
end;
end;
end;end.
我每次都会给分的!大家可以看看我以前的发问贴!
i:= 2 ; //如何根据Combobox的值来判断小节
这句是错的!i的值应该根据combobox的值来反映!例如下面
Combobox1.Text:=测试窗口1则i=1
Combobox1.Text:=测试窗口2则i=2
Combobox1.Text:=测试窗口3则i=3
这么好的string解析为什么不用呢!?SplitStr自己写的用的不爽!
procedure TForm1.Button1Click(Sender: TObject);
var
indexName:String;
begin
indexName:=combobox1.Text; //如何根据Combobox的值来判断小节
begin
for j := 1 to total do
begin
slabel:=IniFile.ReadString(indexName,'label'+IntToStr(j),'');
ClientDataSet1.Append;
ClientDataSet1.FieldByName('窗口名称').AsString:=IniFile.ReadString(indexName,'frmCaption','');
ClientDataSet1.FieldByName('程序名称').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('标题语言').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('快捷键').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('颜色').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('字体大小').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('提示说明').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('备注').AsString:=SplitStr(slabel,'^');
ClientDataSet1.Post;
end;
end;
end;估计是我理解错了!这是你要的答案么!?
Combobox1.Text:=IniFile.ReadString('frm'+IntToStr(1),'frmCaption','');
Combobox1.Items.Add(IniFile.ReadString('frm'+IntToStr(i),'frmCaption',''))
var
ini: TIniFile;
Sections: TStringList;
i: Integer;
S: string;
begin
Ini := TIniFile.Create('D:\1.ini');
Sections := TStringList.Create;
try
ini.ReadSections(Sections); //加载所有的Section
for i := 0 to Sections.Count - 1 do
begin
Result := Sections[i];
S := ini.ReadString(Result, 'frmCaption', ''); //取得当前循环对应的frmCaption值
if CompareText(frmCap, S) = 0 then
Exit;
end;
finally
Sections.Free;
ini.Free;
end;
Result := '';
end;
测试代码:procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetSectionByfrmCaption(ComboBox1.Text));
end;
就是知道Combobox1.Text的值反过来找i,记住Combobox1.Text是某个关键字的值!
unit Language;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Menus, DB, DBClient, Grids, DBGrids, IniFiles,
StdCtrls;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
File1: TMenuItem;
Exit1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
SaveAs1: TMenuItem;
Save1: TMenuItem;
Close1: TMenuItem;
Open1: TMenuItem;
New1: TMenuItem;
ClientDataSet1Field: TStringField;
ClientDataSet1Field2: TStringField;
ClientDataSet1Field3: TStringField;
ClientDataSet1Field4: TStringField;
ClientDataSet1Field5: TStringField;
ClientDataSet1Field6: TStringField;
ClientDataSet1Field7: TStringField;
ClientDataSet1Field8: TStringField;
Label1: TLabel;
ComboBox1: TComboBox;
DBGrid1: TDBGrid;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
IniFile:TIniFile;
ivar,total,wCount:Integer;
slabel:string;
implementation{$R *.dfm}
function SplitStr(var AStr: string; ASplitChar: Char = ';'): string;//截取字符串
var
sF: string;
begin
sF := '';
if AStr <> '' then
if Pos(ASplitChar, AStr) > 0 then
begin
sF := Copy(AStr, 1, Pos(ASplitChar, AStr) - 1);
AStr := Copy(AStr, Pos(ASplitChar, AStr) + 1, MaxInt);
end
else
begin
sF := AStr;
AStr := '';
end;
Result := sF;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.CreateDataSet;
ClientDataSet1.Open;
end;procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;procedure TForm1.Open1Click(Sender: TObject);
var
i: Integer;
begin
if OpenDialog1.Execute then
begin
IniFile:=TIniFile.Create(OpenDialog1.FileName);
ivar:= IniFile.ReadInteger('language','ivar',0);
if ivar = 0 then
begin
Label2.Caption:= '窗口语言:英语';
end;
if ivar = 1 then
begin
Label2.Caption:= '窗口语言:繁体';
end;
if ivar = 2 then
begin
Label2.Caption:= '窗口语言:简体';
end;
wCount:=IniFile.ReadInteger('frmCount','wCount',1);
Label3.Caption:= '窗口数量:' + IntToStr(wCount);
for i := 1 to wCount do
begin
total:=IniFile.ReadInteger('frm'+IntToStr(i),'total',1);
Combobox1.Text:=IniFile.ReadString('frm'+IntToStr(1),'frmCaption','');
Combobox1.Items.Add(IniFile.ReadString('frm'+IntToStr(i),'frmCaption','')) ;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j,p:Integer;
boxtext:string;
begin
for p := 1 to wCount do
begin
boxtext:=IniFile.ReadString('frm'+IntToStr(p),'frmCaption','');
if boxtext=Combobox1.Text then
begin
i:=p;
end;
end; //如何根据Combobox的值来判断小节
begin
for j := 1 to total do
begin
slabel:=IniFile.ReadString('frm'+IntToStr(i),'label'+IntToStr(j),'');
ClientDataSet1.Append;
ClientDataSet1.FieldByName('窗口名称').AsString:=IniFile.ReadString('frm'+IntToStr(i),'frmCaption','');
ClientDataSet1.FieldByName('程序名称').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('标题语言').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('快捷键').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('颜色').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('字体大小').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('提示说明').AsString:=SplitStr(slabel,'^');
ClientDataSet1.FieldByName('备注').AsString:=SplitStr(slabel,'^');
ClientDataSet1.Post;
end;
end;
end;end.