скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Урок 8 - Работа с реестром



Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kolmck.net/

Сейчас уже стало стандартом, что настройки программы, важные (да и не очень) параметры храняться в реестре Windows. По этой причине и в KOL существует поддержка работы с реестром. Нельзя сказать, что эти инструменты такие же мощные, как и TRegister в VCL, но необходимый минимум найдется.

Работа с регистром в KOL построена с помощью функций. Их список я привожу в таблице с кратким описанием (хотя человек знакомый с TRegister поймет их и так).

Функция Выполняемое действие
Функции для работы с ключами

RegKeyOpenCreate

Создание ключа и его открытие

function RegKeyOpenCreate( Key: HKey; const SubKey: String ): HKey;

RegKeyOpenRead

Открытие ключа для чтения

function RegKeyOpenRead( Key: HKey; const SubKey: String ): HKey;

RegKeyOpenWrite

Открытие ключа для записи

function RegKeyOpenWrite( Key: HKey; const SubKey: String ): HKey;

RegKeyClose

Закрытие ключа регистра ранее открытого с помощью RegKeyOpenRead или RegKeyOpenWrite

procedure RegKeyClose( Key: HKey );

RegKeyDelete

Удаление ключа регистра

function RegKeyDelete( Key: HKey; const SubKey: String ): Boolean;

RegKeyExists

Возвращение true, если "подключ" (SubKey) существует в данном ключе (Key)

function RegKeyExists( Key: HKey; const SubKey: String ): Boolean;

RegKeyGetSubKeys

Возвращение в List список всех "подключей"(ниже лежащих ключей) для ключа Key

function RegKeyGetSubKeys( const Key: HKEY; List: PStrList ): Boolean;

Функции для работы с переменными

RegKeyDeleteValue

Удаление из ключа Key переменной с именем Value.

function RegKeyDeleteValue( Key: HKey; const Value: String ): Boolean;

RegKeyValExists

Возвращение TRUE, если параметр ValueName существует в ключе Key.

function RegKeyValExists( Key: HKey; const ValueName: String ): Boolean;

RegKeyValueSize

Возвращает размер переменной(ValueName). Для переменных типа строка (string) возвращаемое значение равно длине строки + 1 (нулевой символ)

function RegKeyValueSize( Key: HKey; const ValueName: String ): Integer;

RegKeyGetValueNames

Возвращает список всех имен переменных находящихся в ключе Key

function RegKeyGetValueNames( const Key: HKEY; List: PStrList ): Boolean;

RegKeyGetValueTyp

Возвращает тип переменной под именем ValueName. Возвращаемое значение может быть следующие :
REG_BINARY , REG_DWORD, REG_DWORD_LITTLE_ENDIAN,
REG_DWORD_BIG_ENDIAN, REG_EXPAND_SZ, REG_LINK , REG_MULTI_SZ,
REG_NONE, REG_RESOURCE_LIST, REG_SZ

function RegKeyGetValueTyp( const Key: HKEY; const ValueName: String ): DWORD;

Функции для работы с переменными DWORD

RegKeyGetDw

Чтение из ключа данных типа DWORD. Если чтение не успешно, то возвращение 0

function RegKeyGetDw( Key: HKey; const ValueName: String ): DWORD;

RegKeySetDw

Запись в ключ данных типа DWORD.

function RegKeySetDw( Key: HKey; const ValueName: String; Value: DWORD ): Boolean;

Функции для работы с переменными STRING

RegKeyGetStr

Чтение из ключа данных типа String. Если чтение не успешно, то возвращение пустой строки

function RegKeyGetStr( Key: HKey; const ValueName: String ): String;

RegKeyGetStrEx

Чтение из ключа данных типа String. Если чтение не успешно, то возвращение пустой строки. Расширенный по саоим возможносям вариант RegKeyGetStr.

function RegKeyGetStrEx( Key: HKey; const ValueName: String ): String;

RegKeySetStr

Запись в ключ данных типа String.

function RegKeySetStr( Key: HKey; const ValueName: String; const Value: String ): Boolean;

Функции для работы с переменными BINARY

RegKeyGetBinary

Чтение из ключа данных типа binary. Происходит запись данных из реестра в буфер Buffer размером Count. На выходе у функции количество прочитанных байт.

