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