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