怎么利用ini?(100分)

  • 主题发起人 主题发起人 悟空1
  • 开始时间 开始时间
要利用.INI文件做程序有关数据的存储工作,就需要能读和写.INI文件,
所以用的是调用windows API,方法如下:
从.INI文件中获取字符串
var
strResult:pchar;
begin
GetPrivateProfileString(
'windows', // []中标题的名字
'NullPort', // =号前的名字
'NIL', // 如果没有找到字符串时,返回的默认值
strResult, //存放取得字符
100, //取得字符的允许最大长度
'c:/forwin95/win.ini' // 调用的文件名
);
edit1.text:=strResult; //显示取得字符串
从.INI文件中获取整数
edit1.text:=inttostr(GetPrivateProfileInt(
'intl', // []中标题的名字
'iCountry', // =号前的名字
0,// 如果没有找到整数时,返回的默认值
'c:/forwin95/win.ini' // 调用的文件名
));

向.INI文件写入字符串
WritePrivateProfileString(
'windows', // []中标题的名字
'load', // 要写入“=”号前的字符串
'accca', //要写入的数据
'c:/forwin95/win.ini' // 调用的文件名
);

向.INI文件写入整数
WritePrivateProfileSection(
'windows', // []中标题的名字
'read=100', // 要写入的数据
'c:/forwin95/win.ini' // 调用的文件名
);


3)读写ini文件用delphi的TiniFile类,下面是一个例子:
AppIni: TIniFile;//申明一个对象
begin
AppIni := TIniFile.Create('sys.ini');
AppIni.ReadSections(ListBox1.Items);
AppIni.ReadSection('Ports',Listbox2.Items);
AppIni.ReadSectionValues('Ports',ListBox3.Items);
AppIni.Free;
end
这是delphi自带的例子。
类型转换函数有:
StrToInt,IntToStr,FloatToStr,StrToFloat,DateToStr,DateTimeToStr,
TimeToStr,StrToDate,StrToTime,StrToDateTime

var t : tcolor;
r,g,b : byte;
begin
r := getRvalue(t); //getRvalue是windows API
g := getGvalue(t);
B := getBvalue(t);

Color = RGB(r,g,b) //RGB是windows API中定义的一个宏


 
字体的其它属性如上面各位所说的,我这里要说的是在INI文件中保存/读取Font.Style,
以下两个函数是我自已想出来的,如有雷同,纯属意外,仅供参考!以下程序代码经过我多次
使用,效果良好!
INI文件格式如下:
[SETUP]
FONTSTYLE=[fsBold]
...

代码:
function TMainForm.GetFontStyle(sStyle: string): TFontStyles;
{获得字体样式
sStyle : 字体字符串形式
返回 : 字体格式
}
var
MyFS : TFontStyles;
begin
MyFS := [];
if pos('fsBold', sStyle) > 0 then MyFS := MyFS + [fsBold];
if Pos('fsItalic', sStyle) > 0 then MyFS := MyFS + [fsItalic];
if Pos('fsUnderline', sStyle) > 0 then
MyFS := MyFS + [fsUnderline];
if Pos('fsStrikeOut', sStyle) > 0 then
MyFS := MyFS + [fsStrikeOut];
Result := MyFS;
end;

function TMainForm.SetFontStyle(FS: TFontStyles): string;
{获得字体样式的字符串形式
FS : 字体格式
返回 : 字体字符串形式
}
var
Mystyle : string;
begin
Mystyle := '[';
if fsBold in FS then MyStyle := MyStyle + 'fsBold';
if fsItalic in FS then
if MyStyle = '[' then
MyStyle := MyStyle + 'fsItalic'
else
MyStyle := MyStyle + ',fsItalic';
if fsUnderline in FS then
if MyStyle = '[' then
MyStyle := MyStyle + 'fsUnderline'
else
MyStyle := MyStyle + ',fsUnderline';
if fsStrikeOut in FS then
if MyStyle = '[' then
MyStyle := MyStyle + 'fsStrikeOut'
else
MyStyle := MyStyle + ',fsStrikeOut';
MyStyle := MyStyle + ']';
Result := MyStyle;
end;

使用:
<读>
var
sFontStyle : string;
MyFontStyle : TFontStyles;
MyIni : TIniFile;
begin
MyIni := TIniFile.Create('XX.ini');
with MyIni do
begin
sFontStyle := ReadString('SETUP', 'FONTSTYLE', '[]');
MyFontStyle := GetFontStyle(sFontStyle); //得到字体样式
...
Free;
end;
end;

<写>
var
sFontStyle : string;
MyFontStyle : TFontStyles;
MyIni : TIniFile;
begin
MyIni := TIniFile.Create('XX.ini');
with MyIni do
begin
MyFontStyle := 控件.Font.Style;
sFontStyle := SetFontStyle(MyFontStyle);
WriteString('SETUP', 'FONTSTYLE', sFontStyle);
...
Free;
end;
end;
 
对了,要是启动的有很多的XXX。font要取得字体,怎么办?会不会
很麻烦?
 
一个一个的写,不要怕麻烦.
 
接受答案了.
 
后退
顶部