Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
Начинающий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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.032 c
14-1102307446
Урфин Джюс
2004-12-06 07:30
2004.12.26
Do not localize


1-1102616677
Intr
2004-12-09 21:24
2004.12.26
Service Application


10-1074607237
morfey-night
2004-01-20 17:00
2004.12.26
динамическое создание TDataModule


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


1-1103007006
NeyroSpace
2004-12-14 09:50
2004.12.26
Как оптимальнее всего хранить список из пар число - строка?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский