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

Вниз

Вопрос по реестру.   Найти похожие ветки 

 
Начинающий2   (2004-12-03 18:20) [0]

Как прочитать имена ключей в реестре, если известен только раздел. Вообщем нужно прочитать и занести в список. Облазил весь Help, и ничего не нашол кроме ReadString("name");, а как быть если имя то и не известно.


 
begin...end ©   (2004-12-03 18:25) [1]

> Начинающий2   (03.12.04 18:20)

Определитесь, что именно нужно - получить список ключей (их названий) в данном разделе реестра, или прочитать значения параметров.

Если первое, то Registry.GetKeyNames(List), где List: TStringList.


 
ALS ©   (2004-12-03 18:28) [2]

Класс TRegistry, методы GetKeyNames, GetValueNames


 
Начинающий2   (2004-12-03 18:31) [3]

Именно список ключей, вот только про Registry.GetKeyNames(List) я находил в справке. Пробовал, не получилось. Может пример подскажете.


 
begin...end ©   (2004-12-03 18:35) [4]

> [3] Начинающий2   (03.12.04 18:31)

Так вот я уже и привёл пример в [1]. Лучше Вы приведите код, с которым не получилось.


 
Начинающий2   (2004-12-03 18:58) [5]

Код на другом компе. Попробую вспомнить.
var
nam:string;
i:Integer;
....
if i=0 to List1.Items[i].Count -1 do begin
Reg.OpenKey("Software\Programma\My Prog",true);
nam:=Reg.GetKeyNames(List);
....

Что то вроде этого.


 
Anatoly Podgoretsky ©   (2004-12-03 19:04) [6]

Что то вроде этого не надо, давай точный код и посмотри справку.


 
begin...end ©   (2004-12-03 19:08) [7]

> [5] Начинающий2   (03.12.04 18:58)

> if i=0 to List1.Items[i].Count -1 do begin

Эта строка вообще не нужна. А List1 нужно предварительно создать.


 
Начинающий2   (2004-12-03 19:25) [8]

Да я вообще первый раз за реестор взялся, до этого с ini делал.
А на счёт  if i=0 to List1.Items[i].Count -1 do begin ошибся, не if а for. А дальше добавляю в список типа LictView.

LictView.Items.add.caption:=nam;
reg.closekey;
reg.free;

>А List1 нужно предварительно создать.

А как его создать? А полный код не могу дать, на другом компе, дома.


 
begin...end ©   (2004-12-03 19:28) [9]

> [8] Начинающий2   (03.12.04 19:25)

> А на счёт  if i=0 to List1.Items[i].Count -1 do begin ошибся,
> не if а for.

Не важно, всё равно эта строка не нужна.

> А как его создать?

List1 := TStringList.Create


 
Начинающий2   (2004-12-03 19:38) [10]

Спасибо, попробую, если что то завтра снова спрошу, да код возьму.


 
Начинающий2   (2004-12-04 20:14) [11]

Не получилось, не пойму что не так. Пробовал и так и так, не идет, выдает ошибку:

[Error] StartManager.pas(272): Incompatible types: "String" and "procedure, untyped pointer or untyped parameter"

А вот код:

Procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
name:string;
Val:TStringList;
Reg.TRegistry;
begin
Val:=TStringList.Create;
Reg:=TRegistry.Create;
Reg.RootKey:= HKEY_LOCAL_MACHINE;
try
   with Val do
  if Reg.KeyExists("\Software\StM\AllProg") then
  begin
   Reg.GetValueNames(Val);
   for I:=0 to Val.Count-1 do
  begin
   Reg.OpenKey("\Software\StM\AllProg", true);
   name:= reg.GetValueNames(Val);  / здесь и выдаёт ошибку
   Prog.Items.Add.Caption:=name;
   end;
  end;
  finally
     Val.Free;
 end;
end;

Не пойму что не так.


 
Zacho ©   (2004-12-04 20:38) [12]

Правильно будет так:

...
Reg.OpenKey("\Software\StM\AllProg", true);
Reg.GetValueNames(Val);
for I:=0 to Val.Count-1 do
 begin
  name:= Val.Strings[i];  
  Prog.Items.Add.Caption:=name;
 end;
...


Может и ещё какие ошибки есть, детально не смотрел.

А with Val do убери нафиг.


 
Начинающий2   (2004-12-04 21:06) [13]

Вроде прошло, вот только всё равно не читает. Да и выход из программы вызывает ошибку.


 
novice__man   (2004-12-04 21:29) [14]

name:= reg.GetValueNames(Val);  / здесь и выдаёт ошибку

Правильно выдает, как это можно приравнять ПРОЦЕДУРУ к переменной string?

Это из хелпа Delphi:

Returns a string list containing the names of all data values associated with the current key.

procedure GetValueNames(Strings: TStrings);

Description

Call GetValueNames to determine the names of all data values associated with the current key. Determining the names of data values is useful in an application that iterates through a set of data values for a key.

Strings is a variable of type TStrings into which to return the list of data value names.


Или читать хелп выше вашего уровня программирования?


 
novice__man   (2004-12-04 21:46) [15]

Вот так я вывел список всех имен подразделов "SOFTWARE"

procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
ListKey: TStringList;
begin
ListKey := TStringList.Create;
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKeyReadOnly("software") then begin
   reg.GetKeyNames(ListKey);
   ListBox1.Items.Assign(ListKey);
   end;
ListKey.Free;
end;


 
begin...end ©   (2004-12-04 21:49) [16]

> [12] Zacho ©   (04.12.04 20:38)

> name:= Val.Strings[i];  
> Prog.Items.Add.Caption:=name;

Да можно и без name...


 
Начинающий2   (2004-12-06 17:29) [17]

> novice__man   (04.12.04 21:29) [14]

Спавку я читаю, и к томуже постоянно, да только с пониманием на англиском туговато, немецкий приходится штудировать. Да и с переводом ошибки я розобрался потом, только всё равно не вышло. Сделал обходным путём, получился лишний код, как при сохранении ключей, так и при чтении. Так как использовал стандартные процедуры чтения. А за пример спасибо, щя буду пробовать, как только пару компанент пропишу в 7 дэльфяк.

> begin...end ©   (04.12.04 21:49) [16]
Да можно и без name...

Вы совершенно правы, при условии что переменная используется только для одной строки типа: Prog.Items.Add.Caption:=Val.Strings[i];.
А если следуюшие строки также нуждаются в этой переменной, везде писать :=Val.Strings[i]; ?


 
begin...end ©   (2004-12-06 20:38) [18]

> [17] Начинающий2   (06.12.04 17:29)

> Вы совершенно правы, при условии что переменная используется
> только для одной строки типа: Prog.Items.Add.Caption:=Val.Strings[i];.
> А если следуюшие строки также нуждаются в этой переменной,
> везде писать :=Val.Strings[i]; ?

А почему бы и нет, разве лучше писАть name ? К тому же, with ещё есть.


 
Начинающий2   (2004-12-07 16:42) [19]

> begin...end ©   (06.12.04 20:38) [18]

>А почему бы и нет, разве лучше писАть name ? К тому же, with ещё есть.

Не имею нечего против, просто написать метку проще чем писать целую строку, особенно когда используется в несколиких процедурах.

> novice__man   (04.12.04 21:46) [15]

Всё работает только с компанентами типа ListBox, кроме ListView. В ListView выводит лиш в одно поле, да и только с параметром типа ListView1.Items.Add.SubItems.Assign(ListKey); , а ме как раз и нужен ListView. Мне надо занисти в ListView, при открытии программы а не по нажатию кнопки, список имён раздела и их параметры типа: Имя - Параметр. Я пробовал с  Form.Create (Activate, Show), нечиго не выводится, а привязывать к кнопке,
делать её невидимой и циплять к ней таймер, это абсурд. Может посоветуете что другое, или компанент какой есть типа ListView, чтоб в него можно было считать весь список как в ListBox. К примеру, как это делается в проге jv16 PowerTools и других подобных.


 
Начинающий2   (2004-12-10 13:08) [20]

Похоже не кто не знает, значит буду делать как всегда, сам разбираться.



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

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

Наверх




Память: 0.52 MB
Время: 0.048 c
1-1102582831
Jiny
2004-12-09 12:00
2004.12.26
Создание конструктор форм как в 1С


1-1102673687
OlegM
2004-12-10 13:14
2004.12.26
TStream в переменную типа String ???


1-1102669656
korvin
2004-12-10 12:07
2004.12.26
Форма не держится "сверху"


14-1101642690
ИМХО
2004-11-28 14:51
2004.12.26
Знатокам компьютерных игр


1-1102927057
Руслана
2004-12-13 11:37
2004.12.26
Подскажите как удалить файл с аттрибутами ReadOnly?