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

Вниз

try в TRegistry   Найти похожие ветки 

 
Коля ©   (2002-06-05 02:17) [0]

Как использовать try с TRegistry? Необходимо проверить, существует ли ключ, и если существует, открыть и записать его значение в rrr, а если его нет сделать rrr=0.
пишу вот так, но если ключа нет, дает ошибку:

reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
try
reg.OpenKey("\Control Panel\Desktop\RDe",
rrr := reg.ReadInteger("RRR");
finaly
if Assigned(Reg) then begin
reg.CloseKey;
reg.Free;
end;
end;
подскажите, где ошибка


 
Bsl   (2002-06-05 07:48) [1]

А те не пользуй TRegistry, а попробуй TRegIniFile - в функциях ReadXXXXX (REadInteger и ReadString) есть знчения по-умолчанию - задай их как-нибудь коряво - т.е. такое значение, которое не может оказаться в реестре, если они вернут тебе его - значит ключа не было. А можно получить список ключей в ветви и посмотреть если ли желаемый.


 
Внук ©   (2002-06-05 09:32) [2]

if reg.OpenKey("\Control Panel\Desktop\RDe", false) then ...
F1, однако...


rrr:=0;
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey("\Control Panel\Desktop\RDe",false) then
begin
rrr := reg.ReadInteger("RRR")
reg.CloseKey;
end;
reg.Free;


 
Song ©   (2002-06-05 09:48) [3]

Наиболее правильный и читабельный код:

Function GetNumber:Integer;
Begin
Result:=0;
With TRegistry.Create Do
try
RootKey:=HKEY_CURRENT_USER;
IF OpenKey("\Control Panel\Desktop\RDe",false) then Result:=ReadInteger("RRR");
CloseKey;
finally
Free;
end;
End;

....

rrr:=GetNumber;


 
Игорь Шевченко ©   (2002-06-05 10:26) [4]

Еще более правильный код: :-)))


function GetMyCoolSetting : Integer;
begin
Result := -1;
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey("\Software\MyCoolApp", False) and
ValueExists("MyCoolSetting") then
Result := ReadInteger("MyCoolSetting");
finally
Free();
end;
end;



 
Внук ©   (2002-06-05 10:52) [5]

function GetMyCoolSetting : Integer;
begin
>>Игорь Шевченко © (05.06.02 10:26)
И с этим кодом могут быть проблемы под WinNT по причине того, что по умолчанию назначается KEY_ALL_ACCESS. Так что еще более правильный код

function GetMyCoolSetting : Integer;
begin
Result := -1;
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
Access:=KEY_READ;
if OpenKey("\Software\MyCoolApp",False) then
Result := ReadInteger("MyCoolSetting");
finally
Free();
end;
end;

Но, согласно Song, есть более правильный код, а есть "Наиболее правильный" :)))


 
Игорь Шевченко ©   (2002-06-05 11:01) [6]

Внук © (05.06.02 10:52)

Тогда уж:

with TRegistry.Create (KEY_READ) do

И проблем не будет...
Пустячок, а на строчку меньше :-)))

С уважением,
Игорь Шевченко

P.S. Вот так и рождаются правильные программы :-))


 
Внук ©   (2002-06-05 11:06) [7]

>>Игорь Шевченко © (05.06.02 11:01)
Опять уел :)))


 
Anatoly Podgoretsky ©   (2002-06-05 11:09) [8]

Ну если уж заговорили оь правильном коде, то вот последний вариант:

function GetMyCoolSetting : Integer;
const
ERRORINDICATOR = 0;
begin
with TRegistry.Create do
try
Access:=KEY_READ; // ХОТЬ И ЛИШНЕЕ
if OpenKey("\Software\MyCoolApp", False) and
ValueExists("MyCoolSetting")
then
Result := ReadInteger("MyCoolSetting")
else
Result := ERRORINDICATOR;
finally
Free;
end;
end;


Коля © (05.06.02 02:17)
У тебя вопрос и код расходятся, в вопросе про ключ, а в коде про параметр, неясно что же тебе нужно, но видимо второе.


 
Внук ©   (2002-06-05 11:18) [9]

>>Anatoly Podgoretsky © (05.06.02 11:09)
Access:=KEY_READ; // ХОТЬ И ЛИШНЕЕ
Почему же лишнее? Согласно Рихтеру, многие приложения, работающие с реесторм под Win9x, не работают под WinNT лишь из-за того, что программист не озаботился нужным доступом и оставил доступ по умолчанию KEY_ALL_ACCESS (правда, сам не проверял).




 
Игорь Шевченко ©   (2002-06-05 11:26) [10]

Есть такая штука, как Local/Group Policies, в которых можно запретить доступ на запись в реестр даже на определенные ветки в HKCU. В этом случае открытие ключа с KEY_ALL_ACCESS завершится с ошибкой.

Внук © (05.06.02 11:06)
> Опять уел :)))

Это тебе спасибо за напоминание про Access :-))




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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
1-55051
MAN-IN-RED
2002-06-03 20:06
2002.06.17
Есть парочка вопросов к мастерам:


3-54972
Sewix
2002-05-22 18:10
2002.06.17
DBGrid events


14-55286
tsarevep
2002-05-13 11:53
2002.06.17
Не совсем по Delphi но рядом


1-55110
Ron
2002-06-06 10:11
2002.06.17
Иерархи


8-55224
Алексей Архипов
2002-01-31 01:06
2002.06.17
Вокодер