Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Или я туплю, или одно из двух   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.063 c
15-1167470411
Chuk &amp; Gek
2006-12-30 12:20
2007.01.21
Зацените закрытие окна


15-1167393147
Kerk
2006-12-29 14:52
2007.01.21
Пятничная задачка ;)


3-1162227059
rar
2006-10-30 19:50
2007.01.21
Занята БД Access


2-1166697532
nickhilo
2006-12-21 13:38
2007.01.21
Линейка как в Word е.


2-1167197615
New_Lamer
2006-12-27 08:33
2007.01.21
Странная ошибка