Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ Delphi - Система _ Работа с реэстром!

Автор: misterio 31:03:2008, 14:58

Вообщем впредь вопросы можно задавать тут....

Пожалуй я начну:

1) Объяните мне как создать раздел в реэстре? Я пишу так :

Код
const key_path = 'блаблабла';
var hk : HKEY;
...
RegCreateKey (HKEY_LOCAL_MACHINE,key_path,&hk);


Естественно ничего не выходит..потому что я не пойму зачем тут &hk? И что оно дает?

2) Как создать строковый параметр с именем "blablabla" с описанием(необязательно).

Пишу так :

Код
RegSetValueEx(hk,'StringValue',0, REG_SZ, <не пойму что тут> , <и тут>);


Чем можете помочь?

Автор: sax_ol 31:03:2008, 15:22

Берите TRegistry и не мучайтесь.

Автор: misterio 31:03:2008, 15:59

Не люблю использовать компоненты...вопрос остаеться в силе!

Автор: sax_ol 31:03:2008, 16:46

1. это не компонент.
2. ссзб

http://forum.codeby.net/topic19586s0.html?p=90087&#entry90087 , читать до конца!

Автор: misterio 31:03:2008, 19:41

Цитата
ссзб
я хоть и на ИБ учусь, но такой шифровки еще не понимаю.
Насчет второго: можно однострочный примерчик ?

Автор: sax_ol 1:04:2008, 05:40

ссзб - "сам себе злобный буратино" - типа: легких путей не ищет
Примеры есть в Demos.

Автор: misterio 1:04:2008, 08:05

В том то и фишка что не Delphi пользуюсь а CodeGear RAD Studio 2007. И в демосах я в упор не нашел слова TRegistry. А справка там конченая...ничего путевого в ней нету вообще!!

Автор: misterio 1:04:2008, 16:03

Хорошо...порпобовал с TRegistry.

Все получилось, но....как создать параметр "блаблабла" типа REG_MULTI_SZ и REG_DWORD???.
Функций WriteDword & WriteMultiString нету....

Автор: brink 2:04:2008, 12:00

Цитата(misterio @ 1:04:2008, 18:03 ) *
Хорошо...порпобовал с TRegistry.

Все получилось, но....как создать параметр "блаблабла" типа REG_MULTI_SZ и REG_DWORD???.
Функций WriteDword & WriteMultiString нету....


Для REG_DWORD используй WriteInteger.
А вот с REG_MULTI_SZ мне и самому интересно, пишу на Builder С++, но там тоже лажа с записью в этот тип.
Где-то читал, что есть какой-то дополнительный TRegistry для делфи который может работать с этим типом. Но пока не нашёл.

Неужели никто не знает как это делается? sad.gif

Автор: sax_ol 2:04:2008, 12:56

Цитата(brink @ 2:04:2008 - 14:00) *
Неужели никто не знает как это делается?

Или использовать WriteBinaryData, или дописать метод.

Автор: misterio 2:04:2008, 14:07

Цитата
Где-то читал, что есть какой-то дополнительный TRegistry для делфи который может работать с этим типом. Но пока не нашёл.


Нима такого компонента. Есть модуль

CODE
unit Reg;
{$R-,T-,H+,X+}

interface

uses Registry, Classes, Windows, Consts, SysUtils;

type

TReg = class(TRegistry)
public
procedure ReadStringList(const name : string; list : TStringList);
procedure WriteStringList(const name : string; list : TStringList);
end;

implementation

//*** TReg *********************************************************************
//------------------------------------------------------------------------------
// Запись TStringList ввиде значения типа REG_MULTI_SZ в реестр
//------------------------------------------------------------------------------
procedure TReg.WriteStringList(const name : string; list : TStringList);
var
Buffer : Pointer;
BufSize : DWORD;
i, j, k : Integer;
s : string;
p : PChar;
begin
{подготовим буфер к записи}
BufSize := 0;
for i:=0 to list.Count-1 do
inc(BufSize, Length(list[i])+1);
inc(BufSize);
GetMem(Buffer, BufSize);
k := 0;
p := Buffer;
for i:=0 to list.Count-1 do begin
s := list[i];
for j:=0 to Length(s)-1 do begin
p[k] := s[j+1];
inc(k);
end;
p[k] := chr(0);
inc(k);
end;
p[k] := chr(0);

{запись в реестр}
if RegSetValueEx(CurrentKey, PChar(name), 0, REG_MULTI_SZ, Buffer, BufSize) <> ERROR_SUCCESS then
raise ERegistryException.CreateResFmt(@SRegSetDataFailed, [name]);
end;
end.


Кстате он тоже с байдой : @SRegSetDataFailed - вот тут не хочет компилироваться.
Можно конечно записать так :

Код
RegSetValueEx(CurrentKey, PChar(name), 0, REG_MULTI_SZ, Buffer, BufSize)
- без проверки.

Но все равно, потом в основной программе подключать дополнительный модуль, создавать новую переменную типа TReg...кароче ввесь смысл написать маленькое приложение пропадает.

Изначально я и справшивал как работать без TRegistry...



Вот я еще нашел такой модуль, довольно-таки интересно.

 ApiRegistry_Module.zip ( 1.65 килобайт ) : 0

Автор: sax_ol 2:04:2008, 14:20

Цитата(misterio @ 2:04:2008 - 16:07) *
Кстате он тоже с байдой : @SRegSetDataFailed - вот тут не хочет компилироваться.

Это не он с "байдой" а ... короче надо справку штудировать.
Цитата(misterio @ 2:04:2008 - 16:07) *
Но все равно, потом в основной программе подключать дополнительный модуль, создавать новую переменную типа TReg...кароче ввесь смысл написать маленькое приложение пропадает.

И что тут такого страшного, в подключении модуля? Или совсем без ООП пишите?

Цитата(misterio @ 2:04:2008 - 16:07) *
создавать новую переменную типа TReg

Все по ситуации смотрится, надо создадим, но как показывает практика в большинстве случаев это ненадо.

Автор: misterio 2:04:2008, 14:57

Все проблема решена. Всем спасибо.

@SRegSetDataFailed - где про нее можно почитать? Кроме как в справке.

Автор: sax_ol 2:04:2008, 15:19

в RTLConsts.pas (D7)

Русская версия Invision Power Board (http://www.nulled.ws)
© Invision Power Services (http://www.nulled.ws)