Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > проблемы с TRegistry.Rootkey


Автор: ctranik 11.1.2006, 17:44
Всем привет

У меня такой вопрос

Как в цикле , менять значение свойства "Rootkey" класса TRegistry
ну что типа такого

Код

var
reg:TRegisty;
hk:array[0..6] of Hkey;
i:integer;

begin

reg:=TRegistry.Create;

hk[0]:=HKEY_LOCAL_MACHINE;
hk[1]:=HKEY_Current_User; 
hk[2]:=HKEY_Classes_Root;
hk[3]:=HKEY_Users; hk[4]:=HKEY_Current_Config;
hk[5]:=HKEY_PERFORMANCE_DATA;
hk[6]:=HKEY_DYN_DATA ;

for i:= 0 to 6 do
     reg.rootkey:=hk[z];// тут проблема
     .......
     .......
end;

reg.free;


у меня неполучаетсмя присваивать значения ?

Автор: Romikgy 11.1.2006, 17:46
Че конкретно не получается? какие ошибки, приведенный код вроде правильный имхо!!!

Автор: Albinos_x 11.1.2006, 17:59
мдя....
Цитата(ctranik @ 11.1.2006, 17:44 Найти цитируемый пост)

for i:= 0 to 6 do
    reg.rootkey:=hk[z];// тут проблема

просто попробуй z поменять на i .... smile

Автор: ctranik 11.1.2006, 19:56
Albinos_x, привет

Цитата(Albinos_x @ 11.1.2006, 17:59 Найти цитируемый пост)

просто попробуй z поменять на i ....

это просто опечатка и всё.
А проблема в том что , это свойство требует что бы ему установили конкретную константу, а не элемент массива
свойство хочет вот чего
Код

reg.rootkey:=HKEY_LOCAL_MACHINE; и т.д


и совсем не приемлет
Код


for i:= 0 to 6 do
     reg.rootkey:=hk[i];
     


Это и есть моя проблема
Добавлено @ 19:59
Romikgy, привет

более детально о проблеме в последней мессаге

Автор: Guedda 11.1.2006, 20:15
а если просто попробовать:
Код

const
  RootKeys : array[0..6] of Integer = 
  (
    HKEY_LOCAL_MACHINE, 
    HKEY_CURRENT_USER, 
    HKEY_CLASSES_ROOT, 
    HKEY_USERS, 
    HKEY_CURRENT_CONFIG, 
    HKEY_PERFOMANCE_DATA, 
    HKEY_DYN_DATA
  );

и обращаться через константы.

Автор: ctranik 11.1.2006, 20:23
Guedda, привет

если тебя не затруднит вставь свою мысль в мой фрагмент (самый первый Post)

Автор: Albinos_x 11.1.2006, 20:30
Цитата(ctranik @ 11.1.2006, 19:56 Найти цитируемый пост)

это просто опечатка и всё.
А проблема в том что , это свойство требует что бы ему установили конкретную константу, а не элемент массива
свойство хочет вот чего

виднов коде у тебя ошибка... у меня всё компилится и всё устанавливается...
Код

uses
   ..., Registry,...

...
procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;
hk:array[0..6] of Hkey;
i:integer;
begin
reg:=TRegistry.Create;
hk[0]:=HKEY_LOCAL_MACHINE;
hk[1]:=HKEY_Current_User;
hk[2]:=HKEY_Classes_Root;
hk[3]:=HKEY_Users; hk[4]:=HKEY_Current_Config;
hk[5]:=HKEY_PERFORMANCE_DATA;
hk[6]:=HKEY_DYN_DATA ;
for i:= 0 to 6 do
     begin
     reg.rootkey:=hk[i];// òóò ïðîáëåìà

     end;

reg.free;
end;
...

Автор: Guedda 11.1.2006, 20:35
Ну смотри:
Код

var    
  reg:TRegisty;    
  i:integer;    
const
  RootKeys : array[0..6] of Integer =    
  (    
    HKEY_LOCAL_MACHINE,    
    HKEY_CURRENT_USER,    
    HKEY_CLASSES_ROOT,    
    HKEY_USERS,    
    HKEY_CURRENT_CONFIG,    
    HKEY_PERFOMANCE_DATA,    
    HKEY_DYN_DATA    
  );
begin            
  for i:= 0 to 6 do begin    
    reg:=TRegistry.Create;
    reg.rootkey:=RootKeys[i];// Здесь присваиваем константу
        .......     // здесь делаем, что хотим.
        .......
    reg.CloseKey;
    reg.free; 
  end; {for}
end;   {procedure}

В общем, работает...
Только запомни, что после каждого обращения к ключу, необходимо обнулить методом free. Посмотри внимательней на исправленный код.

Автор: Albinos_x 11.1.2006, 20:36
как вариант HKEY_LOCAL_MACHINE и подобные константы имеют тип Cardinal, попробуй установить тип массива
hk:array[0..6] of Cardinal;

Автор: Guedda 11.1.2006, 20:52
Да... Я еще это забыл, перепеши Integer в Cardinal

Автор: Albinos_x 11.1.2006, 21:04
Цитата(ctranik @ 11.1.2006, 19:56 Найти цитируемый пост)

А проблема в том что , это свойство требует что бы ему установили конкретную константу, а не элемент массива
свойство хочет вот чего

если я правильно понял, то твой код у тебя не компилился.... м.п. когда я вставил твой код, то сразу вылезло кучу опечаток.... начиная от
Цитата
reg:TRegisty;

...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)