Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.006 c
1-55186
Demon Ltd
2002-06-03 00:11
2002.06.17
работа с DataTimePicker


14-55305
Baz
2002-05-14 10:17
2002.06.17
Да так просто


1-55103
Andrew22
2002-06-06 09:03
2002.06.17
Курсор


3-55006
button
2002-05-23 15:11
2002.06.17
State = Edit и Сортировка


1-55078
Starkom
2002-06-04 08:29
2002.06.17
Не могу разобраться с выгрузкой Dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский