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

Вниз

Не могу записать значение в реестр   Найти похожие ветки 

 
Alex_Bredin ©   (2004-11-24 11:13) [0]

Написал небольшой модуль для облегчения работы с реестром(чтение\запись значений ключей). В одной программе все прекрасно работает. В другой- при вызове той же функции вываливает ERegistryException -не могу записать данные для такого-то параметра. Правда, в первом случае это приложение, во втором- пакет. Есть ли здесь какие-то грабли?

код на всякий случай

unit RegistryUtils;

interface

uses Registry,Variants,Windows;

const RRoot = HKEY_CURRENT_USER;
// finds the key,if not found, returns default
// returns value as variant
function ReadRegistryKeyValue(RegistryKey:string;Param:string;Default:variant):variant;
// finds the key,if not found, creates one & sets its value,
// returns false if failed
function WriteRegistryKeyValue(RegistryKey:string;Param:string;Value:variant):boolean;
// deletes the key
procedure DeleteRegistryKey(RegistryKey:string);

implementation

var vRegistry:Tregistry;

//---------------------------------------------------------------- WriteRegistryKeyValue

function WriteRegistryKeyValue(RegistryKey:string;Param:string;Value:variant): boolean;
var
 vt: integer;
begin
 vt:=VarType(Value);
 vRegistry.CloseKey;
 if vRegistry.OpenKey(RegistryKey,true) then
  begin
   try
     case vt of
       varInteger,varByte,varSmallint: vRegistry.WriteInteger(Param,integer(Value));
       varString:                      vRegistry.WriteString(Param,vartostr(Value));
       varBoolean:                     vRegistry.WriteBool(Param,boolean(Value));
     end;
     Result:=true;
   except
     Result := false;
   end;
   vRegistry.CloseKey;
  end
 else
   Result:=false;
end;

//------------------------------------------------------------ ReadRegistryKeyValue

function ReadRegistryKeyValue(RegistryKey:string;Param:string;Default:variant):variant;
var
 vt: integer;
begin
 Result:=Default;
 vt:=VarType(Default);
 vRegistry.CloseKey;
 try
   if vRegistry.OpenKeyReadOnly(RegistryKey) then
    if vRegistry.ValueExists(Param) then
     case vt of
           varInteger,varByte, varSmallint: Result:=vRegistry.ReadInteger(Param);
                                 varString: Result:=vRegistry.ReadString(Param);
                                varBoolean: Result:=vRegistry.ReadBool(Param);
     end;
 except
 end;
 vRegistry.CloseKey;
end;

//------------------------------------------------------------DeleteRegistryKey
procedure DeleteRegistryKey(RegistryKey:string);
begin
 //
end;

initialization
 vRegistry:=TRegistry.Create;
 vRegistry.RootKey:=RRoot;
finalization
 vRegistry.Free;

e


 
TUser ©   (2004-11-24 11:15) [1]

Наверное, не хватает полномочий.


 
Alex_Bredin ©   (2004-11-24 11:40) [2]

Разобрался.

Почему-то для каждого обращения(по крайней мере, для записи) вингдоза требует создания нового объекта TRegistry. Использование вышеприведенного подхода (многократного обращения к одному экземпляру)не прокатывает.


 
TUser ©   (2004-11-24 12:14) [3]


> Почему-то для каждого обращения(по крайней мере, для записи)
> вингдоза требует создания нового объекта TRegistry.

Разве?

И еще - а где ты указываешь RootKey?


 
Jay   (2004-11-24 12:34) [4]

Я пробовал как-то работать с реестром, у меня была подобная ошибка, когда делаешь OpenKey, RootKey переприсваивает на путь указаный в OpenKey, и никакие попытки его изменения ничего не давали



Страницы: 1 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
14-1100171946
Sash
2004-11-11 14:19
2004.12.05
IE(cgi-bin)


9-1084546612
Omar2002
2004-05-14 18:56
2004.12.05
Статистическое предсказывание.


6-1095793373
ildar_kh
2004-09-21 23:02
2004.12.05
Запуск фрейма..


14-1100599034
X9
2004-11-16 12:57
2004.12.05
Вопрос Web-Мастерам


8-1094201150
1
2004-09-03 12:45
2004.12.05
Как сделать линии/прямые сглаженными ?