unit SetBDE;
{ ----- Проверка и корректировка настроек BDE ---- }
{ Paradox: DBWINUS0; DBase: DBWINUS0 or db866ru0 }
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TSetBDEFrm = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
CheckBox1: TCheckBox;
Label1: TLabel;
Label2: TLabel;
StaticText1: TStaticText;
Label3: TLabel;
StaticText2: TStaticText;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Panel1: TPanel;
Label5: TLabel;
Bevel1: TBevel;
ComboBox1: TComboBox;
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
private
procedure NewBDELangDriver(var LangDrvDBase, LangDrvParadox: string;
var DBaseLevel:byte);
end;
var
SetBDEFrm: TSetBDEFrm;
// главная вызываемая процедура
procedure ControlBDELangDriver(var LangDrvDBase, LangDrvParadox: string;
var DBaseLevel: byte);
implementation
{$R *.dfm}
uses Registry;
procedure TSetBDEFrm.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked then
CheckBox3.Checked:= false;
ComboBox1.Enabled:= false;
ComboBox1.Color:= clBtnFace;
end;
procedure TSetBDEFrm.CheckBox3Click(Sender: TObject);
begin
if CheckBox3.Checked then
CheckBox2.Checked:= false;
ComboBox1.Enabled:= CheckBox3.Checked;
if ComboBox1.Enabled then ComboBox1.Color:= clWindow
else ComboBox1.Color:= clBtnFace;
end;
{ --- Определение кодовых страниц в BDE --- }
procedure BDELangDriver(var LangDrvDBase, LangDrvParadox: string;
var DBaseLevel: byte);
var
Registry: TRegistry;
begin
Registry:= TRegistry.Create; // создаём объект TRegistry
Registry.RootKey := HKey_Local_Machine; // устанавливаем корневой ключ
LangDrvDBase:= '';
LangDrvParadox:= '';
DBaseLevel:= 0;
// открываем ключ
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\DBase\Init',false) then
begin
// читаем значение параметра
LangDrvDBase:= Registry.ReadString('LangDriver');
Registry.CloseKey; // закрываем и освобождаем ключ
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\DBase\Table Create',false) then
DBaseLevel:= StrToInt(Registry.ReadString('Level'));
end
else
Application.MessageBox('Возможно, не установлен драйвер BDE (Borland Database Engine)',
' Критическая ошибка', MB_ICONSTOP);
Registry.CloseKey;
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\Paradox\Init',false) then
LangDrvParadox:= Registry.ReadString('LangDriver')
else if LangDrvDBase <> '' then
Application.MessageBox('Возможно, неправильно установлен драйвер BDE (Borland Database Engine)',
' Критическая ошибка', MB_ICONSTOP);
Registry.CloseKey;
Registry.Free;
LangDrvParadox:= AnsiUpperCase(LangDrvParadox);
LangDrvDBase:= AnsiUpperCase(LangDrvDBase)
end;
{ --- Переопределение кодовых страниц в BDE --- }
procedure TSetBDEFrm.NewBDELangDriver(var LangDrvDBase, LangDrvParadox: string;
var DBaseLevel:byte);
const
Level: array[0..3] of byte = (7,5,4,3);
var
Registry: TRegistry; L:integer;
begin
Registry := TRegistry.Create;
Registry.RootKey := HKey_Local_Machine;
// Paradox
if CheckBox1.Checked and (LangDrvParadox <> 'DBWINUS0') then
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\Paradox\Init',false) then
begin
LangDrvParadox:= 'DBWINUS0';
Registry.WriteString('LangDriver', LangDrvParadox);
Registry.CloseKey;
end;
// DBase - DBWINUS0
if CheckBox2.Checked and (LangDrvDBase <> 'DBWINUS0') then begin
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\DBase\Init',false) then
begin
LangDrvDBase:= 'DBWINUS0';
Registry.WriteString('LangDriver', LangDrvDBase);
Registry.CloseKey;
end;
if DBaseLevel <> 7 then
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\DBase\Table Create',false) then
begin
DBaseLevel:= 7;
Registry.WriteString('Level', '7');
Registry.CloseKey;
end
end
else if CheckBox3.Checked then begin // DBase - db866ru0
if (LangDrvDBase <> 'DB866RU0') then
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\DBase\Init',false) then
begin
LangDrvDBase:= 'DB866RU0';
Registry.WriteString('LangDriver','db866ru0');
Registry.CloseKey;
end;
L:= ComboBox1.ItemIndex;
if L in [0..3] then L:= Level[L] else L:=7;
if L <> DBaseLevel then
if Registry.OpenKey('Software\Borland\DataBase Engine\Settings\Drivers\DBase\Table Create',false) then
begin
DBaseLevel:= L;
Registry.WriteString('Level', IntToStr(L));
Registry.CloseKey;
end
end;
Registry.Free;
end;
{ ---- Проверка и корректировка настроек BDE ---- }
// главная процедура - вызывается извне
procedure ControlBDELangDriver(var LangDrvDBase, LangDrvParadox: string;
var DBaseLevel: byte);
const Level : array[0..3] of byte = (7,5,4,3);
var s: string; L:integer;
begin
// Проверка настроек BDE
BDELangDriver(LangDrvDBase, LangDrvParadox, DBaseLevel); // текущие настройки
if (LangDrvDBase = '') or (LangDrvParadox = '') then exit; // замечание уже было
if not ((LangDrvParadox = 'DBWINUS0') and
(((LangDrvDBase = 'DB866RU0') and (DBaseLevel > 3)) or
(LangDrvDBase = 'DBWINUS0'))) then
begin
// изменение настроек BDE
SetBDEFrm:= TSetBDEFrm.Create(nil);
with SetBDEFrm do begin
if (LangDrvParadox = 'DBWINUS0') and
(LangDrvDBase = 'DB866RU0') and (DBaseLevel = 3) then
Label5.Caption:= 'Настройки в DBase неудобные - '#13#10 +
'рекомендуется установить следующие:';
StaticText1.Caption:= ' ' + LangDrvParadox;
s:= LangDrvDBase;
if s <> 'DBWINUS0' then s:= s + ', ver.' + IntToStr(DBaseLevel);
StaticText2.Caption:= ' ' + s;
L:=0;
case DBaseLevel of
5: L:=1;
4: L:=2;
end;
ComboBox1.ItemIndex:= L;
if LangDrvDBase = 'DBWINUS0' then begin
CheckBox2.Checked:= true;
CheckBox3.Checked:= false;
end
else begin
CheckBox3.Checked:= true;
CheckBox2.Checked:= false
end;
if ShowModal = 1 then
NewBDELangDriver(LangDrvDBase, LangDrvParadox, DBaseLevel);
Free
end { with SetBDEFrm }
end
end;
end.
