Форум: "Основная";
Текущий архив: 2002.06.17;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c