Главная страница
    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.5 MB
Время: 0.036 c
3-1101460045
b@mboZe
2004-11-26 12:07
2004.12.26
Утечка памяти в TADODataset.


9-1093018611
Ландграф Павел
2004-08-20 20:16
2004.12.26
Помогите с геометрией 9-го класса


1-1102786407
Frozzen
2004-12-11 20:33
2004.12.26
Спрятать главную форму при создании?


14-1102253374
NailMan
2004-12-05 16:29
2004.12.26
Хорошие ресторанчики для проведения мероприятий


14-1102590673
Dmitriy O.
2004-12-09 14:11
2004.12.26
Как оботи требование вставить CD диск для запуска ?





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