![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кооректна ли моя конструкция? [D5, Win95/98, WinME, WinXP]
Егор © (2002-08-27 15:33:00)То есть: можно ли в одной процедуре работать с несколькими корневыми ключами RootKey так, как это делаю я?
procedure ReadParams;
var
Reg: Tregistry;
begin
Reg:=TRegistry.Create;
try
{$ifdef VER130}
Access := KEY_READ;
{$endif}
Reg.RootKey:=HKEY_CURRENT_USER;
if Reg.OpenKey("\SOFTWARE\Microsoft\Windows", False) then
begin
.......
end;
Reg.CloseKey;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey("\Software\Microsoft\Windows", False) then
begin
.......
end;
Reg.CloseKey;
except
Reg.CloseKey;
Reg.Free;
end;
end;
Егор (2002-08-27 16:26:00) [1]Если программа читает строковое значение, а в реестре записано оно как бинарное (разное бывает) тогда появляеться нехорошее сообщение. Используя except вместо finally такое сообщение не появляеться.
cypher (2002-08-27 16:18:00) [2]IMXO нада except на finally поменять
A:=Object.Create();
try
A.bla-bla-bla := hz-che;
finally
A.Free;
end;
Егор (2002-08-27 16:06:00) [3]Спасибо.
Skier (2002-08-27 15:51:00) [4]>Егор
Нет !
Вот так :
procedure ReadParams;
var
Reg: Tregistry;
begin
try
Reg:=TRegistry.Create;
try
{$ifdef VER130}
Access := KEY_READ;
{$endif}
Reg.RootKey:=HKEY_CURRENT_USER;
if Reg.OpenKey("\SOFTWARE\Microsoft\Windows", False) then
begin
.......
end;
Reg.CloseKey;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey("\Software\Microsoft\Windows", False) then
begin
.......
end;
Reg.CloseKey;
finally
FreeAndNil(Reg);
end; //try
except
if Reg <> nil then begin
Reg.CloseKey;
Reg.Free;
end; //if
end; //try
end;
Егор (2002-08-27 15:48:00) [5]Так?
procedure ReadParams;
var
Reg: Tregistry;
begin
Reg:=TRegistry.Create;
try
{$ifdef VER130}
Access := KEY_READ;
{$endif}
Reg.RootKey:=HKEY_CURRENT_USER;
if Reg.OpenKey("\SOFTWARE\Microsoft\Windows", False) then
begin
.......
end;
Reg.CloseKey;
Reg.Free;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey("\Software\Microsoft\Windows", False) then
begin
.......
end;
Reg.CloseKey;
Reg.Free;
except
Reg.CloseKey;
Reg.Free;
end;
end;
Skier (2002-08-27 15:36:00) [6]>Егор
Да.
Только Reg надо бы освободить!
А в твоём код он освобождается только при exception.
Внук (2002-08-27 15:35:00) [7]На здоровье, только Reg.Free надо вынести из except еще ниже