Форум: "Прочее";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
ВнизИли я туплю, или одно из двух Найти похожие ветки
← →
Andy BitOff © (2006-12-27 02:02) [0]Постоянно использовал для сохранние настроек в реест (когда надо в реестр), код следующего содержания:
begin
with TRegIniFile.Create("") do begin
RootKey := HKEY_CURRENT_USER;
s := "\Software\bla_bla";
try
if OpenKey(s, False) then begin
EDestDir.Text := ReadString(s, "LastPathSavedFile", "");
trb_JPGCompress.Position := ReadInteger(s, "JPGCompress", 80);
chb_SaveToTIF.Checked := ReadBool(s, "SaveToTIF", False);
....
end;
finally
Free;
end;
end;
end;
Всегда все работало и не возникало никаких проблем, а тут ...
При попытке прочитать жирненькую строку, получаю; "Invalid data type for "JPGCompress". Бред, он конечно же DWORD.
Пройдя по F7 почему-то попадаю на ReadString.
Ничего не могу понять. Может, кто чего посоветует?
← →
ors_archangel © (2006-12-27 02:22) [1]Не знаю, но может поэтому
function TCustomIniFile.ReadInteger(const Section, Ident: string;
Default: Longint): Longint;
var
IntStr: string;
begin
IntStr := ReadString(Section, Ident, "");
if (Length(IntStr) > 2) and (IntStr[1] = "0") and
((IntStr[2] = "X") or (IntStr[2] = "x")) then
IntStr := "$" + Copy(IntStr, 3, Maxint);
Result := StrToIntDef(IntStr, Default);
end;
ты попадаешь на ReadString
← →
Джо © (2006-12-27 02:28) [2]> Ничего не могу понять. Может, кто чего посоветует?
Посмотреть редактор реестра на то, что там в самом деле записано. Мало ли, может там, "qwertyasdfg".
← →
Джо © (2006-12-27 02:28) [3]... или 567.
← →
Andy BitOff © (2006-12-27 02:52) [4]В редакторе ресрта написно:
JPGCompress REG_DWORD 0x00000050 (80)
Изначально попадаю наfunction TRegIniFile.ReadInteger(const Section, Ident: string; Default: LongInt): LongInt;
var
Key, OldKey: HKEY;
S: string;
begin
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
if ValueExists(Ident) then
begin
S := inherited ReadString(Ident);
Result := StrToIntDef(S, Default);
end else
Result := Default;
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end
else Result := Default;
end;
На жирненьком перехожуfunction TRegistry.ReadString(const Name: string): string;
var
Len: Integer;
RegData: TRegDataType;
begin
Len := GetDataSize(Name);
if Len > 0 then
begin
SetString(Result, nil, Len);
GetData(Name, PChar(Result), Len, RegData);
if (RegData = rdString) or (RegData = rdExpandString) then
SetLength(Result, StrLen(PChar(Result)))
else ReadError(Name);
end
else Result := "";
end;
И вот здесь (жирным) я имею RegData = rdInteger, что соответственно, вызывает выше описанную ошибку.
← →
ors_archangel © (2006-12-27 02:58) [5]У меня
procedure TRegIniFile.WriteInteger(const Section, Ident: string; Value: LongInt);
var
Key, OldKey: HKEY;
begin
CreateKey(Section);
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
inherited WriteString(Ident, IntToStr(Value));
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
end;
соответственно записть целого производится в виде строки, может ты записывал значения не TRegINIFile.WriteStringом?
← →
ors_archangel © (2006-12-27 03:00) [6]Как ни тупо, но
JPGCompress REG_DWORD 0x00000050 (80)
должно быть замененно на
JPGCompress REG_SZ "80".
Я лично юзаю MiniReg от кого-то там и там RegSetDword делает DWORD :) Борланд не жалеет реестр!
← →
ors_archangel © (2006-12-27 03:01) [7]Как ни тупо, но
JPGCompress REG_DWORD 0x00000050 (80)
должно быть замененно на
JPGCompress REG_SZ "80".
Я лично юзаю MiniReg от кого-то там и там RegSetDword делает DWORD :) Борланд не жалеет реестр!
← →
Ученик чародея © (2006-12-27 03:12) [8]Я так использую
const
RegRootKey=HKEY_CURRENT_USER;
var Registry:TRegistry;
begin
Registry:=TRegistry.Create;
Registry.RootKey:=RegRootKey;
//открытие основного ключа
Registry.OpenKey("SOFTWARE\GART\CS",false);
//чтение значений
SystemRegVariables.StartAndRun:=Registry.ReadBool("StartAndRun");
SystemRegVariables.GoodTime:=Registry.ReadInteger("GoodTime");
SystemRegVariables.NormalTime:=Registry.ReadInteger("NormalTime");
SystemRegVariables.PoorTime:=Registry.ReadInteger("PoorTime");
SystemRegVariables.interval:=Registry.ReadInteger("interval");
SystemRegVariables.TimeAllarm:=Registry.ReadInteger("TimeAllarm");
...
Registry.Free;
← →
Anatoly Podgoretsky © (2006-12-27 19:56) [9]> Andy BitOff (27.12.2006 2:02:00) [0]
Тупишь, TRegIniFile это работа в стиле IniFile оставлено только для совместимости (для перехода) с Win 16
Работает только со строковыми значениями в реесте, а у тебя там DWord
Не хочешь неприятностей, то перейди на TRegistry
← →
oldman © (2006-12-27 20:00) [10]
> Anatoly Podgoretsky © (27.12.06 19:56) [9]
Вот, как всегда.
Пришел умный мен и все испортил...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c