![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по реестру. [D6, WinXP]
Начинающий2 © (2004-12-03 18:20:00)Как прочитать имена ключей в реестре, если известен только раздел. Вообщем нужно прочитать и занести в список. Облазил весь Help, и ничего не нашол кроме ReadString('name');, а как быть если имя то и не известно.
Начинающий2 (2004-12-10 13:08:00) [1]Похоже не кто не знает, значит буду делать как всегда, сам разбираться.
Начинающий2 (2004-12-07 16:42:00) [2]> 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 и других подобных.
begin...end (2004-12-06 20:38:00) [3]> [17] Начинающий2 (06.12.04 17:29)
> Вы совершенно правы, при условии что переменная используется
> только для одной строки типа: Prog.Items.Add.Caption:=Val.Strings[i];.
> А если следуюшие строки также нуждаются в этой переменной,
> везде писать :=Val.Strings[i]; ?
А почему бы и нет, разве лучше писАть name? К тому же, with ещё есть.
Начинающий2 (2004-12-06 17:29:00) [4]> 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-04 21:49:00) [5]> [12] Zacho © (04.12.04 20:38)
> name:= Val.Strings[i];
> Prog.Items.Add.Caption:=name;
Да можно и без name...
novice__man (2004-12-04 21:46:00) [6]Вот так я вывел список всех имен подразделов "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;
novice__man (2004-12-04 21:29:00) [7]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.
Или читать хелп выше вашего уровня программирования?
Начинающий2 (2004-12-04 21:06:00) [8]Вроде прошло, вот только всё равно не читает. Да и выход из программы вызывает ошибку.
Zacho (2004-12-04 20:38:00) [9]Правильно будет так:
...
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 20:14:00) [10]Не получилось, не пойму что не так. Пробовал и так и так, не идет, выдает ошибку:
[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;
Не пойму что не так.
Начинающий2 (2004-12-03 19:38:00) [11]Спасибо, попробую, если что то завтра снова спрошу, да код возьму.
begin...end (2004-12-03 19:28:00) [12]> [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:25:00) [13]Да я вообще первый раз за реестор взялся, до этого с 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:08:00) [14]> [5] Начинающий2 (03.12.04 18:58)
> if i=0 to List1.Items[i].Count -1 do begin
Эта строка вообще не нужна. А List1 нужно предварительно создать.
Anatoly Podgoretsky (2004-12-03 19:04:00) [15]Что то вроде этого не надо, давай точный код и посмотри справку.
Начинающий2 (2004-12-03 18:58:00) [16]Код на другом компе. Попробую вспомнить.
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);
....
Что то вроде этого.
begin...end (2004-12-03 18:35:00) [17]> [3] Начинающий2 (03.12.04 18:31)
Так вот я уже и привёл пример в [1]. Лучше Вы приведите код, с которым не получилось.
Начинающий2 (2004-12-03 18:31:00) [18]Именно список ключей, вот только про Registry.GetKeyNames(List) я находил в справке. Пробовал, не получилось. Может пример подскажете.
ALS (2004-12-03 18:28:00) [19]Класс TRegistry, методы GetKeyNames, GetValueNames
begin...end (2004-12-03 18:25:00) [20]> Начинающий2 (03.12.04 18:20)
Определитесь, что именно нужно - получить список ключей (их названий) в данном разделе реестра, или прочитать значения параметров.
Если первое, то Registry.GetKeyNames(List), где List: TStringList.