Сейчас уже стало стандартом, что настройки программы, важные (да и не очень) параметры храняться в реестре 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.
Если вы читали мои предыдущие монологи про KOL, вам должно быть в основном все понятно. Не говорил я только про свойства Font.FontName и Font.FontHeight, но тут можно вполне догадатся, что мы меняем параметры шрифта.