function RegKeyGetBinary( Key: HKey; const ValueName: String; var Buffer; Count: Integer ): Integer;

RegKeySetBinary

Запись в ключ данных типа Binary.

function RegKeySetBinary( Key: HKey; const ValueName: String; const Buffer; Count: Integer ): Boolean;

Функции для работы с датой

RegKeyGetDateTime

Чтение из переменной с именем ValueName дыты. В реестре эти данные хранятся в бинарном виде.

function RegKeyGetDateTime( Key: HKey; const ValueName: String ): TDateTime;

RegKeySetDateTime

Запись даты в реестр.

function RegKeySetDateTime( Key: HKey; const ValueName: String; DateTime: TDateTime ): Boolean;

Для начала работы с каким-либо ключом регистра, вы должны открыть его с помощью функций RegKeyOpenRead, RegKeyOpenWrite или RegKeyOpenCreate. В первом параметре должен передаватся HKey какого нибудь ранее открытого ключа или одна из следующих констант:
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS
Второй параметр:SubKey - имя ключа расположенного ниже Key.

После того как вы открыли ключ, вы можете записывать и читать данные. Ну и логическое завершение всего процесса - это команда RegKeyClose, т.е. закрытие ключа, если он вам больше не нужен.

Пример чтения и записи в реестра:
program Primer_1; 
 
uses 
  windows, 
  messages, 
  kol; 
 
{$R *.RES} 
const 
 KeyWin = 'SOFTWARE\Microsoft\Windows\CurrentVersion'; 
 
var 
 Form, 
 edOption, 
 buOption, 
 List, 
 panTop:pControl; 
 Key:HKey; 
 
/////////////////////////////////////////////////////////// 
Procedure ClickOnList( Dummy : Pointer; Sender : PControl ); 
begin 
 // чтение из реестра 
 Key := RegKeyOpenRead(HKEY_LOCAL_MACHINE,KeyWin); 
 edOption.Text := RegKeyGetStr(Key,List.Items[List.CurIndex]); 
 RegKeyClose(Key); 
end; 
/////////////////////////////////////////////////////////// 
Procedure ClickOnButton( Dummy : Pointer; Sender : PControl ); 
begin 
 // запись в реестра
 if edOption.Text='' then exit; 
 Key := RegKeyOpenWrite(HKEY_LOCAL_MACHINE,KeyWin); 
 RegKeySetStr(Key,List.Items[List.CurIndex],edOption.Text); 
 RegKeyClose(Key); 
end; 
/////////////////////////////////////////////////////////// 
 
begin 
 Form := NewForm(Applet,'Пример работы с реестром').SetSize(400,200); 
 
 // можно было обойтись и Form.CanResize := false 
 Form.Style := WS_BORDER or WS_SYSMENU or WS_VISIBLE; 
 
 Form.Font.FontName := 'MS Sans Serif'; 
 Form.Font.FontHeight := 8; 
 
 panTop := NewPanel(Form,esRaised).SetAlign(caTop); 
 edOption := NewEditbox(panTop,[]); 
 buOption := NewButton (panTop,'Применить').PlaceRight; 
 buOption.OnClick := TOnEvent( MakeMethod( nil, @ClickOnButton ) ); 
 
 List := NewListbox(Form,[]).SetAlign(caClient); 
 List.Add('ProductId'); 
 List.Add('ProductName'); 
 List.Add('RegisteredOrganization'); 
 List.Add('RegisteredOwner'); 
 List.Add('Version'); 
 List.Add('VersionNumber'); 
 List.OnClick := TOnEvent( MakeMethod( nil, @ClickOnList ) ); 
  
 // ----- Наводим красоту жонглируя с размерами.-------- 
 //  Можно и не вникать :) 
 edOption.Width := panTop.Width - buOption.Width-10; 
 buOption.Left := edOption.Width+ 4 ; 
 panTop.Height := edOption.Height+10; 
 //----------------------------------------------------- 
 
 Run(Form); 
end. 
Исходный текст : 1,92 Кб ; размер программы: 30Кб (без сжатия и замены System)
После компиляции вы увидите примерно следующие:

Если вы читали мои предыдущие монологи про KOL, вам должно быть в основном все понятно. Не говорил я только про свойства Font.FontName и Font.FontHeight, но тут можно вполне догадатся, что мы меняем параметры шрифта.






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook