Форум: "Основная";
Текущий архив: 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