![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить/считать значение TMemuItem? [D2005, XP]
Stepper © (2008-02-27 06:11:00)При закрытии/открытии приложения! К примеру в ini-файле!
Stepper (2008-02-27 09:29:00) [1]Вместо N1.Checked я использую N1.AutoCheck и всеравно тот же результат!
В ini пишет не зависимо от AutoCheck следующее
[Menu]
AutoSave=1
Что по незнанию я не правильно пишу?
Stepper (2008-02-27 09:13:00) [2]Вот использую сие и все нормально Записывает/Считывает в/из Ini-фаил
procedure WriteIniDataBool(Section, Ident : string; Value : boolean);
begin
IniFile := TIniFile.Create(Path + '\config.ini');
IniFile.WriteBool(Section, Ident, Value);
IniFile.Free;
end;
function ReadIniDataBool(Section, Ident : string; Default : boolean = false) : boolean;
begin
IniFile := TIniFile.Create(Path + '\config.ini');
Result := IniFile.ReadBool(Section, Ident, Default);
IniFile.Free;
end;
Использую...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
if N1.Checked = true Then
WriteIniDataBool('Menu', 'AutoSave', True) else
WriteIniDataBool('Menu', 'AutoSave', False);
...
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
...
if ReadIniDataBool('Menu', 'AutoSave', True) then
N1.Checked := True else N1.Checked := False;
...
end;
Правильно или можно оптимизировать?
Семеныч (2008-02-27 07:12:00) [3]> Stepper (27.02.08 06:11)
В INI-файле информация хранится в таком формате:
[имя_секции]
параметр=значение
параметр=значение
...
Пусть имя секции - это имя TMenuItem, параметры - это имена его свойств, а значения - соответственно, значения этих свойств. Тогда, задача решается очень просто: читаем параметры в секции с известным именем и выставляем свойствам TMenuItem прочитанные (как строки) значения.
Перед присвоением значения придется преобразовывать его строковое представление к нужному типу. Функции преобразования называются StrToXxx (StrToInt и т.п.), а чтобы определить, какую из них нужно вызвать, надо определить тип свойства. Для этого можно использовать PropType из модуля TypInfo, а для установки свойства по его строковому имени удобно использовать функции SetXxxProp (SeOrdProp и т.п.) из того же модуля.
Остальное нужно действительно посмотреть в справке по TIniFile или TRegIniFile. И еще в исходниках модуля TypInfo.
Stepper (2008-02-27 07:05:00) [4]
function ReadIni(ASection, AString: string): string;
var
sIniFile: TIniFile;
sPath: string[60];
const
S = 'xyz'; { стандартная строка для выдачи ошибок чтения }
begin
GetDir(0, sPath); { текущий каталог }
sIniFile := TIniFile.Create(sPath + '\Name.INI');
Result := sIniFile.ReadString(ASection, AString, S); { [Section] String=Value}
sIniFile.Free;
end;
procedure WriteIni(ASection, AString, AValue: string);
var
sIniFile: TIniFile;
sPath: string[60];
begin
GetDir(0, sPath); { текущий каталог }
sIniFile := TIniFile.Create(sPath + '\Name.INI');
sIniFile.WriteString(ASection, AString, AValue); { [Section] String=Value }
sIniFile.Free;
end;
Как сие Использовать применительно к TMemuItem?
Смирнов (2008-02-27 06:15:00) [5]смотри методы TIniFile