Changeset 20


Ignore:
Timestamp:
Mar 23, 2018, 1:59:25 PM (6 years ago)
Author:
chronos
Message:
  • Modified: Database classes reorganized. Now TDbConnectProfile is class which holds information about connection to database.
  • Modified: TDbManager is top most class for managing other database classes.
  • Modified: TDbConnectParams class contains client specific parameters for connect profile.
Location:
trunk
Files:
1 added
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/DbEngines/UEngineMySQL.pas

    r15 r20  
    1212  { TDatabaseMySQL }
    1313
    14   TDatabaseMySQL = class(TDatabaseClient)
     14  TDatabaseMySQL = class(TDbClient)
    1515  private
    1616    procedure LoadFields(Table: TTable);
    17     procedure LoadTables;
     17  protected
     18    procedure LoadTables(Tables: TTables); override;
    1819  public
    1920    SqlDatabase: TSqlDatabase;
     
    2526  end;
    2627
     28  { TDbConnectParamsMySQL }
     29
     30  TDbConnectParamsMySQL = class(TDbConnectParams)
     31  protected
     32    function GetConnectionString: string; override;
     33    procedure SetConnectionString(AValue: string); override;
     34  public
     35    Host: string;
     36    Port: Word;
     37  end;
     38
     39
    2740implementation
     41
     42{ TDbConnectParamsMySQL }
     43
     44function TDbConnectParamsMySQL.GetConnectionString: string;
     45begin
     46  Result := 'mysql://' + Host + ':' + IntToStr(Port);
     47end;
     48
     49procedure TDbConnectParamsMySQL.SetConnectionString(AValue: string);
     50var
     51  URL: TURL;
     52begin
     53  URL := TURL.Create;
     54  try
     55    URL.AsString := AValue;
     56    if (URL.Scheme <> 'mysql') and (AValue <> '') then
     57      raise Exception.Create('Wrong connection string. Required mysql scheme.');
     58    Host := URL.Host.AsString;
     59    Port := URL.Port;
     60  finally
     61    URL.Free;
     62  end;
     63end;
    2864
    2965{ TDatabaseMySQL }
     
    5187      if DbRows2.Count > 0 then begin
    5288        TypeName := TDictionaryStringString(DbRows2[0]).Values['Name'];
    53         NewField.DataType := Table.Database.Engine.DataTypes.FindByName(TypeName);
     89        NewField.DataType := Table.DbClient.ClientType.DataTypes.FindByName(TypeName);
    5490        if not Assigned(NewField.DataType) then
    55           NewField.DataType := Table.Database.Engine.DataTypes.FindByType(ftString);
     91          NewField.DataType := Table.DbClient.ClientType.DataTypes.FindByType(ftString);
    5692      end else begin
    5793        // Use string as default
    58         NewField.DataType := Table.Database.Engine.DataTypes.FindByType(ftString);
     94        NewField.DataType := Table.DbClient.ClientType.DataTypes.FindByType(ftString);
    5995      end;
    6096      Table.Fields.Add(NewField);
     
    66102end;
    67103
    68 procedure TDatabaseMySQL.LoadTables;
     104procedure TDatabaseMySQL.LoadTables(Tables: TTables);
    69105var
    70106  DbRows: TDbRows;
     
    78114      NewTable := TTable.Create;
    79115      NewTable.Id := StrToInt(TDictionaryStringString(DbRows[I]).Values['Id']);
    80       NewTable.Database := Database;
     116      NewTable.DbClient := Self;
    81117      NewTable.Name := TDictionaryStringString(DbRows[I]).Values['Name'];
    82118      NewTable.Caption := TDictionaryStringString(DbRows[I]).Values['Title'];
    83119      LoadFields(NewTable);
    84       Database.Tables.Add(NewTable);
     120      Tables.Add(NewTable);
    85121    end;
    86122  finally
     
    112148  URL := TURL.Create;
    113149  try
    114     URL.AsString := Database.ConnectionString;
     150    URL.AsString := ConnectProfile.Params.ConnectionString;
    115151    if URL.Scheme <> 'mysql' then
    116152      raise Exception.Create('Wrong connection string. Required mysql protocol.');
     
    124160      SqlDatabase.Database := Copy(URL.Path, 2, High(Integer));
    125161    SqlDatabase.Connect;
    126     LoadTables;
    127162  finally
    128163    URL.Free;
  • trunk/DbEngines/UEngineSQLite.pas

    r7 r20  
    99
    1010type
    11   TDatabaseSQLite = class(TDatabaseClient)
     11  TDatabaseSQLite = class(TDbClient)
    1212
    1313  end;
     14
     15  TDbConnectParamsSQLite = class(TDbConnectParams)
     16
     17  end;
     18
    1419
    1520implementation
  • trunk/DbEngines/UEngineXML.pas

    r17 r20  
    1212  { TDatabaseXML }
    1313
    14   TDatabaseXML = class(TDatabaseClient)
     14  TDatabaseXML = class(TDbClient)
    1515  private
    16     function GetFileName: string;
     16    FFileName: string;
     17    Tables: TTables;
    1718    procedure LoadNodeRecord(Row: TRecord; Node: TDOMNode);
    1819    procedure SaveNodeRecord(Row: TRecord; Node: TDOMNode);
     
    3031    procedure SaveToFile(FileName: string);
    3132    function GetNextPart(var Text: string): string;
     33  protected
    3234  public
    3335    procedure Query(DbRows: TDbRows; Text: string); override;
     36    procedure LoadTables(Tables: TTables); override;
    3437    procedure Load; override;
    3538    procedure Save; override;
    36     property FileName: string read GetFileName;
     39    constructor Create; override;
     40    destructor Destroy; override;
     41    property FileName: string read FFileName write FFileName;
     42  end;
     43
     44  { TDbConnectParamsXml }
     45
     46  TDbConnectParamsXml = class(TDbConnectParams)
     47  protected
     48    function GetConnectionString: string; override;
     49    procedure SetConnectionString(AValue: string); override;
     50  public
     51    FileName: string;
    3752  end;
    3853
     
    4661  SWrongFileFormat = 'Wrong file format';
    4762
    48 { TDatabaseXML }
    49 
    50 function TDatabaseXML.GetFileName: string;
     63{ TDbConnectParamsXml }
     64
     65function TDbConnectParamsXml.GetConnectionString: string;
     66begin
     67  Result := 'file:///' + FileName;
     68end;
     69
     70procedure TDbConnectParamsXml.SetConnectionString(AValue: string);
    5171var
    5272  URL: TURL;
     
    5474  URL := TURL.Create;
    5575  try
    56     URL.AsString := Database.ConnectionString;
    57     if URL.Scheme <> 'file' then
     76    URL.AsString := AValue;
     77    if (URL.Scheme <> 'file') and (AValue <> '') then
    5878      raise Exception.Create('Wrong connection string. Required file scheme.');
    59 
    60     Result := URL.Path
     79    FileName := Copy(URL.Path, 2, Length(URL.Path));
    6180  finally
    6281    URL.Free;
    6382  end;
    6483end;
     84
     85{ TDatabaseXML }
    6586
    6687procedure TDatabaseXML.LoadNodeRecord(Row: TRecord; Node: TDOMNode);
     
    137158begin
    138159  Field.Name := ReadString(Node, 'Name', '');
    139   Field.DataType := Field.Table.Database.Engine.DataTypes.FindByType(TFieldType(ReadInteger(Node, 'Type', 0)));
     160  Field.DataType := Field.Table.DbClient.ClientType.DataTypes.FindByType(TFieldType(ReadInteger(Node, 'Type', 0)));
    140161  Field.TextBefore := ReadString(Node, 'TextBefore', '');
    141162  Field.TextAfter := ReadString(Node, 'TextAfter', '');
     
    219240  while Assigned(Node2) and (Node2.NodeName = 'Table') do begin
    220241    NewTable := TTable.Create;
    221     NewTable.Database := Tables.Database;
     242    NewTable.DbClient := Tables.DbClient;
    222243    LoadNodeTable(NewTable, Node2);
    223244    Tables.Add(NewTable);
     
    252273      NewNode := FindNode('Tables');
    253274      if Assigned(NewNode) then
    254         LoadNodeTables(Database.Tables, NewNode);
     275        LoadNodeTables(Tables, NewNode);
    255276    end;
    256277  finally
     
    273294      NewNode := OwnerDocument.CreateElement('Tables');
    274295      AppendChild(NewNode);
    275       SaveNodeTables(Database.Tables, NewNode);
     296      SaveNodeTables(Tables, NewNode);
    276297    end;
    277298    ForceDirectories(ExtractFileDir(FileName));
     
    310331      TableName := GetNextPart(Text);
    311332    end else raise Exception.Create('No table specified with FROM');
    312     Table := Database.Tables.SearchByName(TableName);
     333    Table := Tables.SearchByName(TableName);
    313334    if Assigned(Table) then begin
    314335      DbRows.Count := 0;
     
    330351end;
    331352
     353procedure TDatabaseXML.LoadTables(Tables: TTables);
     354begin
     355  inherited;
     356
     357end;
     358
    332359procedure TDatabaseXML.Load;
    333360begin
     
    341368end;
    342369
     370constructor TDatabaseXML.Create;
     371begin
     372  Tables := TTables.Create;
     373  inherited Create;
     374end;
     375
     376destructor TDatabaseXML.Destroy;
     377begin
     378  Tables.Free;
     379  inherited Destroy;
     380end;
     381
    343382
    344383end.
  • trunk/Forms/UFormConnect.lfm

    r9 r20  
    77  ClientHeight = 452
    88  ClientWidth = 616
     9  DesignTimePPI = 120
    910  OnShow = FormShow
    10   LCLVersion = '1.5'
     11  LCLVersion = '1.8.0.6'
    1112  object EditName: TEdit
    1213    Left = 211
    13     Height = 35
     14    Height = 28
    1415    Top = 21
    1516    Width = 261
     
    1819  object Label1: TLabel
    1920    Left = 16
    20     Height = 25
     21    Height = 20
    2122    Top = 26
    22     Width = 62
     23    Width = 43
    2324    Caption = 'Name:'
    2425    ParentColor = False
     
    2627  object Label2: TLabel
    2728    Left = 16
    28     Height = 25
     29    Height = 20
    2930    Top = 67
    30     Width = 159
     31    Width = 115
    3132    Caption = 'Database engine:'
    3233    ParentColor = False
     
    3435  object ComboBox1: TComboBox
    3536    Left = 213
    36     Height = 37
     37    Height = 28
    3738    Top = 67
    38     Width = 252
    39     ItemHeight = 0
     39    Width = 260
     40    ItemHeight = 20
     41    OnChange = ComboBox1Change
    4042    Style = csDropDownList
    4143    TabOrder = 1
    42   end
    43   object EditConnectionString: TEdit
    44     Left = 211
    45     Height = 35
    46     Top = 112
    47     Width = 261
    48     TabOrder = 2
    49   end
    50   object Label3: TLabel
    51     Left = 16
    52     Height = 25
    53     Top = 117
    54     Width = 169
    55     Caption = 'Connection string:'
    56     ParentColor = False
    5744  end
    5845  object ButtonOk: TButton
     
    6451    Caption = 'Ok'
    6552    ModalResult = 1
    66     TabOrder = 3
     53    TabOrder = 2
    6754  end
    6855  object ButtonCancel: TButton
     
    7461    Caption = 'Cancel'
    7562    ModalResult = 2
     63    TabOrder = 3
     64  end
     65  object PageControl1: TPageControl
     66    Left = 15
     67    Height = 250
     68    Top = 116
     69    Width = 586
     70    ActivePage = TabSheetRegistry
     71    Anchors = [akTop, akLeft, akRight]
     72    ShowTabs = False
     73    TabIndex = 3
    7674    TabOrder = 4
     75    object TabSheetXml: TTabSheet
     76      ClientHeight = 242
     77      ClientWidth = 578
     78      object Label3: TLabel
     79        Left = 14
     80        Height = 20
     81        Top = 20
     82        Width = 54
     83        Caption = 'Xml file:'
     84        ParentColor = False
     85      end
     86      object EditXml: TEdit
     87        Left = 92
     88        Height = 28
     89        Top = 21
     90        Width = 372
     91        Anchors = [akTop, akLeft, akRight]
     92        TabOrder = 0
     93      end
     94      object ButtonXmlBrowse: TButton
     95        Left = 472
     96        Height = 31
     97        Top = 16
     98        Width = 94
     99        Anchors = [akTop, akRight]
     100        Caption = 'Browse'
     101        OnClick = ButtonXmlBrowseClick
     102        TabOrder = 1
     103      end
     104    end
     105    object TabSheetSql: TTabSheet
     106      ClientHeight = 242
     107      ClientWidth = 578
     108      object Label4: TLabel
     109        Left = 14
     110        Height = 20
     111        Top = 16
     112        Width = 34
     113        Caption = 'Host:'
     114        ParentColor = False
     115      end
     116      object EditHost: TEdit
     117        Left = 125
     118        Height = 28
     119        Top = 12
     120        Width = 260
     121        TabOrder = 0
     122      end
     123      object Label5: TLabel
     124        Left = 16
     125        Height = 20
     126        Top = 48
     127        Width = 30
     128        Caption = 'Port:'
     129        ParentColor = False
     130      end
     131      object SpinEditPort: TSpinEdit
     132        Left = 125
     133        Height = 28
     134        Top = 48
     135        Width = 111
     136        MaxValue = 65535
     137        TabOrder = 1
     138      end
     139    end
     140    object TabSheetSqlite: TTabSheet
     141      Caption = 'TabSheetSqlite'
     142    end
     143    object TabSheetRegistry: TTabSheet
     144      Caption = 'TabSheetRegistry'
     145    end
     146  end
     147  object OpenDialog1: TOpenDialog
     148    left = 528
     149    top = 32
    77150  end
    78151end
  • trunk/Forms/UFormConnect.pas

    r6 r20  
    77uses
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9   ComCtrls, UDatabase;
     9  ComCtrls, Spin, UDatabase;
    1010
    1111type
     
    1414
    1515  TFormConnect = class(TForm)
     16    ButtonXmlBrowse: TButton;
    1617    ButtonOk: TButton;
    1718    ButtonCancel: TButton;
    1819    ComboBox1: TComboBox;
     20    EditHost: TEdit;
     21    EditXml: TEdit;
    1922    EditName: TEdit;
    20     EditConnectionString: TEdit;
    2123    Label1: TLabel;
    2224    Label2: TLabel;
    2325    Label3: TLabel;
     26    Label4: TLabel;
     27    Label5: TLabel;
     28    OpenDialog1: TOpenDialog;
     29    PageControl1: TPageControl;
     30    SpinEditPort: TSpinEdit;
     31    TabSheetSqlite: TTabSheet;
     32    TabSheetRegistry: TTabSheet;
     33    TabSheetXml: TTabSheet;
     34    TabSheetSql: TTabSheet;
     35    procedure ButtonXmlBrowseClick(Sender: TObject);
     36    procedure ComboBox1Change(Sender: TObject);
    2437    procedure FormShow(Sender: TObject);
    2538  private
    26     { private declarations }
    2739  public
    28     procedure Load(Database: TDatabase);
    29     procedure Save(Database: TDatabase);
     40    procedure Load(ConnectProfile: TDbConnectProfile);
     41    procedure Save(ConnectProfile: TDbConnectProfile);
    3042    procedure Init;
     43    procedure UpdateInterface;
    3144  end;
    3245
    3346var
    3447  FormConnect: TFormConnect;
     48
    3549
    3650implementation
     
    3953
    4054uses
    41   UCore;
     55  UCore, UEngineXML, UEngineMySQL;
    4256
    4357{ TFormConnect }
     
    4761end;
    4862
    49 procedure TFormConnect.Load(Database: TDatabase);
     63procedure TFormConnect.ButtonXmlBrowseClick(Sender: TObject);
    5064begin
    51   EditName.Text := Database.Name;
    52   EditConnectionString.Text := Database.ConnectionString;
    53   ComboBox1.ItemIndex := ComboBox1.Items.IndexOfObject(Database.Engine);
     65  OpenDialog1.Filter := 'XML files (.xml)|*.xml|Any file|*.*';
     66  OpenDialog1.InitialDir := ExtractFileDir(EditXml.Text);
     67  OpenDialog1.FileName := ExtractFileName(EditXml.Text);
     68  if OpenDialog1.Execute then
     69    EditXml.Text := OpenDialog1.FileName;
     70end;
     71
     72procedure TFormConnect.ComboBox1Change(Sender: TObject);
     73begin
     74  UpdateInterface;
     75end;
     76
     77procedure TFormConnect.Load(ConnectProfile: TDbConnectProfile);
     78begin
     79  EditName.Text := ConnectProfile.Name;
     80  //EditConnectionString.Text := Database.ConnectionString;
     81  ComboBox1.ItemIndex := ComboBox1.Items.IndexOfObject(ConnectProfile.ClientType);
    5482  if (ComboBox1.ItemIndex = -1) and (ComboBox1.Items.Count > 0) then
    5583    ComboBox1.ItemIndex := 0;
     84  if ConnectProfile.Params is TDbConnectParamsXml then
     85    EditXml.Text := TDbConnectParamsXml(ConnectProfile.Params).FileName;
     86  if ConnectProfile.Params is TDbConnectParamsMysql then begin
     87    EditHost.Text := TDbConnectParamsMysql(ConnectProfile.Params).Host;
     88    SpinEditPort.Value := TDbConnectParamsMysql(ConnectProfile.Params).Port;
     89  end;
     90  UpdateInterface;
    5691end;
    5792
    58 procedure TFormConnect.Save(Database: TDatabase);
     93procedure TFormConnect.Save(ConnectProfile: TDbConnectProfile);
    5994begin
    60   Database.Name := EditName.Text;
    61   Database.ConnectionString := EditConnectionString.Text;
    62   Database.Engine := TDatabaseEngine(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
     95  ConnectProfile.Name := EditName.Text;
     96  //DatabaseClient.ConnectionString := EditConnectionString.Text;
     97  ConnectProfile.ClientType := TDbClientType(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
     98  if ConnectProfile.Params is TDbConnectParamsXml then
     99    TDbConnectParamsXml(ConnectProfile.Params).FileName := EditXml.Text;
     100  if ConnectProfile.Params is TDbConnectParamsMysql then begin
     101    TDbConnectParamsMysql(ConnectProfile.Params).Host := EditHost.Text;
     102    TDbConnectParamsMysql(ConnectProfile.Params).Port := SpinEditPort.Value;
     103  end;
    63104end;
    64105
     
    68109begin
    69110  ComboBox1.Items.Clear;
    70   for I := 0 to Core.Engines.Count - 1 do
    71     ComboBox1.Items.AddObject(TDatabaseEngine(Core.Engines[I]).Name, Core.Engines[I]);
     111  for I := 0 to Core.DbManager.ClientTypes.Count - 1 do
     112    ComboBox1.Items.AddObject(TDbClientType(Core.DbManager.ClientTypes[I]).Name,
     113      Core.DbManager.ClientTypes[I]);
     114end;
     115
     116procedure TFormConnect.UpdateInterface;
     117begin
     118  PageControl1.TabIndex := ComboBox1.ItemIndex;
    72119end;
    73120
  • trunk/Forms/UFormDatabases.lfm

    r11 r20  
    44  Top = 429
    55  Width = 908
    6   Caption = 'Databases'
     6  Caption = 'Connection profiles'
    77  ClientHeight = 515
    88  ClientWidth = 908
     9  DesignTimePPI = 120
    910  OnShow = FormShow
    1011  Position = poMainFormCenter
    11   LCLVersion = '1.5'
     12  LCLVersion = '1.8.0.6'
    1213  object ListView1: TListView
    1314    Left = 4
     
    7980    object MenuItem1: TMenuItem
    8081      Action = AAdd
    81       Bitmap.Data = {
    82         36100000424D3610000000000000360000002800000020000000200000000100
    83         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    84         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    85         FF00DBDBDBFF949494FF707070FF707070FF707070FF707070FF707070FF7070
    86         70FF707070FF707070FF707070FF949494FFDBDBDBFFFFFFFF00FFFFFF00FFFF
    87         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    88         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    89         FF00005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    90         04FF005104FF005104FF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    91         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    92         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    93         FF00005104FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    94         7FFF76D07FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    95         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    96         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    97         FF00005104FF76D07FFF09A514FF089F12FF069710FF06920EFF06920EFF0694
    98         0FFF079910FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    99         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    100         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    101         FF00005104FF76D07FFF09A514FF089F12FF079910FF06940FFF06920EFF0692
    102         0EFF06940FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    103         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    104         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    105         FF00005104FF76D07FFF09A514FF09A514FF089F12FF079910FF06940FFF0692
    106         0EFF06920EFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    107         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    108         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    109         FF00005104FF76D07FFF09A715FF09A514FF09A514FF089F12FF079910FF0694
    110         0FFF06920EFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    111         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    112         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    113         FF00005104FF76D07FFF09A715FF09A514FF09A514FF09A514FF089F12FF0799
    114         10FF06940FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    115         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    116         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    117         FF00005104FF76D07FFF09A715FF09A715FF09A514FF09A514FF09A514FF089F
    118         12FF079910FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    119         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F3F3FFDBDB
    120         DBFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF
    121         CFFF005104FF76D07FFF09A715FF09A715FF09A715FF09A514FF09A514FF09A5
    122         14FF089F12FF76D07FFF005104FF646464FFABABABFFCFCFCFFFCFCFCFFFCFCF
    123         CFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFDBDBDBFFDBDBDBFF9494
    124         94FF707070FF707070FF707070FF707070FF707070FF707070FF707070FF7070
    125         70FF005104FF76D07FFF09A715FF09A715FF09A715FF09A715FF09A715FF09A5
    126         14FF09A514FF76D07FFF005104FF4C4C4CFF646464FF707070FF707070FF7070
    127         70FF707070FF707070FF707070FF707070FF707070FF949494FF005104FF0051
    128         04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    129         04FF005104FF76D07FFF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    130         15FF09A514FF76D07FFF005104FF005104FF005104FF005104FF005104FF0051
    131         04FF005104FF005104FF005104FF005104FF005104FF707070FF005104FF76D0
    132         7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    133         7FFF76D07FFF76D07FFF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    134         15FF09A715FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    135         7FFF76D07FFF76D07FFF76D07FFF76D07FFF005104FF707070FF005104FF76D0
    136         7FFF74CD7BFF6FCC76FF6ACA72FF66C86DFF4ABE52FF25B130FF09A715FF09A7
    137         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    138         15FF09A715FF09A514FF09A514FF09A514FF089F12FF079910FF06940FFF0692
    139         0EFF06920EFF06940FFF069710FF76D07FFF005104FF707070FF005104FF76D0
    140         7FFF79CF7FFF74CD7BFF6FCC76FF6ACA72FF6ACA72FF50C159FF25B130FF09A7
    141         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    142         15FF09A715FF09A715FF09A715FF09A514FF09A514FF089F12FF079910FF0694
    143         0FFF06940FFF06920EFF06940FFF76D07FFF005104FF707070FF005104FF76D0
    144         7FFF7ED184FF79CF7FFF74CD7BFF6FCC76FF6FCC76FF6ACA72FF5AC462FF32B5
    145         3CFF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    146         15FF09A715FF09A715FF09A715FF09A715FF09A514FF09A514FF089F12FF0799
    147         10FF069710FF06940FFF06920EFF76D07FFF005104FF707070FF005104FF76D0
    148         7FFF84D38AFF7ED184FF79CF7FFF74CD7BFF74CD7BFF6FCC76FF6ACA72FF66C8
    149         6DFF41BB4AFF25B130FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    150         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A514FF089F
    151         12FF089F12FF069710FF06940FFF76D07FFF005104FF707070FF005104FF76D0
    152         7FFF84D38AFF84D38AFF7ED184FF79CF7FFF79CF7FFF74CD7BFF6FCC76FF6ACA
    153         72FF6ACA72FF50C159FF32B53CFF09A715FF09A715FF09A715FF09A715FF09A7
    154         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A5
    155         14FF089F12FF089F12FF069710FF76D07FFF005104FF707070FF005104FF76D0
    156         7FFF8CD692FF84D38AFF84D38AFF7ED184FF7ED184FF79CF7FFF74CD7BFF6FCC
    157         76FF6FCC76FF6ACA72FF66C86DFF4ABE52FF25B130FF09A715FF09A715FF09A7
    158         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A5
    159         14FF09A514FF089F12FF089F12FF76D07FFF005104FF707070FF005104FF76D0
    160         7FFF90D795FF8CD692FF84D38AFF84D38AFF84D38AFF7ED184FF79CF7FFF74CD
    161         7BFF74CD7BFF6FCC76FF6ACA72FF66C86DFF66C86DFF41BB4AFF25B130FF09A7
    162         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    163         15FF09A514FF09A514FF089F12FF76D07FFF005104FF707070FF005104FF76D0
    164         7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    165         7FFF76D07FFF76D07FFF6FCC76FF6ACA72FF6ACA72FF66C86DFF66C86DFF41BB
    166         4AFF25B130FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    167         7FFF76D07FFF76D07FFF76D07FFF76D07FFF005104FF949494FF005104FF0051
    168         04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    169         04FF005104FF76D07FFF74CD7BFF6FCC76FF6FCC76FF6ACA72FF66C86DFF66C8
    170         6DFF5AC462FF76D07FFF005104FF005104FF005104FF005104FF005104FF0051
    171         04FF005104FF005104FF005104FF005104FF005104FFDBDBDBFFFFFFFF00FFFF
    172         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    173         FF00005104FF76D07FFF79CF7FFF74CD7BFF74CD7BFF6FCC76FF6ACA72FF66C8
    174         6DFF66C86DFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    175         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    176         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    177         FF00005104FF76D07FFF7ED184FF79CF7FFF79CF7FFF74CD7BFF6FCC76FF6ACA
    178         72FF6ACA72FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    179         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    180         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    181         FF00005104FF76D07FFF84D38AFF7ED184FF7ED184FF79CF7FFF74CD7BFF6FCC
    182         76FF6FCC76FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    183         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    184         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    185         FF00005104FF76D07FFF84D38AFF84D38AFF84D38AFF7ED184FF79CF7FFF74CD
    186         7BFF74CD7BFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    187         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    188         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    189         FF00005104FF76D07FFF8CD692FF8CD692FF84D38AFF84D38AFF7ED184FF79CF
    190         7FFF79CF7FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    191         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    192         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    193         FF00005104FF76D07FFF90D795FF8CD692FF8CD692FF84D38AFF84D38AFF7ED1
    194         84FF7ED184FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    195         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    196         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    197         FF00005104FF76D07FFF9BDBA0FF90D795FF90D795FF8CD692FF84D38AFF84D3
    198         8AFF7ED184FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    199         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    200         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    201         FF00005104FF76D07FFF9BDBA0FF9BDBA0FF90D795FF90D795FF8CD692FF8CD6
    202         92FF84D38AFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    203         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    204         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    205         FF00005104FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    206         7FFF76D07FFF76D07FFF005104FF949494FFDBDBDBFFFFFFFF00FFFFFF00FFFF
    207         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    208         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    209         FF00005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    210         04FF005104FF005104FF005104FFDBDBDBFFF3F3F3FFFFFFFF00FFFFFF00FFFF
    211         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    212       }
    21382    end
    21483    object MenuItem2: TMenuItem
    21584      Action = AModify
    216       Bitmap.Data = {
    217         36100000424D3610000000000000360000002800000020000000200000000100
    218         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    219         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    220         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    221         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    222         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    223         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    224         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    225         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    226         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    227         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    228         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    229         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    230         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    231         FF00BABABAFFCFCFCFFFF6F6F6FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    232         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    233         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    234         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    235         FF00BABABAFF415D77FF4D697FFFC0C7CCFFFFFFFF00FFFFFF00FFFFFF00FFFF
    236         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    237         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    238         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    239         FF00D8D8D8FF415D77FF597EAEFF5492E5FF69AAEDFFA3CEF5FFFFFFFF00FFFF
    240         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    241         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    242         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    243         FF00F6F6F6FF8EAAC2FF9BC1F3FFA8CAF6FF649CE8FF5492E5FF5094E6FF69AA
    244         EDFFC8E0F8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    245         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    246         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    247         FF00FFFFFF00ECF5FDFF81B0EEFFC8E0F8FFBDD8FAFF81B0EEFF5492E5FF5492
    248         E5FF5094E6FF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    249         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    250         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    251         FF00FFFFFF00FFFFFF00649CE8FFBDD8FAFFD6E8FEFFC8E0F8FF9BC1F3FF5094
    252         E6FF209BEDFF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    253         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    254         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    255         FF00FFFFFF00FFFFFF007CB3EEFF9BC1F3FFD6E8FEFFD6E8FEFFC8E0F8FF71C9
    256         FAFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    257         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    258         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    259         FF00FFFFFF00FFFFFF00A3CEF5FF77A9ECFFC8E0F8FFD6E8FEFFBFE4FEFF5BD5
    260         FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFF
    261         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    262         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    263         FF00FFFFFF00FFFFFF00E0EFFCFF5492E5FFBDD8FAFFC8E0F8FFA9E6FFFF79E1
    264         FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFF
    265         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    266         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    267         FF00FFFFFF00FFFFFF00FFFFFF00209BEDFF6DBCF4FF98DBFCFF9CE4FFFF94E4
    268         FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFF
    269         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    270         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    271         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4
    272         FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007D
    273         E7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    274         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    275         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7
    276         FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489
    277         EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    278         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    279         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9
    280         F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149C
    281         F1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    282         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    283         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209B
    284         EDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1
    285         F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    286         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    287         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    288         FF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5
    289         FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    290         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    291         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    292         FF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5
    293         FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFF
    294         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    295         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    296         FF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1
    297         FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFF
    298         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    299         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    300         FF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4
    301         FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFF
    302         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    303         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    304         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4
    305         FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF611CDDFF5400
    306         D5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    307         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    308         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7
    309         FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF8163F0FF7547E9FF611C
    310         DDFF5400D5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    311         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    312         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9
    313         F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF9185F9FF8A75F5FF8163F0FF7547
    314         E9FF611CDDFF5400D5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    315         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    316         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209B
    317         EDFF55B9F4FF87D7FBFF9CE4FFFF9998FFFF9691FDFF9185F9FF8A75F5FF8163
    318         F0FF7547E9FF611CDDFFD4BFF4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    319         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    320         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    321         FF00209BEDFF55B9F4FF948CFBFF9998FFFF9998FFFF9691FDFF9185F9FF8A75
    322         F5FF8163F0FF7547E9FFD7C6F6FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    323         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    324         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    325         FF00FFFFFF007950EBFF8A75F5FF948CFBFF9998FFFF9998FFFF9691FDFF9185
    326         F9FF8A75F5FF8163F0FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    327         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    328         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    329         FF00FFFFFF00FFFFFF007950EBFF8A75F5FF948CFBFF9998FFFF9998FFFF9691
    330         FDFF9185F9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    331         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    332         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    333         FF00FFFFFF00FFFFFF00FFFFFF007950EBFF8A75F5FF948CFBFF9998FFFF9998
    334         FFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    335         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    336         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    337         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007950EBFF8A75F5FF948CFBFFFFFF
    338         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    339         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    340         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    341         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    342         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    343         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    344         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    345         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    346         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    347       }
    34885    end
    34986    object MenuItem3: TMenuItem
    35087      Action = ARemove
    351       Bitmap.Data = {
    352         36100000424D3610000000000000360000002800000020000000200000000100
    353         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    354         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    355         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    356         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    357         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    358         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    359         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    360         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    361         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    362         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    363         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    364         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    365         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    366         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    367         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    368         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    369         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    370         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    371         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    372         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    373         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    374         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    375         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    376         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    377         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    378         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    379         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    380         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    381         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    382         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    383         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    384         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    385         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    386         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    387         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    388         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    389         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    390         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    391         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    392         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    393         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    394         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    395         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    396         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    397         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00463C
    398         8BFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    399         6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    400         6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    401         6AFF342C6AFF342C6AFF342C6AFF342C6AFF463C8BFFFFFFFF00FFFFFF003C34
    402         77FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    403         B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    404         B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    405         B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF3C3477FFFFFFFF00FFFFFF00433B
    406         84FF5D51C1FF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    407         ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    408         ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    409         ABFF2716ABFF2716ABFF2716ABFF5D51C1FF433B84FFFFFFFF00FFFFFF004B42
    410         92FF6052CCFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    411         BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    412         BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    413         BAFF2A18BAFF2A18BAFF2A18BAFF6052CCFF4B4292FFFFFFFF00FFFFFF00544A
    414         A0FF6455D6FF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    415         CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    416         CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    417         CBFF3623CBFF3623CBFF3623CBFF6455D6FF544AA0FFFFFFFF00FFFFFF005D51
    418         AFFF6C5DE3FF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    419         DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    420         DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    421         DEFF503EDEFF503EDEFF4937DCFF6C5DE3FF5D51AFFFFFFFFF00FFFFFF006357
    422         B8FF7364EAFF6251E7FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    423         E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    424         E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    425         E8FF6757E8FF6757E8FF5C4AE6FF7364EAFF6357B8FFFFFFFF00FFFFFF006357
    426         B8FF7869EAFF7364EAFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    427         EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    428         EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    429         EBFF7D6FEBFF7869EAFF6757E8FF7869EAFF6357B8FFFFFFFF00FFFFFF006357
    430         B8FF7D6FEBFF8174ECFF8D81EEFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    431         EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    432         EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    433         EFFF9387EFFF8D81EEFF7869EAFF7869EAFF6357B8FFFFFFFF00FFFFFF006E62
    434         C3FF7A6CE3FF897EE6FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    435         E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    436         E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    437         E7FF9186E7FF897EE6FF867AE6FF7A6CE3FF6E62C3FFFFFFFF00FFFFFF007468
    438         CEFF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    439         C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    440         C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    441         C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF7468CEFFFFFFFF00FFFFFF00FFFF
    442         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    443         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    444         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    445         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    446         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    447         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    448         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    449         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    450         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    451         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    452         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    453         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    454         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    455         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    456         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    457         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    458         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    459         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    460         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    461         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    462         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    463         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    464         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    465         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    466         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    467         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    468         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    469         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    470         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    471         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    472         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    473         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    474         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    475         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    476         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    477         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    478         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    479         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    480         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    481         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    482       }
    48388    end
    48489    object MenuItem4: TMenuItem
    48590      Action = AOpen
    48691      Default = True
    487       Bitmap.Data = {
    488         36100000424D3610000000000000360000002800000020000000200000000100
    489         2000000000000010000064000000640000000000000000000000000000000000
    490         0000000000000000000000000000000000000000000000000000000000000000
    491         000000000000000000040000000D0000000F0000000600000000000000000000
    492         0000000000000000000000000000000000000000000000000000000000000000
    493         0000000000000000000000000000000000000000000000000000000000000000
    494         0000000000000000000000000000000000000000000000000000000000000000
    495         0000000000000000000D0000002B000000340000002200000016000000110000
    496         0006000000000000000000000000000000000000000000000000000000000000
    497         0000000000000000000000000000000000000000000000000000000000000000
    498         00000000000000000001000000050000000B0000001100000014000000160000
    499         00160000001600000025ABA8A7C6868481FF0000004800000043000000370000
    500         0022000000160000001600000016000000160000001600000016000000110000
    501         0006000000000000000000000000000000000000000000000000000000000000
    502         00030000000B00000016000000200000002D000000370000003E000000410000
    503         004300000043000000488F8C8BFFD7D5D4FF878682FF84837FFF7F7D7DFF0000
    504         0048000000430000004300000043000000430000004300000043000000370000
    505         001C000000060000000000000000000000000000000000000000000000040000
    506         00130000002B0000003E4745406D737068A78B877DDF8E8980EA948F85FF938E
    507         84FF928E83FF928D83FF938E83FF8F8C8AFF8A8785FFB7B6B4FFA6A5A6FF777C
    508         84FFBB8440FFB78344FFB68345FFB68345FFB68345FFB68345FFB88445FF0000
    509         003D0000002200000011000000060000000000000000000000000000000D0000
    510         002E78736BA8979187FFA19B91FFB1AAA1FFC5BCB4FFCBC3BAFFE3D8D0FFE5DC
    511         D4FFEADFD7FFEEE3DCFFF7EAE3FF8E8D8BFFD6D4D4FFC1C2C4FFB0B5BBFFB97F
    512         39FFEFB35DFFECB25FFFECB25FFFECB25FFFECB25FFFECB25FFFEEB460FFB682
    513         44FF00000048000000370000001C000000060000000000000000000000158884
    514         7BC1A09B91FFC8C1B7FFD2CAC1FFD3CBC2FFD7CEC5FFD9D0C8FFDDD3CBFFDFD6
    515         CEFFE3D9D1FFE7DDD6FFF0E4DDFF8C8C8AFFE3E4E6FFD0D4DDFFB57A34FFEFB5
    516         62FFEBB363FFEAB263FFEAB263FFEAB263FFEAB263FFEAB263FFECB465FFF1B8
    517         68FFB58244FFB88445FF00000037000000110000000000000000000000169994
    518         89FFC8C1B7FFCBC4BAFFCEC6BDFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5
    519         CDFFE2D8D0FFE5DBD4FFECE1DAFFF3E8E3FF8C9196FFB47A33FFF2B766FFEEB6
    520         68FFECB468FFECB468FFECB468FFECB468FFECB468FFEEB668FFF1BB72FFB07D
    521         40FFECB15DFFEEB15BFFB88546FF000000110000000000000000000000169993
    522         89FFCAC2B9FFCAC3B9FFCDC5BCFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5
    523         CDFFE2D8D0FFE5DBD4FFEAE0D9FFEFE7E5FFB37830FFF6BC6EFFF0B96FFFEEB7
    524         6EFFEEB76EFFEEB76EFFEEB76EFFEEB76EFFF0B86EFFF5C380FFAE7B3EFFF2B9
    525         6EFFECB360FFD09645E4B98545FF000000060000000000000000000000169A94
    526         8AFFC9C1B8FFC9C2B8FFCCC4BBFFCEC6BDFFD2C9C0FFD5CCC4FFD9CFC7FFDCD3
    527         CBFFE1D6CEFFE4D9D2FFE9DED9FFEEE7E6FFB17832FFF6C27BFFF1BC73FFF0BB
    528         73FFF0BB73FFF0BB73FFF0BB73FFF2BC73FFF7CB8EFFAD7A3BFFF4BD72FFEFB6
    529         67FFCF994DE1BB8441FF00000022000000060000000000000000000000169A95
    530         89FFC8C0B7FFC7C0B6FFD4CDC4FFE4DDD6FFF2EDE5FFF6F1EAFFFFFCF5FFFFFB
    531         F4FFFFFBF4FFFEFAF3FFFEFBF5FFFFFFFFFFB07731FFFAC888FFF4BE79FFF3BE
    532         79FFF3BE79FFF3BE79FFF5BF79FFFBD19CFFAD7939FFF7C078FFF3BA6DFFD29E
    533         57DFBB813AFF6D7580FF0000003D0000001C0000000600000000000000149A95
    534         8AFFD3CCC3FFF6F1EAFFEFE9E3FFDAD5CDFFCAC2BAFFBCB3ABFFB4ABA1FFB4AA
    535         A1FFB6ACA2FFB8AEA6FFBBB1A8FFBEB6B4FFB17832FFFCCF96FFF6C17DFFF5C1
    536         7EFFF5C17DFFF7C27DFFFDD8A9FFAC7737FFF9C37EFFF4BD72FFDCAF74FFB97F
    537         37FFABB0B6FF9E9D9EFF757678FF0000003D0000001C00000006000000109B95
    538         8BFFF2ECE4FFB8AFA6FFA59C91FFABA298FFBBB2A9FFC5BAB1FFD1C8BFFFD5CB
    539         C2FFE5DBD3FFE8DED7FFEDE3DDFFF0EAE8FFB07730FFFED6A2FFF8C481FFF7C4
    540         82FFF9C582FFFFDFB5FFAC7635FFFBC885FFF7C079FFEFC48DFFBA7F37FF7F86
    541         8FFFC3C3C4FFAFAEACFFA09D9BFF767676FF0000003700000011000000108D87
    542         7DB5B5ACA4FFB5ADA2FFC9C1B8FFD3CBC2FFD6CDC4FFD9D0C8FFDDD3CBFFDFD6
    543         CEFFE3D9D1FFE6DCD5FFEBE0DAFFEFE7E6FFB0762EFFFFDCAEFFFCC887FFFCC9
    544         88FFFFE5C0FFAB7533FFFECB8BFFFBC580FFEBC390FFB77C35FF888883AD0000
    545         0015858586FFC4C2C0FFB0AEABFFA29E9CFF787878FF00000011000000148B86
    546         7CB8B7AFA4FFCBC5BAFFCEC6BDFFD1C9C0FFD4CBC2FFD7CEC6FFDBD1C9FFDED5
    547         CDFFE2D8D0FFE5DBD4FFEADFD9FFEDE5E3FFAF7329FFFFE3BAFFFFCD8FFFFFE9
    548         CBFFAA7431FFFFCF90FFFDC886FFF2CC9DFFB87C34FFBEBBB9FF8B877FB60000
    549         001400000006858686FFC6C3C1FFB4B2B0FF777778FF0000000600000016A099
    550         8FFFCAC2B9FFCAC3B9FFCDC5BCFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5
    551         CDFFE2D8D0FFE5DBD4FFE9DED8FFECE2DDFFE9E3E3FFAD7229FFFFECC8FFAB74
    552         31FFFFD296FFFFCC8CFFF6D4A8FFB87C33FF686F78FFD3CCC4FFA39C92FF0000
    553         00160000000000000006888888FF8A8A8AFF000000060000000000000016A09A
    554         8EFFC9C1B8FFC9C2B8FFCCC4BBFFCEC6BDFFD2C9C0FFD5CCC4FFD9CFC7FFDCD3
    555         CBFFE1D6CEFFE4D9D2FFE9DDD6FFEADFD8FFE6DEDAFFE5E1E0FFAF762EFFFFD6
    556         99FFFFD093FFFBDAB3FFB77A31FFAAAEB3FF9C9B9CFF6E7073FFA8A094FF0000
    557         002200000006000000000000000000000000000000000000000000000016A09A
    558         8FFFC8C0B7FFC7C0B6FFD4CDC4FFE4DDD6FFF2EDE5FFF6F1EAFFFFFCF5FFFFFB
    559         F4FFFFFBF4FFFEFAF3FFFDFAF3FFFDFAF3FFFFFBF5FFFFFFFFFFB1752BFFFFEE
    560         CCFFFFEAC7FFB4782EFF737B83FFC1C1C2FFAFADABFF9F9B9AFF737375FF0000
    561         003700000011000000000000000000000000000000000000000000000014A09A
    562         8EFFD3CBC3FFF6F1EAFFEFE9E3FFDAD5CDFFCAC2BAFFBCB3ABFFB4ABA1FFB4AA
    563         A1FFB6ACA3FFB8AEA6FFBAB0A6FFBBB0A8FFB9AEA6FFB8AEA8FFB8B2AFFFB377
    564         2CFFB3772CFFCECCC9FFE4DFD9FF78797BFFC2C1BFFFAFADABFFA19E9CFF7777
    565         78FF00000011000000000000000000000000000000000000000000000010A29A
    566         8FFFF1EBE4FFB7AFA6FFA59C91FFABA298FFBBB2A9FFC5BAB1FFD1C8BFFFD5CB
    567         C2FFE1D7CFFFE8DED7FFECE1DAFFEEE2DBFFE9DFD8FFE6DDD5FFD9D1CBFFD2CD
    568         C7FFCFC8C4FFBFB7B0FFB8AEA5FFB3A99FFF787A7BFFC4C2C0FFB4B2AFFF7777
    569         77FF00000006000000000000000000000000000000000000000000000010928C
    570         82B5B4ACA3FFB5ADA2FFC9C1B8FFD3CBC2FFD6CDC4FFD9D0C8FFDDD3CBFFDFD6
    571         CFFFE3D9D1FFE6DCD5FFEADFD8FFECE0D9FFE7DDD6FFE4DAD2FFE0D7D0FFDDD4
    572         CCFFDAD1CAFFD7CEC5FFD3CCC2FFD3CBC1FFC6BDB3FF7A7B7DFF7F8081FF0000
    573         001200000000000000000000000000000000000000000000000000000014918B
    574         80B8B6AEA4FFCBC4BAFFCEC6BDFFD1C9C0FFD4CBC2FFD7CEC6FFDBD1C9FFDED5
    575         CDFFE2D8D0FFE5DBD4FFE9DED7FFEBDFD8FFE6DCD5FFE3D9D1FFDFD6CEFFDCD2
    576         CAFFD8CFC7FFD5CCC3FFD1C9C0FFCFC7BEFFCDC5BCFFBFB7ADFF928C80B40000
    577         001400000000000000000000000000000000000000000000000000000016A59E
    578         93FFC9C1B9FFCAC3B9FFCDC5BCFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5
    579         CDFFE2D8D0FFE5DBD4FFE9DED7FFEADFD8FFE6DCD5FFE3D9D1FFDFD6CEFFDCD2
    580         CAFFD8CFC7FFD5CCC3FFD1C9C0FFCEC6BDFFCBC3BAFFCBC3BAFFA69F93FF0000
    581         001600000000000000000000000000000000000000000000000000000016A69F
    582         94FFC8C0B8FFC9C2B8FFCCC3BAFFCEC6BDFFD2C8BFFFD5CBC3FFD9CEC6FFDCD2
    583         CAFFE0D6CEFFE3D9D2FFE8DDD6FFEADED7FFE5DAD3FFE1D7CFFFDDD4CCFFDACF
    584         C7FFD6CCC4FFD3C9C0FFCFC7BEFFCDC4BBFFCAC2B9FFCAC1B9FFA69F94FF0000
    585         001600000000000000000000000000000000000000000000000000000016A7A0
    586         93FFC7BEB6FFC6BFB4FFD2CBC2FFE2DBD3FFF0EAE2FFF3EEE7FFFDFAF3FFFDF9
    587         F2FFFDF8F2FFFCF8F1FFFCF8F1FFFCF8F1FFFCF8F1FFFDF8F2FFFDF9F2FFFDF9
    588         F3FFF3EEE7FFEFEAE2FFE2DCD3FFD3CCC3FFC7BFB6FFC8BFB7FFA7A093FF0000
    589         001600000000000000000000000000000000000000000000000000000016A69F
    590         93FFCFC8BFFFF8F4ECFFFFFAF4FFF8F2EBFFE9E2DAFFE3DAD3FFD7CFC6FFD4CB
    591         C2FFD4CBC2FFD4CBC2FFD4CBC2FFD4CBC2FFD4CBC2FFD4CBC2FFD4CBC2FFD7CF
    592         C6FFE3DAD3FFE9E2DAFFF8F2EBFFFFFAF4FFF4F0E8FFCFC8BFFFA69F93FF0000
    593         001600000000000000000000000000000000000000000000000000000016A69E
    594         93FFFFFCF5FFEAE3DBFFD3C9C0FFCDC3B9FFCEC5BAFFCEC5BBFFCFC6BBFFCFC6
    595         BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6
    596         BBFFCEC5BBFFCEC5BAFFCDC3B9FFD3C9C0FFEAE3DBFFFFFCF5FFABA499FF0000
    597         001600000000000000000000000000000000000000000000000000000015A69F
    598         93FFECE5DDFFD5CCC2FFD5CCC2FFD6CDC3FFD7CEC3FFD7CEC4FFD7CEC4FFD7CE
    599         C4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CE
    600         C4FFD7CEC4FFD7CEC3FFD6CDC3FFD5CCC2FFD5CCC2FFECE5DDFFA69F93FF0000
    601         00150000000000000000000000000000000000000000000000000000000DA9A2
    602         96FFE0D6CDFFE0D6CCFFDED5CBFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4
    603         CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4
    604         CAFFDDD4CAFFDDD4CAFFDDD4CAFFDED5CBFFDFD6CCFFE0D6CDFFA9A296FF0000
    605         000D00000000000000000000000000000000000000000000000000000004A69E
    606         93B2B5ADA1FFDED5CBFFE9E1D7FFE7DFD5FFE6DED4FFE5DDD3FFE5DDD3FFE4DC
    607         D2FFE4DCD2FFE4DCD2FFE4DCD2FFE4DCD2FFE4DCD2FFE4DCD2FFE4DCD2FFE5DD
    608         D3FFE5DDD3FFE6DED4FFE7DFD5FFE9E1D7FFE2DAD0FFB5ADA1FFA69E93B20000
    609         0004000000000000000000000000000000000000000000000000000000000000
    610         0003A79F9489AAA396FFB7AEA3FFC8BFB4FFD9D1C6FFDDD5CAFFF1E9DFFFF0E8
    611         DEFFF0E8DEFFF0E8DEFFF0E8DEFFF0E8DEFFF0E8DEFFF0E8DEFFF0E8DEFFF1E9
    612         DFFFDDD5CAFFD9D1C6FFC8BFB4FFB7AEA3FFAAA296FFA79F9489000000030000
    613         0000000000000000000000000000000000000000000000000000000000000000
    614         00000000000000000001A0998F37A69F9385A9A196D2A9A195E2AAA296FFAAA2
    615         96FFAAA296FFAAA296FFAAA296FFAAA296FFAAA296FFAAA296FFAAA296FFAAA2
    616         96FFA9A195E2A9A196D2A69F9385A0998F370000000100000000000000000000
    617         0000000000000000000000000000000000000000000000000000
    618       }
    61992    end
    62093  end
  • trunk/Forms/UFormDatabases.pas

    r15 r20  
    4040      Selected: Boolean);
    4141  private
    42     { private declarations }
    4342  public
    44     SelectedDatabase: TDatabase;
     43    SelectedProfile: TDbConnectProfile;
    4544    procedure ReloadList;
    4645    procedure UpdateInterface;
     
    6766begin
    6867  if Assigned(ListView1.Selected) then begin
    69     SelectedDatabase := TDatabase(ListView1.Selected.Data);
     68    SelectedProfile := TDbConnectProfile(ListView1.Selected.Data);
    7069    ModalResult := mrOk;
    7170  end;
     
    7675  if Assigned(ListView1.Selected) then begin
    7776    if MessageDlg('Remove database connection', 'Do you want to really remove database connection ' +
    78     TDatabase(ListView1.Selected.Data).Name, mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
    79       Core.Databases.Remove(ListView1.Selected.Data);
     77    TDbConnectProfile(ListView1.Selected.Data).Name, mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
     78      Core.DbManager.ConnectProfiles.Remove(ListView1.Selected.Data);
    8079      ReloadList;
    8180    end;
     
    8584procedure TFormDatabases.AAddExecute(Sender: TObject);
    8685var
    87   NewDatabase: TDatabase;
     86  NewConnectProfile: TDbConnectProfile;
    8887begin
    89   NewDatabase := TDatabase.Create;
    90   NewDatabase.Name := 'New database';
    91   FormConnect.Load(NewDatabase);
     88  NewConnectProfile := TDbConnectProfile.Create;
     89  NewConnectProfile.Name := 'New database';
     90  FormConnect.Load(NewConnectProfile);
    9291  if FormConnect.ShowModal = mrOk then begin
    93     FormConnect.Save(NewDatabase);
    94     Core.Databases.Add(NewDatabase);
     92    FormConnect.Save(NewConnectProfile);
     93    Core.DbManager.ConnectProfiles.Add(NewConnectProfile);
    9594    ReloadList;
    96   end else NewDatabase.Free;
     95  end else NewConnectProfile.Free;
    9796end;
    9897
     
    10099begin
    101100  if Assigned(ListView1.Selected) then begin
    102     FormConnect.Load(TDatabase(ListView1.Selected.Data));
     101    FormConnect.Load(TDbConnectProfile(ListView1.Selected.Data));
    103102    if FormConnect.ShowModal = mrOk then begin
    104       FormConnect.Save(TDatabase(ListView1.Selected.Data));
     103      FormConnect.Save(TDbConnectProfile(ListView1.Selected.Data));
    105104      ReloadList;
    106105    end;
     
    119118procedure TFormDatabases.ListView1Data(Sender: TObject; Item: TListItem);
    120119begin
    121   if (Item.Index >= 0) and (Item.Index < Core.Databases.Count) then
    122   with TDatabase(Core.Databases[Item.Index]) do begin
     120  if (Item.Index >= 0) and (Item.Index < Core.DbManager.ConnectProfiles.Count) then
     121  with TDbConnectProfile(Core.DbManager.ConnectProfiles[Item.Index]) do begin
    123122    Item.Caption := Name;
    124     Item.SubItems.Add(Engine.Name);
    125     Item.SubItems.Add(ConnectionString);
    126     Item.Data := Core.Databases[Item.Index];
     123    Item.SubItems.Add(ClientType.Name);
     124    Item.SubItems.Add(Params.ConnectionString);
     125    Item.Data := Core.DbManager.ConnectProfiles[Item.Index];
    127126  end
    128127end;
     
    136135procedure TFormDatabases.ReloadList;
    137136begin
    138   ListView1.Items.Count := Core.Databases.Count;
     137  ListView1.Items.Count := Core.DbManager.ConnectProfiles.Count;
    139138  ListView1.Repaint;
    140139  UpdateInterface;
  • trunk/Forms/UFormField.lfm

    r15 r20  
    77  ClientHeight = 444
    88  ClientWidth = 974
     9  DesignTimePPI = 120
    910  OnCreate = FormCreate
    1011  OnShow = FormShow
    1112  Position = poMainFormCenter
    12   LCLVersion = '1.8.0.4'
     13  LCLVersion = '1.8.0.6'
    1314  object EditName: TEdit
    1415    Left = 168
    15     Height = 36
     16    Height = 28
    1617    Top = 11
    1718    Width = 264
     
    2021  object Label1: TLabel
    2122    Left = 17
    22     Height = 26
     23    Height = 20
    2324    Top = 21
    24     Width = 56
     25    Width = 43
    2526    Caption = 'Name:'
    2627    ParentColor = False
     
    3839  object EditTextBefore: TEdit
    3940    Left = 167
    40     Height = 36
     41    Height = 28
    4142    Top = 88
    4243    Width = 265
     
    4546  object Label2: TLabel
    4647    Left = 16
    47     Height = 26
     48    Height = 20
    4849    Top = 98
    49     Width = 101
     50    Width = 79
    5051    Caption = 'Text before:'
    5152    ParentColor = False
     
    5354  object EditTextAfter: TEdit
    5455    Left = 167
    55     Height = 36
     56    Height = 28
    5657    Top = 136
    5758    Width = 265
     
    6061  object Label3: TLabel
    6162    Left = 16
    62     Height = 26
     63    Height = 20
    6364    Top = 144
    64     Width = 86
     65    Width = 66
    6566    Caption = 'Text after:'
    6667    ParentColor = False
     
    6869  object Label4: TLabel
    6970    Left = 17
    70     Height = 26
     71    Height = 20
    7172    Top = 56
    72     Width = 87
     73    Width = 68
    7374    Caption = 'Data type:'
    7475    ParentColor = False
     
    7677  object ComboBoxType: TComboBox
    7778    Left = 167
    78     Height = 40
     79    Height = 28
    7980    Top = 48
    8081    Width = 265
    81     ItemHeight = 0
     82    ItemHeight = 20
    8283    OnChange = ComboBoxTypeChange
    8384    Style = csDropDownList
  • trunk/Forms/UFormField.pas

    r15 r20  
    8888    else SelectedItem := nil;
    8989
    90   with Field.Table.Database.Engine.DataTypes do begin
     90  with Field.Table.DbClient.ConnectProfile.ClientType.DataTypes do begin
    9191    while ComboBoxType.Items.Count > Count do
    9292      ComboBoxType.Items.Delete(ComboBoxType.Items.Count - 1);
  • trunk/Forms/UFormFields.pas

    r15 r20  
    8686  NewField.Table := Fields.Table;
    8787  NewField.Name := SNewField;
    88   if Fields.Table.Database.Engine.DataTypes.Count > 0 then
    89     NewField.DataType := TDataType(Fields.Table.Database.Engine.DataTypes[0]);
     88  if Fields.Table.DbClient.ConnectProfile.ClientType.DataTypes.Count > 0 then
     89    NewField.DataType := TDataType(Fields.Table.DbClient.ConnectProfile.ClientType.DataTypes[0]);
    9090  FormField.Load(NewField);
    9191  if FormField.ShowModal = mrOk then begin
  • trunk/Forms/UFormMain.pas

    r19 r20  
    7777begin
    7878  NewCaption := Application.Title;
    79   if Assigned(Core.Database) then NewCaption := Core.Database.Name + ' - ' + NewCaption;
     79  if Assigned(Core.DbClient) then
     80    NewCaption := Core.DbClient.ConnectProfile.Name + ' - ' + NewCaption;
    8081  FormMain.Caption := NewCaption;
    8182end;
  • trunk/Forms/UFormTables.lfm

    r11 r20  
    11object FormTables: TFormTables
    2   Left = 659
     2  Left = 731
    33  Height = 660
    4   Top = 342
     4  Top = 117
    55  Width = 978
    66  Caption = 'Tables'
    77  ClientHeight = 660
    88  ClientWidth = 978
     9  DesignTimePPI = 120
    910  OnActivate = FormActivate
    1011  OnClose = FormClose
    1112  OnShow = FormShow
    12   LCLVersion = '1.5'
     13  LCLVersion = '1.8.0.6'
    1314  object ListView1: TListView
    1415    Left = 4
     
    112113      Action = AShowRecords
    113114      Default = True
    114       Bitmap.Data = {
    115         36100000424D3610000000000000360000002800000020000000200000000100
    116         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    117         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFDFDFDFFFDFD
    118         FDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFD
    119         FDFFFDFDFDFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    120         FF00FFFFFF00FDFDFDFFFDFDFDFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00FFFF
    121         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFA
    122         FAFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    123         FEFFFAFAFAFFFAFAFAFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    124         FF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFAFAFAFFFFFFFF00FFFFFF00FDFD
    125         FDFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFA
    126         FAFFF5F5F5FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    127         FF00FEFEFEFFFAFAFAFFF5F5F5FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFF
    128         FF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFDFDFDFFFFFFFF00FDFD
    129         FDFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    130         FEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    131         FF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFF
    132         FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFDFDFDFFFFFFFF00FDFD
    133         FDFFFAFAFAFFE2D4C6FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CB
    134         B4FFE2CBB4FFD9C4AEFFD9C4AEFFD9C4AEFFE2CBB4FFE2CBB4FFE2CBB4FFE2CB
    135         B4FFE2CBB4FFE2CBB4FFE2CBB4FFD9C4AEFFD9C4AEFFD9C4AEFFE2CBB4FFE2CB
    136         B4FFE2CBB4FFE2CBB4FFEBDCCDFFFFFFFF00FEFEFEFFFDFDFDFFFFFFFF00FFFF
    137         FF00FAFAFAFFC0966CFFDECBBBFFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFE7D3
    138         C1FFE7D3C1FFCCA37DFFD4BBA2FFDECBBBFFDECBBBFFE7D3C1FFE7D3C1FFE7D3
    139         C1FFE7D3C1FFD8B99CFFCCA37DFFE7D3C1FFDECBBBFFDECBBBFFDECBBBFFE7D3
    140         C1FFE7D3C1FFE7D3C1FFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    141         FF00FEFEFEFFC19973FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFF
    142         FF00FFFFFF00D8B99CFFF0E5DAFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFF
    143         FF00FFFFFF00EBDCCDFFD8B99CFFFFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5
    144         F5FFFEFEFEFFFFFFFF00C89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    145         FF00FFFFFF00C89E76FFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFF
    146         FF00FFFFFF00D8B99CFFF0E5DAFFFEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFE
    147         FEFFFFFFFF00EBDCCDFFD8B99CFFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4
    148         F4FFF5F5F5FFFEFEFEFFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    149         FF00FFFFFF00C6986EFFC89E76FFC19973FFC19973FFC19973FFC89E76FFC89E
    150         76FFC89E76FFBD8856FFC4966AFFC89E76FFC89E76FFC19973FFC19973FFC199
    151         73FFC89E76FFC29367FFBD8856FFC89E76FFC89E76FFC89E76FFC89E76FFC199
    152         73FFC19973FFC19973FFC6986EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    153         FF00FFFFFF00C89E76FFFFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFE
    154         FEFFFFFFFF00D8B99CFFF0E5DAFFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4
    155         F4FFF5F5F5FFEBDCCDFFD8B99CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    156         FEFFF5F5F5FFF4F4F4FFC19973FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    157         FF00FFFFFF00C89E76FFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5
    158         F5FFFEFEFEFFD8B99CFFF0E5DAFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5
    159         F5FFF4F4F4FFE2D4C6FFD8B99CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    160         FF00FEFEFEFFF5F5F5FFC19973FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFF
    161         FF00FFFFFF00C89E76FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFF1EDEAFFF1ED
    162         EAFFF1EDEAFFD4B494FFEBDCCDFFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6
    163         F3FFF1EDEAFFDECBBBFFD0B297FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6
    164         F3FFFAF6F3FFFAF6F3FFC19973FFF5F5F5FFFAFAFAFFFFFFFF00FFFFFF00FDFD
    165         FDFFFEFEFEFFC0966CFFCDA883FFCDA883FFCDA883FFCDA883FFCDA883FFC5A2
    166         80FFC5A280FFB88A5CFFC89E76FFCDA883FFCDA883FFCDA883FFCDA883FFCDA8
    167         83FFCDA883FFC0966CFFB88A5CFFC5A280FFCDA883FFCDA883FFCDA883FFCDA8
    168         83FFCDA883FFCDA883FFC0966CFFFAFAFAFFFAFAFAFFFDFDFDFFFFFFFF00FDFD
    169         FDFFFAFAFAFFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    170         FEFFF5F5F5FFD0B297FFE6DBD1FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    171         FF00FFFFFF00EBDCCDFFD0B297FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFF
    172         FF00FFFFFF00FFFFFF00C89E76FFFEFEFEFFFAFAFAFFFDFDFDFFFFFFFF00FDFD
    173         FDFFFAFAFAFFC19973FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    174         FF00FEFEFEFFD0B297FFE6DBD1FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFF
    175         FF00FFFFFF00EBDCCDFFD8B99CFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFF
    176         FF00FFFFFF00FFFFFF00C89E76FFFFFFFF00FEFEFEFFFDFDFDFFFFFFFF00FFFF
    177         FF00FAFAFAFFC19973FFD9C4AEFFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CB
    178         B4FFE2CBB4FFC89E76FFD0B297FFD9C4AEFFD9C4AEFFE2CBB4FFE2CBB4FFE2CB
    179         B4FFE2CBB4FFD4B494FFC89E76FFE2CBB4FFD9C4AEFFD9C4AEFFD9C4AEFFE2CB
    180         B4FFE2CBB4FFE2CBB4FFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    181         FF00FEFEFEFFC0966CFFDECBBBFFDECBBBFFE7D3C1FFE7D3C1FFE7D3C1FFE7D3
    182         C1FFE7D3C1FFCCA37DFFD4BBA2FFDECBBBFFDECBBBFFDECBBBFFE7D3C1FFE7D3
    183         C1FFE7D3C1FFD8B99CFFCCA37DFFE7D3C1FFE7D3C1FFDECBBBFFDECBBBFFDECB
    184         BBFFE7D3C1FFE7D3C1FFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    185         FF00FFFFFF00C89E76FFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFF
    186         FF00FFFFFF00D8B99CFFF0E5DAFFFEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFE
    187         FEFFFFFFFF00EBDCCDFFD8B99CFFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4
    188         F4FFF5F5F5FFFEFEFEFFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    189         FF00FFFFFF00C89E76FFFEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFF
    190         FF00FFFFFF00D8B99CFFF0E5DAFFFFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5
    191         F5FFFEFEFEFFEBDCCDFFD8B99CFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5
    192         F5FFF4F4F4FFF5F5F5FFC89E76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    193         FF00FFFFFF00C6986EFFC89E76FFC89E76FFC19973FFC19973FFC19973FFC89E
    194         76FFC89E76FFBD8856FFC4966AFFC89E76FFC89E76FFC89E76FFC19973FFC199
    195         73FFC19973FFC29367FFBD8856FFC89E76FFC89E76FFC89E76FFC89E76FFC89E
    196         76FFC19973FFC19973FFC4966AFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    197         FF00FFFFFF00C89E76FFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5
    198         F5FFFEFEFEFFD8B99CFFF0E5DAFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5
    199         F5FFF4F4F4FFE2D4C6FFD8B99CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    200         FF00FEFEFEFFF5F5F5FFC19973FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFF
    201         FF00FFFFFF00C89E76FFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4
    202         F4FFF5F5F5FFD8B99CFFF0E5DAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    203         FEFFF5F5F5FFE2D4C6FFD0B297FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    204         FF00FFFFFF00FEFEFEFFC19973FFF5F5F5FFFAFAFAFFFFFFFF00FFFFFF00FDFD
    205         FDFFFEFEFEFFC89E76FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFF1ED
    206         EAFFF1EDEAFFD0B297FFEBDCCDFFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6
    207         F3FFFAF6F3FFDECBBBFFD0B297FFF1EDEAFFFAF6F3FFFAF6F3FFFAF6F3FFFAF6
    208         F3FFFAF6F3FFFAF6F3FFC89E76FFFAFAFAFFFAFAFAFFFDFDFDFFFFFFFF00FDFD
    209         FDFFFAFAFAFFC4966AFFB17439FFB17439FFB17439FFB17439FFB17439FFB074
    210         39FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB17439FFB174
    211         39FFB17439FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB174
    212         39FFB17439FFB17439FFC4966AFFFEFEFEFFFAFAFAFFFDFDFDFFFFFFFF00FDFD
    213         FDFFFAFAFAFFC0966CFFB07439FFB17439FFB17439FFB17439FFB17439FFB174
    214         39FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB174
    215         39FFB17439FFB17439FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB174
    216         39FFB17439FFB17439FFC4966AFFFFFFFF00FEFEFEFFFDFDFDFFFFFFFF00FFFF
    217         FF00FAFAFAFFC0966CFFAB723AFFB07439FFB17439FFB17439FFB17439FFB174
    218         39FFB17439FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB174
    219         39FFB17439FFB17439FFB17439FFB07439FFAB723AFFAB723AFFAB723AFFB074
    220         39FFB17439FFB17439FFC4966AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    221         FF00FEFEFEFFC0966CFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB174
    222         39FFB17439FFB17439FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB174
    223         39FFB17439FFB17439FFB17439FFB17439FFB07439FFAB723AFFAB723AFFAB72
    224         3AFFB07439FFB17439FFC4966AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    225         FF00FFFFFF00F0E5DAFFE2D4C6FFE2D4C6FFE2D4C6FFEBDCCDFFEBDCCDFFEBDC
    226         CDFFEBDCCDFFEBDCCDFFEBDCCDFFEBDCCDFFE2D4C6FFE2D4C6FFE2D4C6FFEBDC
    227         CDFFEBDCCDFFEBDCCDFFEBDCCDFFEBDCCDFFEBDCCDFFEBDCCDFFE2D4C6FFE2D4
    228         C6FFE2D4C6FFEBDCCDFFF0E5DAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    229         FF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFF5F5F5FFFAFAFAFFFEFEFEFFFFFF
    230         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFF5F5F5FFFAFA
    231         FAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFA
    232         FAFFF5F5F5FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    233         FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFAFAFAFFFEFE
    234         FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFA
    235         FAFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    236         FEFFFAFAFAFFFAFAFAFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    237         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFDFDFDFFFDFD
    238         FDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFD
    239         FDFFFDFDFDFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    240         FF00FFFFFF00FDFDFDFFFDFDFDFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00FFFF
    241         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    242         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    243         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    244         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    245       }
    246115    end
    247116    object MenuItem1: TMenuItem
    248117      Action = AAdd
    249       Bitmap.Data = {
    250         36100000424D3610000000000000360000002800000020000000200000000100
    251         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    252         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    253         FF00DBDBDBFF949494FF707070FF707070FF707070FF707070FF707070FF7070
    254         70FF707070FF707070FF707070FF949494FFDBDBDBFFFFFFFF00FFFFFF00FFFF
    255         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    256         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    257         FF00005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    258         04FF005104FF005104FF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    259         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    260         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    261         FF00005104FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    262         7FFF76D07FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    263         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    264         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    265         FF00005104FF76D07FFF09A514FF089F12FF069710FF06920EFF06920EFF0694
    266         0FFF079910FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    267         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    268         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    269         FF00005104FF76D07FFF09A514FF089F12FF079910FF06940FFF06920EFF0692
    270         0EFF06940FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    271         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    272         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    273         FF00005104FF76D07FFF09A514FF09A514FF089F12FF079910FF06940FFF0692
    274         0EFF06920EFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    275         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    276         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    277         FF00005104FF76D07FFF09A715FF09A514FF09A514FF089F12FF079910FF0694
    278         0FFF06920EFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    279         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    280         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    281         FF00005104FF76D07FFF09A715FF09A514FF09A514FF09A514FF089F12FF0799
    282         10FF06940FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    283         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    284         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    285         FF00005104FF76D07FFF09A715FF09A715FF09A514FF09A514FF09A514FF089F
    286         12FF079910FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    287         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F3F3FFDBDB
    288         DBFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF
    289         CFFF005104FF76D07FFF09A715FF09A715FF09A715FF09A514FF09A514FF09A5
    290         14FF089F12FF76D07FFF005104FF646464FFABABABFFCFCFCFFFCFCFCFFFCFCF
    291         CFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFDBDBDBFFDBDBDBFF9494
    292         94FF707070FF707070FF707070FF707070FF707070FF707070FF707070FF7070
    293         70FF005104FF76D07FFF09A715FF09A715FF09A715FF09A715FF09A715FF09A5
    294         14FF09A514FF76D07FFF005104FF4C4C4CFF646464FF707070FF707070FF7070
    295         70FF707070FF707070FF707070FF707070FF707070FF949494FF005104FF0051
    296         04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    297         04FF005104FF76D07FFF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    298         15FF09A514FF76D07FFF005104FF005104FF005104FF005104FF005104FF0051
    299         04FF005104FF005104FF005104FF005104FF005104FF707070FF005104FF76D0
    300         7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    301         7FFF76D07FFF76D07FFF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    302         15FF09A715FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    303         7FFF76D07FFF76D07FFF76D07FFF76D07FFF005104FF707070FF005104FF76D0
    304         7FFF74CD7BFF6FCC76FF6ACA72FF66C86DFF4ABE52FF25B130FF09A715FF09A7
    305         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    306         15FF09A715FF09A514FF09A514FF09A514FF089F12FF079910FF06940FFF0692
    307         0EFF06920EFF06940FFF069710FF76D07FFF005104FF707070FF005104FF76D0
    308         7FFF79CF7FFF74CD7BFF6FCC76FF6ACA72FF6ACA72FF50C159FF25B130FF09A7
    309         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    310         15FF09A715FF09A715FF09A715FF09A514FF09A514FF089F12FF079910FF0694
    311         0FFF06940FFF06920EFF06940FFF76D07FFF005104FF707070FF005104FF76D0
    312         7FFF7ED184FF79CF7FFF74CD7BFF6FCC76FF6FCC76FF6ACA72FF5AC462FF32B5
    313         3CFF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    314         15FF09A715FF09A715FF09A715FF09A715FF09A514FF09A514FF089F12FF0799
    315         10FF069710FF06940FFF06920EFF76D07FFF005104FF707070FF005104FF76D0
    316         7FFF84D38AFF7ED184FF79CF7FFF74CD7BFF74CD7BFF6FCC76FF6ACA72FF66C8
    317         6DFF41BB4AFF25B130FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    318         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A514FF089F
    319         12FF089F12FF069710FF06940FFF76D07FFF005104FF707070FF005104FF76D0
    320         7FFF84D38AFF84D38AFF7ED184FF79CF7FFF79CF7FFF74CD7BFF6FCC76FF6ACA
    321         72FF6ACA72FF50C159FF32B53CFF09A715FF09A715FF09A715FF09A715FF09A7
    322         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A5
    323         14FF089F12FF089F12FF069710FF76D07FFF005104FF707070FF005104FF76D0
    324         7FFF8CD692FF84D38AFF84D38AFF7ED184FF7ED184FF79CF7FFF74CD7BFF6FCC
    325         76FF6FCC76FF6ACA72FF66C86DFF4ABE52FF25B130FF09A715FF09A715FF09A7
    326         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A5
    327         14FF09A514FF089F12FF089F12FF76D07FFF005104FF707070FF005104FF76D0
    328         7FFF90D795FF8CD692FF84D38AFF84D38AFF84D38AFF7ED184FF79CF7FFF74CD
    329         7BFF74CD7BFF6FCC76FF6ACA72FF66C86DFF66C86DFF41BB4AFF25B130FF09A7
    330         15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    331         15FF09A514FF09A514FF089F12FF76D07FFF005104FF707070FF005104FF76D0
    332         7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    333         7FFF76D07FFF76D07FFF6FCC76FF6ACA72FF6ACA72FF66C86DFF66C86DFF41BB
    334         4AFF25B130FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    335         7FFF76D07FFF76D07FFF76D07FFF76D07FFF005104FF949494FF005104FF0051
    336         04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    337         04FF005104FF76D07FFF74CD7BFF6FCC76FF6FCC76FF6ACA72FF66C86DFF66C8
    338         6DFF5AC462FF76D07FFF005104FF005104FF005104FF005104FF005104FF0051
    339         04FF005104FF005104FF005104FF005104FF005104FFDBDBDBFFFFFFFF00FFFF
    340         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    341         FF00005104FF76D07FFF79CF7FFF74CD7BFF74CD7BFF6FCC76FF6ACA72FF66C8
    342         6DFF66C86DFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    343         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    344         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    345         FF00005104FF76D07FFF7ED184FF79CF7FFF79CF7FFF74CD7BFF6FCC76FF6ACA
    346         72FF6ACA72FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    347         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    348         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    349         FF00005104FF76D07FFF84D38AFF7ED184FF7ED184FF79CF7FFF74CD7BFF6FCC
    350         76FF6FCC76FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    351         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    352         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    353         FF00005104FF76D07FFF84D38AFF84D38AFF84D38AFF7ED184FF79CF7FFF74CD
    354         7BFF74CD7BFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    355         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    356         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    357         FF00005104FF76D07FFF8CD692FF8CD692FF84D38AFF84D38AFF7ED184FF79CF
    358         7FFF79CF7FFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    359         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    360         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    361         FF00005104FF76D07FFF90D795FF8CD692FF8CD692FF84D38AFF84D38AFF7ED1
    362         84FF7ED184FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    363         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    364         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    365         FF00005104FF76D07FFF9BDBA0FF90D795FF90D795FF8CD692FF84D38AFF84D3
    366         8AFF7ED184FF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    367         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    368         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    369         FF00005104FF76D07FFF9BDBA0FF9BDBA0FF90D795FF90D795FF8CD692FF8CD6
    370         92FF84D38AFF76D07FFF005104FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFF
    371         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    372         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    373         FF00005104FF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    374         7FFF76D07FFF76D07FFF005104FF949494FFDBDBDBFFFFFFFF00FFFFFF00FFFF
    375         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    376         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    377         FF00005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    378         04FF005104FF005104FF005104FFDBDBDBFFF3F3F3FFFFFFFF00FFFFFF00FFFF
    379         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    380       }
    381118    end
    382119    object MenuItem2: TMenuItem
    383120      Action = AModify
    384       Bitmap.Data = {
    385         36100000424D3610000000000000360000002800000020000000200000000100
    386         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    387         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    388         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    389         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    390         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    391         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    392         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    393         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    394         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    395         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    396         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    397         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    398         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    399         FF00BABABAFFCFCFCFFFF6F6F6FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    400         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    401         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    402         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    403         FF00BABABAFF415D77FF4D697FFFC0C7CCFFFFFFFF00FFFFFF00FFFFFF00FFFF
    404         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    405         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    406         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    407         FF00D8D8D8FF415D77FF597EAEFF5492E5FF69AAEDFFA3CEF5FFFFFFFF00FFFF
    408         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    409         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    410         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    411         FF00F6F6F6FF8EAAC2FF9BC1F3FFA8CAF6FF649CE8FF5492E5FF5094E6FF69AA
    412         EDFFC8E0F8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    413         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    414         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    415         FF00FFFFFF00ECF5FDFF81B0EEFFC8E0F8FFBDD8FAFF81B0EEFF5492E5FF5492
    416         E5FF5094E6FF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    417         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    418         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    419         FF00FFFFFF00FFFFFF00649CE8FFBDD8FAFFD6E8FEFFC8E0F8FF9BC1F3FF5094
    420         E6FF209BEDFF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    421         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    422         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    423         FF00FFFFFF00FFFFFF007CB3EEFF9BC1F3FFD6E8FEFFD6E8FEFFC8E0F8FF71C9
    424         FAFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    425         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    426         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    427         FF00FFFFFF00FFFFFF00A3CEF5FF77A9ECFFC8E0F8FFD6E8FEFFBFE4FEFF5BD5
    428         FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFF
    429         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    430         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    431         FF00FFFFFF00FFFFFF00E0EFFCFF5492E5FFBDD8FAFFC8E0F8FFA9E6FFFF79E1
    432         FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFF
    433         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    434         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    435         FF00FFFFFF00FFFFFF00FFFFFF00209BEDFF6DBCF4FF98DBFCFF9CE4FFFF94E4
    436         FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFF
    437         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    438         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    439         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4
    440         FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007D
    441         E7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    442         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    443         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7
    444         FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489
    445         EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    446         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    447         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9
    448         F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149C
    449         F1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    450         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    451         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209B
    452         EDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1
    453         F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    454         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    455         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    456         FF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5
    457         FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    458         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    459         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    460         FF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5
    461         FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFF
    462         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    463         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    464         FF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1
    465         FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFF
    466         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    467         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    468         FF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4
    469         FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFF
    470         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    471         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    472         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4
    473         FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF611CDDFF5400
    474         D5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    475         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    476         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7
    477         FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF8163F0FF7547E9FF611C
    478         DDFF5400D5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    479         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    480         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9
    481         F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF9185F9FF8A75F5FF8163F0FF7547
    482         E9FF611CDDFF5400D5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    483         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    484         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209B
    485         EDFF55B9F4FF87D7FBFF9CE4FFFF9998FFFF9691FDFF9185F9FF8A75F5FF8163
    486         F0FF7547E9FF611CDDFFD4BFF4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    487         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    488         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    489         FF00209BEDFF55B9F4FF948CFBFF9998FFFF9998FFFF9691FDFF9185F9FF8A75
    490         F5FF8163F0FF7547E9FFD7C6F6FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    491         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    492         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    493         FF00FFFFFF007950EBFF8A75F5FF948CFBFF9998FFFF9998FFFF9691FDFF9185
    494         F9FF8A75F5FF8163F0FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    495         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    496         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    497         FF00FFFFFF00FFFFFF007950EBFF8A75F5FF948CFBFF9998FFFF9998FFFF9691
    498         FDFF9185F9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    499         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    500         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    501         FF00FFFFFF00FFFFFF00FFFFFF007950EBFF8A75F5FF948CFBFF9998FFFF9998
    502         FFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    503         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    504         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    505         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007950EBFF8A75F5FF948CFBFFFFFF
    506         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    507         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    508         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    509         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    510         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    511         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    512         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    513         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    514         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    515       }
    516121    end
    517122    object MenuItem3: TMenuItem
    518123      Action = ARemove
    519       Bitmap.Data = {
    520         36100000424D3610000000000000360000002800000020000000200000000100
    521         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    522         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    523         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    524         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    525         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    526         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    527         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    528         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    529         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    530         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    531         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    532         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    533         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    534         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    535         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    536         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    537         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    538         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    539         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    540         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    541         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    542         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    543         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    544         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    545         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    546         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    547         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    548         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    549         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    550         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    551         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    552         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    553         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    554         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    555         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    556         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    557         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    558         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    559         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    560         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    561         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    562         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    563         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    564         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    565         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00463C
    566         8BFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    567         6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    568         6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    569         6AFF342C6AFF342C6AFF342C6AFF342C6AFF463C8BFFFFFFFF00FFFFFF003C34
    570         77FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    571         B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    572         B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    573         B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF3C3477FFFFFFFF00FFFFFF00433B
    574         84FF5D51C1FF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    575         ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    576         ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    577         ABFF2716ABFF2716ABFF2716ABFF5D51C1FF433B84FFFFFFFF00FFFFFF004B42
    578         92FF6052CCFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    579         BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    580         BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    581         BAFF2A18BAFF2A18BAFF2A18BAFF6052CCFF4B4292FFFFFFFF00FFFFFF00544A
    582         A0FF6455D6FF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    583         CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    584         CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    585         CBFF3623CBFF3623CBFF3623CBFF6455D6FF544AA0FFFFFFFF00FFFFFF005D51
    586         AFFF6C5DE3FF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    587         DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    588         DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    589         DEFF503EDEFF503EDEFF4937DCFF6C5DE3FF5D51AFFFFFFFFF00FFFFFF006357
    590         B8FF7364EAFF6251E7FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    591         E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    592         E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    593         E8FF6757E8FF6757E8FF5C4AE6FF7364EAFF6357B8FFFFFFFF00FFFFFF006357
    594         B8FF7869EAFF7364EAFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    595         EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    596         EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    597         EBFF7D6FEBFF7869EAFF6757E8FF7869EAFF6357B8FFFFFFFF00FFFFFF006357
    598         B8FF7D6FEBFF8174ECFF8D81EEFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    599         EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    600         EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    601         EFFF9387EFFF8D81EEFF7869EAFF7869EAFF6357B8FFFFFFFF00FFFFFF006E62
    602         C3FF7A6CE3FF897EE6FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    603         E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    604         E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    605         E7FF9186E7FF897EE6FF867AE6FF7A6CE3FF6E62C3FFFFFFFF00FFFFFF007468
    606         CEFF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    607         C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    608         C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    609         C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF7468CEFFFFFFFF00FFFFFF00FFFF
    610         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    611         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    612         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    613         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    614         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    615         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    616         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    617         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    618         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    619         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    620         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    621         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    622         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    623         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    624         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    625         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    626         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    627         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    628         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    629         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    630         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    631         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    632         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    633         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    634         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    635         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    636         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    637         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    638         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    639         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    640         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    641         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    642         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    643         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    644         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    645         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    646         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    647         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    648         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    649         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    650       }
    651124    end
    652125    object MenuItem5: TMenuItem
    653126      Action = AShowFields
    654       Bitmap.Data = {
    655         36100000424D3610000000000000360000002800000020000000200000000100
    656         2000000000000010000064000000640000000000000000000000FFFFFF00FFFF
    657         FF00F3F8FBFF79BBE1FF2095D3FF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91
    658         DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91
    659         DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91
    660         DBFF0B91DBFF018CD8FF0E81CAFF2E99D7FFCAE0EBFFFFFFFF00FFFFFF00FEFE
    661         FEFF49A9DBFF0293E0FF0096E6FF0095E6FF0095E6FF0095E6FF0095E6FF0095
    662         E6FF0095E6FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193
    663         E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193
    664         E4FF0193E4FF0193E4FF0186D6FF0277C3FF79BBE1FFFFFFFF00FFFFFF00B0D6
    665         EBFF0293E0FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097
    666         E6FF0097E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096
    667         E6FF0096E6FF0096E6FF0096E6FF0095E6FF0095E6FF0095E6FF0095E6FF0193
    668         E4FF0193E4FF018CD8FF0277C3FF0E81CAFFE2F0F7FFFFFFFF00FEFEFEFF74BE
    669         E4FF0097E6FF009BE8FF0097E6FF009BE8FF0097E6FF0097E6FF0097E6FF0097
    670         E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097
    671         E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0096E6FF0096
    672         E6FF027FCBFF027FCBFF0277C3FFBDDDEFFFFEFEFEFFFFFFFF00FEFEFEFF6CBC
    673         E4FF009BE8FF009BE8FF009BE8FF009BE8FF009BE8FF139ADEFF2CA1DDFF2CA1
    674         DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1
    675         DDFF2CA1DDFF2CA1DDFF0293E0FF0097E6FF0097E6FF0097E6FF0097E6FF0096
    676         E6FF027FCBFF0277C3FFB0D6EBFFFEFEFEFFFFFFFF00FFFFFF00FEFEFEFF6CBC
    677         E4FF009BE8FF009CE9FF009CE9FF009BE8FF4EB2E3FFF3F8FBFFFEFEFEFFFEFE
    678         FEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE
    679         FEFFFEFEFEFFFEFEFEFF89CAECFF0097E6FF009BE8FF0293E0FF018CD8FF027F
    680         CBFF0277C3FF9ACEEAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CBC
    681         E4FF009CE9FF009CE9FF009CE9FF009BE8FFBDDDEFFFFFFFFF00FFFFFF00FFFF
    682         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    683         FF00FFFFFF00E2F0F7FF139ADEFF009BE8FF009BE8FF009BE8FF027FCBFF0277
    684         C3FF89CAECFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    685         E7FF029FE8FF009CE9FF009CE9FF009BE8FFCAE0EBFFFFFFFF00FFFFFF00FFFF
    686         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    687         FF00ECF5F9FF2CA1DDFF009CE9FF0097E6FF009CE9FF0186D6FF027FCBFF74BE
    688         E4FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    689         E7FF029FE8FF00A4EEFF029FE8FF029FE8FFCAE0EBFFFFFFFF00FFFFFF00FFFF
    690         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F8
    691         FBFF37AAE1FF029FE8FF009CE9FF0293E0FF027FCBFF027FCBFF5BB1DEFFFEFE
    692         FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    693         E7FF00A4EEFF00A4EEFF00A4EEFF029FE8FFCAE0EBFFFFFFFF00FFFFFF00FFFF
    694         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F8FBFF46B0
    695         E3FF029FE8FF029FE8FF029FE8FF018CD8FF027FCBFF49A9DBFFFEFEFEFFFFFF
    696         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    697         E7FF00A4EEFF00A4EEFF00A4EEFF029FE8FFCAE0EBFFFFFFFF00FFFFFF00FFFF
    698         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF57B8E5FF029F
    699         E8FF00A4EEFF018CD8FF018CD8FF027FCBFF3AA1D8FFF3F8FBFFFFFFFF00FFFF
    700         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    701         E7FF00A4EEFF00A4EEFF00A4EEFF029FE8FFCAE2ECFFFFFFFF00FFFFFF00FFFF
    702         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF029FE8FF00A4
    703         EEFF00A4EEFF0293E0FF027FCBFF2E99D7FFECF5F9FFFFFFFF00FFFFFF00FFFF
    704         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    705         E7FF00A7F0FF00A7F0FF00A7F0FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FFFF
    706         FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF80CAEBFF029FE8FF00A4EEFF029F
    707         E8FF009BE8FF027FCBFF2095D3FFE2F0F7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    708         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0
    709         E7FF00A7F0FF00A7F0FF00A7F0FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FFFF
    710         FF00FFFFFF00FFFFFF00FEFEFEFF95D3EEFF029FE8FF00A7F0FF00A7F0FF018C
    711         D8FF0186D6FF2095D3FFD2EDF7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    712         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    713         EAFF00ACF3FF00ACF3FF00ACF3FF09A6E8FFCAE0EBFFFFFFFF00FFFFFF00FFFF
    714         FF00FFFFFF00FEFEFEFFA7DAF0FF09A6E8FF00A7F0FF00A7F0FF029FE8FF0186
    715         D6FF088CD1FFD2EDF7FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    716         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    717         EAFF00ACF3FF00ACF3FF00ACF3FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FFFF
    718         FF00FEFEFEFFBCE4F3FF09A6E8FF00ACF3FF00A4EEFF0293E0FF0186D6FF088C
    719         D1FFBCE4F3FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    720         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    721         EAFF00ACF3FF00ACF3FF00ACF3FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FEFE
    722         FEFFD2EDF7FF09A6E8FF00ACF3FF00ACF3FF00A7F0FF018CD8FF088CD1FFA7DA
    723         F0FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    724         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    725         EAFF00ACF3FF00ACF3FF00ACF3FF00ACF3FFCAE2ECFFFFFFFF00FFFFFF00D2ED
    726         F7FF21B0E8FF00ACF3FF00A4EEFF00A7F0FF0B91DBFF088CD1FF95D3EEFFFEFE
    727         FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    728         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    729         EAFF01B4F8FF00ACF3FF00ACF3FF00ACF3FFCAE2ECFFFEFEFEFFE2F0F7FF21B0
    730         E8FF00ACF3FF00ACF3FF00A4EEFF018CD8FF088CD1FF80CAEBFFFEFEFEFFFFFF
    731         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    732         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    733         EAFF01B4F8FF01B4F8FF01B4F8FF00ACF3FFCAE2ECFFECF5F9FF35BAEEFF00AC
    734         F3FF01B4F8FF00ACF3FF0293E0FF088CD1FF6CC5EAFFFEFEFEFFFFFFFF00FFFF
    735         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    736         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    737         EAFF01B4F8FF01B4F8FF01B4F8FF01B4F8FF6CCDEFFF35BAEEFF01B4F8FF01B4
    738         F8FF009BE8FF009BE8FF0B91DBFF57B8E5FFFEFEFEFFFFFFFF00FFFFFF00FFFF
    739         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    740         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5
    741         EAFF01B4F8FF01B4F8FF01B4F8FF01B4F8FF01B4F8FF01B4F8FF01B4F8FF01B4
    742         F8FF029FE8FF0B91DBFF46B0E3FFF3F8FBFFFFFFFF00FFFFFF00FFFFFF00FFFF
    743         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    744         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    745         EFFF01B4F8FF00B8FBFF00B8FBFF00B8FBFF00B8FBFF01B4F8FF00ACF3FF029F
    746         E8FF0B91DBFF37AAE1FFF3F8FBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    747         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    748         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    749         EFFF00B8FBFF00B8FBFF00B8FBFF00B8FBFF00B8FBFF00B8FBFF029FE8FF0B91
    750         DBFF28ACE1FFECF5F9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    751         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    752         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    753         EFFF00B8FBFF00B8FBFF00B8FBFF02BCFBFF00B8FBFF00ACF3FF0B91DBFF10A5
    754         DAFFE2F0F7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    755         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    756         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    757         EFFF02BCFBFF00B8FBFF00B8FBFF01B4F8FF029FE8FF0B91DBFF10A5DAFFD2ED
    758         F7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    759         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    760         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    761         EFFF02BCFBFF02BCFBFF02BCFBFF01B4F8FF139ADEFF04A1DEFFBCE4F3FFFEFE
    762         FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    763         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    764         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    765         EFFF02BCFBFF00ACF3FF01B4F8FF139ADEFF04A1DEFFB4E3F4FFFEFEFEFFFFFF
    766         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    767         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    768         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    769         EFFF02BCFBFF01B4F8FF0B91DBFF04A1DEFFA1DCF2FFFEFEFEFFFFFFFF00FFFF
    770         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    771         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    772         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCD
    773         EFFF00B8FBFF029FE8FF04A1DEFF8CD5F0FFFEFEFEFFFFFFFF00FFFFFF00FFFF
    774         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    775         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    776         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF74BE
    777         E4FF139ADEFF04A1DEFF78CEEEFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    778         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    779         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    780         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BCE4
    781         F3FF10A5DAFF78CEEEFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    782         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    783         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    784         FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
    785       }
    786127    end
    787128  end
  • trunk/Forms/UFormTables.pas

    r15 r20  
    4545      Selected: Boolean);
    4646  private
    47     FDatabase: TDatabase;
    48     procedure SetDatabase(AValue: TDatabase);
    49     { private declarations }
     47    FTables: TTables;
     48    procedure SetTables(AValue: TTables);
    5049  public
    51     property Database: TDatabase read FDatabase write SetDatabase;
     50    property Tables: TTables read FTables write SetTables;
    5251    procedure UpdateInterface;
    5352    procedure ReloadList;
     
    7473procedure TFormTables.ListView1Data(Sender: TObject; Item: TListItem);
    7574begin
    76   if (Item.Index >= 0) and (Item.Index < Database.Tables.Count) then
    77   with TTable(Database.Tables[Item.Index]) do begin
     75  if (Item.Index >= 0) and (Item.Index < FTables.Count) then
     76  with TTable(FTables[Item.Index]) do begin
    7877    Item.Caption := Caption;
    7978    Item.SubItems.Add(IntToStr(RecordsCount));
    80     Item.Data := Database.Tables[Item.Index];
     79    Item.Data := FTables[Item.Index];
    8180  end
    8281end;
     
    8887end;
    8988
    90 procedure TFormTables.SetDatabase(AValue: TDatabase);
    91 begin
    92   if FDatabase = AValue then Exit;
    93   FDatabase := AValue;
     89procedure TFormTables.SetTables(AValue: TTables);
     90begin
     91  if FTables = AValue then Exit;
     92  FTables := AValue;
    9493  ReloadList;
    9594end;
     
    9796procedure TFormTables.UpdateInterface;
    9897begin
    99   ListView1.Enabled := Assigned(Database);
    100   AAdd.Enabled := Assigned(Database);
    101   AModify.Enabled := Assigned(Database) and Assigned(ListView1.Selected);
    102   ARemove.Enabled := Assigned(Database) and Assigned(ListView1.Selected);
    103   AShowRecords.Enabled := Assigned(Database) and Assigned(ListView1.Selected);
    104   AShowFields.Enabled := Assigned(Database) and Assigned(ListView1.Selected);
     98  ListView1.Enabled := Assigned(Tables);
     99  AAdd.Enabled := Assigned(Tables);
     100  AModify.Enabled := Assigned(Tables) and Assigned(ListView1.Selected);
     101  ARemove.Enabled := Assigned(Tables) and Assigned(ListView1.Selected);
     102  AShowRecords.Enabled := Assigned(Tables) and Assigned(ListView1.Selected);
     103  AShowFields.Enabled := Assigned(Tables) and Assigned(ListView1.Selected);
    105104end;
    106105
     
    111110  NewTable := TTable.Create;
    112111  NewTable.Name := SNewTable;
    113   NewTable.Database := Database;
     112  NewTable.DbClient := Tables.DbClient;
    114113  FormTable.Load(NewTable);
    115114  if FormTable.ShowModal = mrOk then begin
    116115    FormTable.Save(NewTable);
    117     Database.Tables.Add(NewTable);
     116    Tables.Add(NewTable);
    118117    ReloadList;
    119118  end else NewTable.Free;
     
    136135    if MessageDlg(SRemoveTable, Format(SRemoveTableConfirm, [TTable(ListView1.Selected.Data).Name]),
    137136    mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
    138       Database.Tables.Remove(ListView1.Selected.Data);
     137      Tables.Remove(ListView1.Selected.Data);
    139138      ReloadList;
    140139    end;
     
    202201procedure TFormTables.FormClose(Sender: TObject; var CloseAction: TCloseAction);
    203202begin
    204   Database.Save;
     203  //Tables.DbClient.Save;
    205204end;
    206205
     
    218217  I: Integer;
    219218begin
    220   for I := 0 to Database.Tables.Count - 1 do
    221     TTable(Database.Tables[I]).LoadRecordsCount;
    222   if Assigned(Database) then begin
    223     ListView1.Items.Count := Database.Tables.Count;
     219  for I := 0 to Tables.Count - 1 do
     220    TTable(Tables[I]).LoadRecordsCount;
     221  if Assigned(Tables) then begin
     222    ListView1.Items.Count := Tables.Count;
    224223    ListView1.Repaint;
    225224  end else ListView1.Items.Count := 0;
  • trunk/Languages/MyData.cs.po

    r19 r20  
    5151msgstr "   "
    5252
     53#: tformconnect.buttoncancel.caption
     54#, fuzzy
     55msgctxt "tformconnect.buttoncancel.caption"
     56msgid "Cancel"
     57msgstr "Zrušit"
     58
     59#: tformconnect.buttonok.caption
     60#, fuzzy
     61msgctxt "tformconnect.buttonok.caption"
     62msgid "Ok"
     63msgstr "Ok"
     64
     65#: tformconnect.buttonxmlbrowse.caption
     66msgid "Browse"
     67msgstr ""
     68
     69#: tformconnect.caption
     70msgid "Connection parameters:"
     71msgstr ""
     72
     73#: tformconnect.label1.caption
     74#, fuzzy
     75msgctxt "tformconnect.label1.caption"
     76msgid "Name:"
     77msgstr "Jméno:"
     78
     79#: tformconnect.label2.caption
     80msgid "Database engine:"
     81msgstr ""
     82
     83#: tformconnect.label3.caption
     84msgid "Xml file:"
     85msgstr ""
     86
     87#: tformconnect.label4.caption
     88msgid "Host:"
     89msgstr ""
     90
     91#: tformconnect.label5.caption
     92msgid "Port:"
     93msgstr ""
     94
     95#: tformconnect.tabsheetregistry.caption
     96msgid "TabSheetRegistry"
     97msgstr ""
     98
     99#: tformconnect.tabsheetsqlite.caption
     100msgid "TabSheetSqlite"
     101msgstr ""
     102
    53103#: tformdatabases.aadd.caption
    54104msgid "New"
     
    70120
    71121#: tformdatabases.caption
    72 msgid "Databases"
     122#, fuzzy
     123#| msgid "Databases"
     124msgid "Connection profiles"
    73125msgstr "Databáze"
    74126
     
    102154
    103155#: tformfield.label1.caption
     156msgctxt "tformfield.label1.caption"
    104157msgid "Name:"
    105158msgstr "Jméno:"
     
    334387
    335388#: ucore.stypeboolean
     389msgctxt "ucore.stypeboolean"
    336390msgid "Boolean"
    337391msgstr "Logická hodnota"
    338392
    339393#: ucore.stypedate
     394msgctxt "ucore.stypedate"
    340395msgid "Date"
    341396msgstr "Datum"
    342397
    343398#: ucore.stypedatetime
     399msgctxt "ucore.stypedatetime"
    344400msgid "Date and time"
    345401msgstr "Datum a čas"
    346402
    347403#: ucore.stypefloat
     404msgctxt "ucore.stypefloat"
    348405msgid "Float"
    349406msgstr "Desetinné číslo"
    350407
    351408#: ucore.stypeimage
     409msgctxt "ucore.stypeimage"
    352410msgid "Image"
    353411msgstr "Obrázek"
    354412
    355413#: ucore.stypeinteger
     414msgctxt "ucore.stypeinteger"
    356415msgid "Integer"
    357416msgstr "Celé číslo"
    358417
    359418#: ucore.stypemapposition
     419msgctxt "ucore.stypemapposition"
    360420msgid "Map position"
    361421msgstr "Pozice na mapě"
    362422
    363423#: ucore.stypereference
     424msgctxt "ucore.stypereference"
    364425msgid "Reference"
    365426msgstr "Odkaz"
    366427
    367428#: ucore.stypestring
     429msgctxt "ucore.stypestring"
    368430msgid "String"
    369431msgstr "Řetězec"
    370432
    371433#: ucore.stypetime
     434msgctxt "ucore.stypetime"
     435msgid "Time"
     436msgstr "Čas"
     437
     438#: udatabase.stypeboolean
     439#, fuzzy
     440msgctxt "udatabase.stypeboolean"
     441msgid "Boolean"
     442msgstr "Logická hodnota"
     443
     444#: udatabase.stypedate
     445#, fuzzy
     446msgctxt "udatabase.stypedate"
     447msgid "Date"
     448msgstr "Datum"
     449
     450#: udatabase.stypedatetime
     451#, fuzzy
     452msgctxt "udatabase.stypedatetime"
     453msgid "Date and time"
     454msgstr "Datum a čas"
     455
     456#: udatabase.stypefloat
     457#, fuzzy
     458msgctxt "udatabase.stypefloat"
     459msgid "Float"
     460msgstr "Desetinné číslo"
     461
     462#: udatabase.stypeimage
     463#, fuzzy
     464msgctxt "udatabase.stypeimage"
     465msgid "Image"
     466msgstr "Obrázek"
     467
     468#: udatabase.stypeinteger
     469#, fuzzy
     470msgctxt "udatabase.stypeinteger"
     471msgid "Integer"
     472msgstr "Celé číslo"
     473
     474#: udatabase.stypemapposition
     475#, fuzzy
     476msgctxt "udatabase.stypemapposition"
     477msgid "Map position"
     478msgstr "Pozice na mapě"
     479
     480#: udatabase.stypereference
     481#, fuzzy
     482msgctxt "udatabase.stypereference"
     483msgid "Reference"
     484msgstr "Odkaz"
     485
     486#: udatabase.stypestring
     487#, fuzzy
     488msgctxt "udatabase.stypestring"
     489msgid "String"
     490msgstr "Řetězec"
     491
     492#: udatabase.stypetime
     493#, fuzzy
     494msgctxt "udatabase.stypetime"
    372495msgid "Time"
    373496msgstr "Čas"
     
    432555msgid "Database query error: \"%s\""
    433556msgstr "Chyba požadavku databáze: \"%s\""
     557
  • trunk/Languages/MyData.po

    r19 r20  
    4141msgstr ""
    4242
     43#: tformconnect.buttoncancel.caption
     44msgctxt "tformconnect.buttoncancel.caption"
     45msgid "Cancel"
     46msgstr ""
     47
     48#: tformconnect.buttonok.caption
     49msgctxt "tformconnect.buttonok.caption"
     50msgid "Ok"
     51msgstr ""
     52
     53#: tformconnect.buttonxmlbrowse.caption
     54msgid "Browse"
     55msgstr ""
     56
     57#: tformconnect.caption
     58msgid "Connection parameters:"
     59msgstr ""
     60
     61#: tformconnect.label1.caption
     62msgctxt "tformconnect.label1.caption"
     63msgid "Name:"
     64msgstr ""
     65
     66#: tformconnect.label2.caption
     67msgid "Database engine:"
     68msgstr ""
     69
     70#: tformconnect.label3.caption
     71msgid "Xml file:"
     72msgstr ""
     73
     74#: tformconnect.label4.caption
     75msgid "Host:"
     76msgstr ""
     77
     78#: tformconnect.label5.caption
     79msgid "Port:"
     80msgstr ""
     81
     82#: tformconnect.tabsheetregistry.caption
     83msgid "TabSheetRegistry"
     84msgstr ""
     85
     86#: tformconnect.tabsheetsqlite.caption
     87msgid "TabSheetSqlite"
     88msgstr ""
     89
    4390#: tformdatabases.aadd.caption
    4491msgid "New"
     
    60107
    61108#: tformdatabases.caption
    62 msgid "Databases"
     109msgid "Connection profiles"
    63110msgstr ""
    64111
     
    92139
    93140#: tformfield.label1.caption
     141msgctxt "tformfield.label1.caption"
    94142msgid "Name:"
    95143msgstr ""
     
    324372
    325373#: ucore.stypeboolean
     374msgctxt "ucore.stypeboolean"
    326375msgid "Boolean"
    327376msgstr ""
    328377
    329378#: ucore.stypedate
     379msgctxt "ucore.stypedate"
    330380msgid "Date"
    331381msgstr ""
    332382
    333383#: ucore.stypedatetime
     384msgctxt "ucore.stypedatetime"
    334385msgid "Date and time"
    335386msgstr ""
    336387
    337388#: ucore.stypefloat
     389msgctxt "ucore.stypefloat"
    338390msgid "Float"
    339391msgstr ""
    340392
    341393#: ucore.stypeimage
     394msgctxt "ucore.stypeimage"
    342395msgid "Image"
    343396msgstr ""
    344397
    345398#: ucore.stypeinteger
     399msgctxt "ucore.stypeinteger"
    346400msgid "Integer"
    347401msgstr ""
    348402
    349403#: ucore.stypemapposition
     404msgctxt "ucore.stypemapposition"
    350405msgid "Map position"
    351406msgstr ""
    352407
    353408#: ucore.stypereference
     409msgctxt "ucore.stypereference"
    354410msgid "Reference"
    355411msgstr ""
    356412
    357413#: ucore.stypestring
     414msgctxt "ucore.stypestring"
    358415msgid "String"
    359416msgstr ""
    360417
    361418#: ucore.stypetime
     419msgctxt "ucore.stypetime"
     420msgid "Time"
     421msgstr ""
     422
     423#: udatabase.stypeboolean
     424msgctxt "udatabase.stypeboolean"
     425msgid "Boolean"
     426msgstr ""
     427
     428#: udatabase.stypedate
     429msgctxt "udatabase.stypedate"
     430msgid "Date"
     431msgstr ""
     432
     433#: udatabase.stypedatetime
     434msgctxt "udatabase.stypedatetime"
     435msgid "Date and time"
     436msgstr ""
     437
     438#: udatabase.stypefloat
     439msgctxt "udatabase.stypefloat"
     440msgid "Float"
     441msgstr ""
     442
     443#: udatabase.stypeimage
     444msgctxt "udatabase.stypeimage"
     445msgid "Image"
     446msgstr ""
     447
     448#: udatabase.stypeinteger
     449msgctxt "udatabase.stypeinteger"
     450msgid "Integer"
     451msgstr ""
     452
     453#: udatabase.stypemapposition
     454msgctxt "udatabase.stypemapposition"
     455msgid "Map position"
     456msgstr ""
     457
     458#: udatabase.stypereference
     459msgctxt "udatabase.stypereference"
     460msgid "Reference"
     461msgstr ""
     462
     463#: udatabase.stypestring
     464msgctxt "udatabase.stypestring"
     465msgid "String"
     466msgstr ""
     467
     468#: udatabase.stypetime
     469msgctxt "udatabase.stypetime"
    362470msgid "Time"
    363471msgstr ""
  • trunk/MyData.lpi

    r19 r20  
    9696      </Item6>
    9797    </RequiredPackages>
    98     <Units Count="20">
     98    <Units Count="21">
    9999      <Unit0>
    100100        <Filename Value="MyData.lpr"/>
     
    213213        <IsPartOfProject Value="True"/>
    214214      </Unit19>
     215      <Unit20>
     216        <Filename Value="DbEngines/UDbClientRegistry.pas"/>
     217        <IsPartOfProject Value="True"/>
     218      </Unit20>
    215219    </Units>
    216220  </ProjectOptions>
  • trunk/MyData.lpr

    r19 r20  
    1111  UFormTable, UFormRecords, UFormRecord, UFormFields, UFormField,
    1212  TemplateGenerics, UFormMain, SysUtils,
    13   UFormConnect, UFormDatabases, UFormPreferences;
     13  UFormConnect, UFormDatabases, UFormPreferences, UDbClientRegistry;
    1414
    1515{$R *.res}
  • trunk/Packages/Common/UApplicationInfo.pas

    r15 r20  
    66
    77uses
    8   SysUtils, Registry, Classes, Forms, URegistry;
     8  SysUtils, Classes, Forms, URegistry, LCLType;
    99
    1010type
     
    1414  TApplicationInfo = class(TComponent)
    1515  private
    16     FDescription: string;
     16    FDescription: TTranslateString;
    1717    FIdentification: Byte;
    1818    FLicense: string;
  • trunk/Packages/Common/UPersistentForm.pas

    r15 r20  
    5656  I: Integer;
    5757  WinControl: TWinControl;
    58   Count: Integer;
    5958begin
    6059  if Control is TListView then begin
     
    217216
    218217procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False);
    219 var
    220   LoadDefaults: Boolean;
    221218begin
    222219  Self.Form := Form;
     
    230227
    231228  if not EqualRect(FormNormalSize, FormRestoredSize) or
    232     (LoadDefaults and DefaultMaximized) then begin
     229    DefaultMaximized then begin
    233230    // Restore to maximized state
    234231    Form.WindowState := wsNormal;
  • trunk/Packages/Common/URegistry.pas

    r15 r20  
    3737    function DeleteKeyRecursive(const Key: string): Boolean;
    3838    function OpenKey(const Key: string; CanCreate: Boolean): Boolean;
     39    function GetValue(const Name: string; const DefaultValue: Integer): Integer; overload;
     40    function GetValue(const Name: string; const DefaultValue: string): string; overload;
     41    function GetValue(const Name: string; const DefaultValue: Boolean): Boolean; overload;
     42    function GetValue(const Name: string; const DefaultValue: Double): Double; overload;
     43    procedure SetValue(const Name: string; const Value: Integer); overload;
     44    procedure SetValue(const Name: string; const Value: string); overload;
     45    procedure SetValue(const Name: string; const Value: Boolean); overload;
     46    procedure SetValue(const Name: string; const Value: Double); overload;
    3947    property CurrentContext: TRegistryContext read GetCurrentContext write SetCurrentContext;
    4048  end;
     
    97105      Result := DefaultValue;
    98106    end;
     107end;
     108
     109function TRegistryEx.GetValue(const Name: string; const DefaultValue: Integer
     110  ): Integer;
     111begin
     112  Result := ReadIntegerWithDefault(Name, DefaultValue);
     113end;
     114
     115function TRegistryEx.GetValue(const Name: string; const DefaultValue: string
     116  ): string;
     117begin
     118  Result := ReadStringWithDefault(Name, DefaultValue);
     119end;
     120
     121function TRegistryEx.GetValue(const Name: string; const DefaultValue: Boolean
     122  ): Boolean;
     123begin
     124  Result := ReadBoolWithDefault(Name, DefaultValue);
     125end;
     126
     127function TRegistryEx.GetValue(const Name: string; const DefaultValue: Double
     128  ): Double;
     129begin
     130  Result := ReadFloatWithDefault(Name, DefaultValue);
     131end;
     132
     133procedure TRegistryEx.SetValue(const Name: string; const Value: Integer);
     134begin
     135  WriteInteger(Name, Value);
     136end;
     137
     138procedure TRegistryEx.SetValue(const Name: string; const Value: string);
     139begin
     140  WriteString(Name, Value);
     141end;
     142
     143procedure TRegistryEx.SetValue(const Name: string; const Value: Boolean);
     144begin
     145  WriteBool(Name, Value);
     146end;
     147
     148procedure TRegistryEx.SetValue(const Name: string; const Value: Double);
     149begin
     150  WriteFloat(Name, Value);
    99151end;
    100152
  • trunk/UCore.lfm

    r19 r20  
    33  OnDestroy = DataModuleDestroy
    44  OldCreateOrder = False
    5   Height = 693
    6   HorizontalOffset = 640
    7   VerticalOffset = 275
    8   Width = 980
    9   PPI = 144
     5  Height = 578
     6  HorizontalOffset = 533
     7  VerticalOffset = 229
     8  Width = 817
     9  PPI = 120
    1010  object ImageList1: TImageList
    1111    Height = 32
    1212    Width = 32
    13     left = 441
    14     top = 204
     13    left = 368
     14    top = 170
    1515    Bitmap = {
    1616      4C690C000000200000002000000061C66E0061C66E0061C66E0061C66E0061C6
     
    15531553    }
    15541554  end
    1555   object XMLConfig1: TXMLConfig
    1556     StartEmpty = False
    1557     RootName = 'CONFIG'
    1558     ReadOnly = False
    1559     left = 441
    1560     top = 324
    1561   end
    15621555  object ActionList1: TActionList
    15631556    Images = ImageList1
    1564     left = 446
    1565     top = 116
     1557    left = 372
     1558    top = 97
    15661559    object AExit: TAction
    15671560      Caption = 'Exit'
     
    15931586    POFilesFolder = 'Languages'
    15941587    OnTranslate = CoolTranslator1Translate
    1595     left = 432
    1596     top = 456
     1588    left = 360
     1589    top = 380
    15971590  end
    15981591  object ApplicationInfo1: TApplicationInfo
     
    16111604    RegistryRoot = rrKeyCurrentUser
    16121605    License = 'CC0'
    1613     left = 120
    1614     top = 132
     1606    left = 100
     1607    top = 104
    16151608  end
    16161609  object PersistentForm1: TPersistentForm
    16171610    MinVisiblePart = 50
    16181611    EntireVisible = False
    1619     left = 121
    1620     top = 214
     1612    left = 101
     1613    top = 178
    16211614  end
    16221615end
  • trunk/UCore.pas

    r19 r20  
    66
    77uses
    8   Classes, SysUtils, XMLConf, FileUtil, Controls, ActnList, UDatabase,
    9   UCoolTranslator, UApplicationInfo, UPersistentForm, Forms;
     8  Classes, SysUtils, FileUtil, Controls, ActnList, UDatabase,
     9  UCoolTranslator, UApplicationInfo, UPersistentForm, Forms, URegistry;
    1010
    1111type
     
    2323    ImageList1: TImageList;
    2424    PersistentForm1: TPersistentForm;
    25     XMLConfig1: TXMLConfig;
    2625    procedure AAboutExecute(Sender: TObject);
    2726    procedure ADatabaseConnectExecute(Sender: TObject);
     
    3332    procedure DataModuleDestroy(Sender: TObject);
    3433  private
    35     FDatabase: TDatabase;
     34    FDbClient: TDbClient;
    3635    Initialized: Boolean;
    37     procedure InitEngines;
    38     procedure InitDataTypes;
    39     procedure SetDatabase(AValue: TDatabase);
     36    procedure SetDbClient(AValue: TDbClient);
    4037  public
    4138    Preferences: TPreferences;
    42     Databases: TDatabases;
    43     Engines: TDatabaseEngines;
    44     DataTypes: TDataTypes;
     39    DbManager: TDbManager;
    4540    procedure LoadConfig;
    4641    procedure SaveConfig;
     
    4843    procedure Done;
    4944    procedure UpdateInterface;
    50     property Database: TDatabase read FDatabase write SetDatabase;
     45    property DbClient: TDbClient read FDbClient write SetDbClient;
    5146  end;
    5247
     
    5449  Core: TCore;
    5550
     51const
     52  DefaultRegKey = '\Software\Chronosoft\MyData';
     53
    5654
    5755implementation
    5856
    5957uses
    60   UEngineXML, UEngineMySQL, UEngineSQLite, UFormTables, UFormConnect,
    61   UFormDatabases, UDataTypes, UFormPreferences, UFormMain, UFormAbout;
     58  UFormTables, UFormConnect,
     59  UFormDatabases, UFormPreferences, UFormMain, UFormAbout;
    6260
    6361{$R *.lfm}
    6462
    65 resourcestring
    66   STypeString = 'String';
    67   STypeInteger = 'Integer';
    68   STypeFloat = 'Float';
    69   STypeBoolean = 'Boolean';
    70   STypeMapPosition = 'Map position';
    71   STypeImage = 'Image';
    72   STypeDate = 'Date';
    73   STypeTime = 'Time';
    74   STypeDateTime = 'Date and time';
    75   STypeReference = 'Reference';
    76 
    7763{ TCore }
    7864
    7965procedure TCore.DataModuleCreate(Sender: TObject);
    8066begin
    81   Databases := TDatabases.Create;
    82   Engines := TDatabaseEngines.Create;
    83   DataTypes := TDataTypes.Create;
     67  DbManager := TDbManager.Create;
    8468  Preferences := TPreferences.Create;
    8569end;
    8670
     71procedure TCore.DataModuleDestroy(Sender: TObject);
     72begin
     73  DbClient := nil;
     74  FreeAndNil(Preferences);
     75  FreeAndNil(DbManager);
     76end;
     77
    8778procedure TCore.AExitExecute(Sender: TObject);
    8879begin
     
    9283procedure TCore.ADatabaseDisconnectExecute(Sender: TObject);
    9384begin
    94   Database := nil;
     85  DbClient := nil;
    9586end;
    9687
    9788procedure TCore.ADatabaseConnectExecute(Sender: TObject);
     89var
     90  NewClient: TDbClient;
    9891begin
    9992  if FormDatabases.ShowModal = mrOk then begin
    100     Database := FormDatabases.SelectedDatabase;
     93    DbClient := nil;
     94    NewClient := FormDatabases.SelectedProfile.ClientType.DatabaseClientClass.Create;
     95    NewClient.ConnectProfile := FormDatabases.SelectedProfile;
     96    DbClient := NewClient;
    10197  end;
    10298end;
     
    122118  I: Integer;
    123119begin
    124   for I := 0 to DataTypes.Count - 1 do begin
    125     TDataType(DataTypes[I]).Title := CoolTranslator1.TranslateText(TDataType(DataTypes[I]).Title, TDataType(DataTypes[I]).Title);
    126   end;
    127 end;
    128 
    129 procedure TCore.DataModuleDestroy(Sender: TObject);
    130 begin
    131   FreeAndNil(Preferences);
    132   FreeAndNil(DataTypes);
    133   FreeAndNil(Engines);
    134   FreeAndNil(Databases);
    135 end;
    136 
    137 procedure TCore.InitEngines;
    138 var
    139   NewEngine: TDatabaseEngine;
    140 begin
    141   Engines.Clear;
    142   NewEngine := Engines.RegisterEngine('XML file', TDatabaseXML);
    143   NewEngine.UseTypes(DataTypes, [ftString, ftInteger, ftDateTime, ftBoolean, ftFloat]);
    144 
    145   NewEngine := Engines.RegisterEngine('MySQL', TDatabaseMySQL);
    146   NewEngine.UseTypes(DataTypes, [ftString, ftInteger, ftDateTime, ftBoolean, ftFloat,
    147     ftReference]);
    148 
    149   NewEngine := Engines.RegisterEngine('SQLite', TDatabaseSQLite);
    150   NewEngine.UseTypes(DataTypes, [ftString, ftInteger, ftDateTime, ftBoolean, ftFloat]);
    151 end;
    152 
    153 procedure TCore.InitDataTypes;
    154 begin
    155   DataTypes.Clear;
    156   with DataTypes do begin
    157     RegisterType(1, 'String', STypeString, ftString, TFieldString);
    158     RegisterType(2, 'Integer', STypeInteger, ftInteger, TFieldInteger);
    159     RegisterType(3, 'DateTime', STypeDateTime, ftDateTime, TFieldDateTime);
    160     RegisterType(4, 'Boolean', STypeBoolean, ftBoolean, TFieldBoolean);
    161     RegisterType(5, 'Float', STypeFloat, ftFloat, TFieldFloat);
    162     RegisterType(6, 'MapPosition', STypeMapPosition, ftMapPosition, TFieldMapPosition);
    163     RegisterType(7, 'Date', STypeDate, ftDate, TFieldDate);
    164     RegisterType(8, 'Time', STypeTime, ftTime, TFieldTime);
    165     RegisterType(9, 'Image', STypeImage, ftImage, TFieldImage);
    166     RegisterType(10, 'Reference', STypeReference, ftReference, TFieldReference);
    167   end;
    168 end;
    169 
    170 procedure TCore.SetDatabase(AValue: TDatabase);
    171 begin
    172   if FDatabase = AValue then Exit;
    173   if Assigned(FDatabase) then begin
    174     FDatabase.Save;
    175     FDatabase.Clear;
    176   end;
    177   FDatabase := AValue;
    178   if Assigned(FDatabase) then begin
    179     FDatabase.Load;
    180     Preferences.LastDatabaseName := FDatabase.Name;
    181   end;
    182   FormTables.Database := FDatabase;
     120  for I := 0 to DbManager.DataTypes.Count - 1 do begin
     121    TDataType(DbManager.DataTypes[I]).Title := CoolTranslator1.TranslateText(TDataType(DbManager.DataTypes[I]).Title, TDataType(DbManager.DataTypes[I]).Title);
     122  end;
     123end;
     124
     125procedure TCore.SetDbClient(AValue: TDbClient);
     126begin
     127  if FDbClient = AValue then Exit;
     128  if Assigned(FDbClient) then begin
     129    DbClient.Save;
     130    FDbClient.Free;
     131  end;
     132  FDbClient := AValue;
     133  if Assigned(FDbClient) then begin
     134    DbClient.Load;
     135    Preferences.LastDatabaseName := FDbClient.ConnectProfile.Name;
     136    if not Assigned(FormTables.Tables) then
     137      FormTables.Tables := TTables.Create;
     138    DbClient.LoadTables(FormTables.Tables);
     139  end;
    183140  UpdateInterface;
    184141end;
    185142
    186143procedure TCore.LoadConfig;
    187 var
    188   I: Integer;
    189   NewDatabase: TDatabase;
    190   Engine: TDatabaseEngine;
    191 begin
    192   XMLConfig1.FileName := 'Config.xml';
    193   Databases.Count := XMLConfig1.GetValue('Database/Count', 0);
    194   for I := 0 to Databases.Count - 1 do begin
    195     Engine := Core.Engines.FindByName(XMLConfig1.GetValue('Database/Item' + IntToStr(I) + '/Engine', ''));
    196 
    197     NewDatabase := TDatabase.Create;
    198     NewDatabase.Engine := Engine;
    199     NewDatabase.Name := XMLConfig1.GetValue('Database/Item' + IntToStr(I) + '/Name', '');
    200     NewDatabase.ConnectionString := XMLConfig1.GetValue('Database/Item' + IntToStr(I) + '/ConnectionString', '');
    201     Databases[I] := NewDatabase;
    202   end;
    203   //Databases.ConnectionString := XMLConfig1.GetValue('ConnectionString', 'file://' + ExtractFileDir(Application.ExeName) + '/data.xml');
    204   Preferences.RememberDatabase := XMLConfig1.GetValue('RememberDatabase', True);
    205   Preferences.LastDatabaseName := XMLConfig1.GetValue('LastDatabaseName', '');
    206   CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(XMLConfig1.GetValue('Language', ''));
     144begin
     145  with TRegistryEx.Create do
     146  try
     147    CurrentContext := TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey);
     148    Preferences.RememberDatabase := GetValue('RememberDatabase', True);
     149    Preferences.LastDatabaseName := GetValue('LastDatabaseName', '');
     150    CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(
     151      GetValue('Language', ''));
     152  finally
     153    Free;
     154  end;
     155  DbManager.ConnectProfiles.LoadFromRegistry(TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey + '\Database'));
    207156end;
    208157
    209158procedure TCore.SaveConfig;
    210 var
    211   I: Integer;
    212 begin
    213   XMLConfig1.SetValue('Database/Count', Databases.Count);
    214   for I := 0 to Databases.Count - 1 do begin
    215     XMLConfig1.SetValue('Database/Item' + IntToStr(I) + '/Name', TDatabase(Databases[I]).Name);
    216     XMLConfig1.SetValue('Database/Item' + IntToStr(I) + '/ConnectionString', TDatabase(Databases[I]).ConnectionString);
    217     XMLConfig1.SetValue('Database/Item' + IntToStr(I) + '/Engine', TDatabase(Databases[I]).Engine.Name);
    218   end;
    219   XMLConfig1.SetValue('RememberDatabase', Preferences.RememberDatabase);
    220   XMLConfig1.SetValue('LastDatabaseName', Preferences.LastDatabaseName);
    221   XMLConfig1.SetValue('Language', CoolTranslator1.Language.Code);
     159begin
     160  with TRegistryEx.Create do
     161  try
     162    CurrentContext := TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey);
     163    SetValue('RememberDatabase', Preferences.RememberDatabase);
     164    SetValue('LastDatabaseName', Preferences.LastDatabaseName);
     165    SetValue('Language', CoolTranslator1.Language.Code);
     166  finally
     167    Free;
     168  end;
     169  DbManager.ConnectProfiles.SaveToRegistry(TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey + '\Database'));
    222170end;
    223171
    224172procedure TCore.Init;
     173var
     174  ConnectProfile: TDbConnectProfile;
    225175begin
    226176  if not Initialized then begin
     
    230180      CoolTranslator1.POFilesFolder := '/usr/share/MyData/languages';
    231181    {$ENDIF}
    232     InitDataTypes;
    233     InitEngines;
    234182    FormConnect.Init;
    235183    Initialized := True;
     
    238186    UpdateInterface;
    239187    if Preferences.RememberDatabase then begin
    240       Database := Databases.FindByName(Preferences.LastDatabaseName);
     188      ConnectProfile := DbManager.ConnectProfiles.FindByName(Preferences.LastDatabaseName);
     189      if Assigned(ConnectProfile) then
     190        DbClient := ConnectProfile.ClientType.DatabaseClientClass.Create;
    241191    end else ADatabaseConnect.Execute;
    242192  end;
     
    250200procedure TCore.UpdateInterface;
    251201begin
    252   ADatabaseDisconnect.Enabled := Assigned(FormTables.Database);
     202  ADatabaseDisconnect.Enabled := Assigned(DbClient);
    253203  FormMain.UpdateInterface;
    254204end;
  • trunk/UDatabase.pas

    r15 r20  
    77uses
    88  Classes, SysUtils, Contnrs, ExtCtrls, StdCtrls, EditBtn, dialogs, USqlDatabase,
    9   SpecializedDictionary;
     9  SpecializedDictionary, URegistry;
    1010
    1111type
    1212  TTable = class;
    13   TDatabaseEngine = class;
    14   TDatabaseClient = class;
    15   TDatabase = class;
     13  TDbClientType = class;
     14  TDbClient = class;
    1615  TDataType = class;
     16  TDbManager = class;
    1717
    1818  TFieldType = (ftString, ftInteger, ftDateTime, ftBoolean, ftFloat, ftImage,
     
    104104    Records: TRecords;
    105105    Fields: TFields;
    106     Database: TDatabase;
     106    DbClient: TDbClient;
    107107    RecordsCount: Integer;
    108108    procedure LoadRecords;
     
    116116
    117117  TTables = class(TObjectList)
    118     Database: TDatabase;
     118    DbClient: TDbClient;
    119119    function SearchByName(Name: string): TTable;
    120120  end;
    121121
    122   // CSV, INI, WinRegistry, XML, sqlite, mysql
    123 
    124   { TDatabase }
    125 
    126   TDatabase = class
     122  { TDbConnectParams }
     123
     124  TDbConnectParams = class
     125  protected
     126    FConnectionString: string;
     127    function GetConnectionString: string; virtual;
     128    procedure SetConnectionString(AValue: string); virtual;
     129  public
     130    property ConnectionString: string read GetConnectionString
     131      write SetConnectionString;
     132  end;
     133
     134  TDbConnectParamsClass = class of TDbConnectParams;
     135
     136  { TDbConnectProfile }
     137
     138  TDbConnectProfile = class
    127139  private
    128     FEngine: TDatabaseEngine;
    129     procedure SetEngine(AValue: TDatabaseEngine);
     140    FClientType: TDbClientType;
     141    procedure SetClientType(AValue: TDbClientType);
    130142  public
    131143    Name: string;
    132     Tables: TTables;
    133     ConnectionString: string;
    134     Client: TDatabaseClient;
    135     constructor Create;
    136     destructor Destroy; override;
    137     procedure Load; virtual;
    138     procedure Save; virtual;
    139     procedure Clear;
    140     property Engine: TDatabaseEngine read FEngine write SetEngine;
    141   end;
    142 
    143   { TDatabases }
    144 
    145   TDatabases = class(TObjectList)
    146     function FindByName(Name: string): TDatabase;
    147   end;
    148 
    149   TDatabaseClass = class of TDatabase;
     144    Params: TDbConnectParams;
     145    property ClientType: TDbClientType read FClientType write SetClientType;
     146  end;
     147
     148  { TDbConnectProfiles }
     149
     150  TDbConnectProfiles = class(TObjectList)
     151    DbManager: TDbManager;
     152    procedure LoadFromRegistry(Context: TRegistryContext);
     153    procedure SaveToRegistry(Context: TRegistryContext);
     154    function FindByName(Name: string): TDbConnectProfile;
     155  end;
    150156
    151157  { TDataType }
     
    168174  end;
    169175
    170   { TDatabaseClient }
    171 
    172   TDatabaseClient = class
    173     Database: TDatabase;
     176  { TDbClient }
     177
     178  TDbClient = class
     179  private
     180    function GetClientType: TDbClientType;
     181  protected
     182    FConnectProfile: TDbConnectProfile;
     183    procedure SetConnectProfile(AValue: TDbConnectProfile); virtual;
     184  public
    174185    procedure Query(DbRows: TDbRows; Text: string); virtual;
     186    procedure LoadTables(Tables: TTables); virtual;
    175187    constructor Create; virtual;
    176188    procedure Load; virtual;
    177189    procedure Save; virtual;
    178   end;
    179 
    180   TDatabaseClientClass = class of TDatabaseClient;
     190    property ClientType: TDbClientType read GetClientType;
     191    property ConnectProfile: TDbConnectProfile read FConnectProfile
     192      write SetConnectProfile;
     193  end;
     194
     195  TDbClientClass = class of TDbClient;
    181196
    182197  TFieldTypeSet = set of TFieldType;
    183198
    184   { TDatabaseEngine }
    185 
    186   TDatabaseEngine = class
     199  { TDbClientType }
     200
     201  TDbClientType = class
    187202    Name: string;
    188203    DataTypes: TDataTypes;
    189     DatabaseClientClass: TDatabaseClientClass;
     204    DatabaseClientClass: TDbClientClass;
     205    ConnectParmasClass: TDbConnectParamsClass;
    190206    procedure UseTypes(ADataTypes: TDataTypes; Types: TFieldTypeSet);
    191207    constructor Create;
     
    193209  end;
    194210
    195   { TDatabaseEngines }
    196 
    197   TDatabaseEngines = class(TObjectList)
    198     function RegisterEngine(Name: string; DatabaseClass: TDatabaseClientClass): TDatabaseEngine;
    199     function FindByName(Name: string): TDatabaseEngine;
     211  { TDbClientTypes }
     212
     213  TDbClientTypes = class(TObjectList)
     214    function RegisterClientType(Name: string; DatabaseClass: TDbClientClass;
     215      ConnectParamsClass: TDbConnectParamsClass): TDbClientType;
     216    function FindByName(Name: string): TDbClientType;
    200217  end;
    201218
     
    205222  end;
    206223
     224  { TDbManager }
     225
     226  TDbManager = class
     227  private
     228    procedure InitClientTypes;
     229    procedure InitDataTypes;
     230  public
     231    ConnectProfiles: TDbConnectProfiles;
     232    ClientTypes: TDbClientTypes;
     233    DataTypes: TDataTypes;
     234    constructor Create;
     235    destructor Destroy; override;
     236  end;
     237
     238resourcestring
     239  STypeString = 'String';
     240  STypeInteger = 'Integer';
     241  STypeFloat = 'Float';
     242  STypeBoolean = 'Boolean';
     243  STypeMapPosition = 'Map position';
     244  STypeImage = 'Image';
     245  STypeDate = 'Date';
     246  STypeTime = 'Time';
     247  STypeDateTime = 'Date and time';
     248  STypeReference = 'Reference';
     249
    207250
    208251implementation
    209252
    210253uses
    211   UDataTypes;
     254  UDataTypes,
     255  UEngineXML, UEngineMySQL, UEngineSQLite, UDbClientRegistry;
     256
     257{ TDbManager }
     258
     259procedure TDbManager.InitClientTypes;
     260var
     261  ClientType: TDbClientType;
     262begin
     263  ClientTypes.Clear;
     264
     265  ClientType := ClientTypes.RegisterClientType('XML file', TDatabaseXML, TDbConnectParamsXml);
     266  ClientType.UseTypes(DataTypes, [ftString, ftInteger, ftDateTime, ftBoolean, ftFloat]);
     267
     268  ClientType := ClientTypes.RegisterClientType('MySQL', TDatabaseMySQL, TDbConnectParamsMySql);
     269  ClientType.UseTypes(DataTypes, [ftString, ftInteger, ftDateTime, ftBoolean, ftFloat,
     270    ftReference]);
     271
     272  ClientType := ClientTypes.RegisterClientType('SQLite', TDatabaseSQLite, TDbConnectParamsSqlite);
     273  ClientType.UseTypes(DataTypes, [ftString, ftInteger, ftDateTime, ftBoolean, ftFloat]);
     274
     275  ClientType := ClientTypes.RegisterClientType('Registry', TDbClientRegistry, TDbConnectParamsRegistry);
     276  ClientType.UseTypes(DataTypes, [ftString, ftInteger]);
     277end;
     278
     279procedure TDbManager.InitDataTypes;
     280begin
     281  DataTypes.Clear;
     282  with DataTypes do begin
     283    RegisterType(1, 'String', STypeString, ftString, TFieldString);
     284    RegisterType(2, 'Integer', STypeInteger, ftInteger, TFieldInteger);
     285    RegisterType(3, 'DateTime', STypeDateTime, ftDateTime, TFieldDateTime);
     286    RegisterType(4, 'Boolean', STypeBoolean, ftBoolean, TFieldBoolean);
     287    RegisterType(5, 'Float', STypeFloat, ftFloat, TFieldFloat);
     288    RegisterType(6, 'MapPosition', STypeMapPosition, ftMapPosition, TFieldMapPosition);
     289    RegisterType(7, 'Date', STypeDate, ftDate, TFieldDate);
     290    RegisterType(8, 'Time', STypeTime, ftTime, TFieldTime);
     291    RegisterType(9, 'Image', STypeImage, ftImage, TFieldImage);
     292    RegisterType(10, 'Reference', STypeReference, ftReference, TFieldReference);
     293  end;
     294end;
     295
     296constructor TDbManager.Create;
     297begin
     298  ConnectProfiles := TDbConnectProfiles.Create;
     299  ConnectProfiles.DbManager := Self;
     300  ClientTypes := TDbClientTypes.Create;
     301  DataTypes := TDataTypes.Create;
     302  InitDataTypes;
     303  InitClientTypes;
     304end;
     305
     306destructor TDbManager.Destroy;
     307begin
     308  DataTypes.Free;
     309  ClientTypes.Free;
     310  ConnectProfiles.Free;
     311  inherited Destroy;
     312end;
     313
     314{ TDbConnectParams }
     315
     316procedure TDbConnectParams.SetConnectionString(AValue: string);
     317begin
     318  if FConnectionString = AValue then Exit;
     319  FConnectionString := AValue;
     320end;
     321
     322function TDbConnectParams.GetConnectionString: string;
     323begin
     324  Result := FConnectionString;
     325end;
     326
     327{ TDbConnectProfiles }
     328
     329procedure TDbConnectProfiles.LoadFromRegistry(Context: TRegistryContext);
     330var
     331  I: Integer;
     332  ConnectProfile: TDbConnectProfile;
     333  ClientType: TDbClientType;
     334begin
     335  with TRegistryEx.Create do
     336  try
     337    CurrentContext := Context;
     338    Count := GetValue('Count', 0);
     339    for I := 0 to Count - 1 do begin
     340      OpenKey(Context.Key + '\Item' + IntToStr(I), True);
     341      ClientType := DbManager.ClientTypes.FindByName(GetValue('ClientType', ''));
     342      if not Assigned(ClientType) and (DbManager.ClientTypes.Count > 0) then
     343        ClientType := TDbClientType(DbManager.ClientTypes[0]);
     344
     345      ConnectProfile := TDbConnectProfile.Create;
     346      ConnectProfile.ClientType := ClientType;
     347      ConnectProfile.Name := GetValue('Name', '');
     348      ConnectProfile.Params.ConnectionString := GetValue('ConnectionString', '');
     349      Items[I] := ConnectProfile;
     350    end;
     351  finally
     352    Free;
     353  end;
     354end;
     355
     356procedure TDbConnectProfiles.SaveToRegistry(Context: TRegistryContext);
     357var
     358  I: Integer;
     359begin
     360  with TRegistryEx.Create do
     361  try
     362    CurrentContext := Context;
     363    SetValue('Count', Count);
     364    for I := 0 to Count - 1 do begin
     365      OpenKey(Context.Key + '\Item' + IntToStr(I), True);
     366      SetValue('Name', TDbConnectProfile(Items[I]).Name);
     367      SetValue('ConnectionString', TDbConnectProfile(Items[I]).Params.ConnectionString);
     368      SetValue('ClientType', TDbConnectProfile(Items[I]).ClientType.Name);
     369    end;
     370  finally
     371    Free;
     372  end;
     373end;
     374
     375function TDbConnectProfiles.FindByName(Name: string): TDbConnectProfile;
     376var
     377  I: Integer;
     378begin
     379  I := 0;
     380  while (I < Count) and (TDbConnectProfile(Items[I]).Name <> Name) do Inc(I);
     381  if (I < Count) then Result := TDbConnectProfile(Items[I])
     382    else Result := nil;
     383end;
     384
     385{ TDbConnectProfile }
     386
     387procedure TDbConnectProfile.SetClientType(AValue: TDbClientType);
     388begin
     389  if FClientType = AValue then Exit;
     390  if Assigned(FClientType) then begin
     391    Params.Free;
     392  end;
     393  FClientType := AValue;
     394  if Assigned(FClientType) then begin
     395    Params := FClientType.ConnectParmasClass.Create;
     396  end;
     397end;
    212398
    213399{ TTables }
     
    223409end;
    224410
    225 { TDatabases }
    226 
    227 function TDatabases.FindByName(Name: string): TDatabase;
    228 var
    229   I: Integer;
    230 begin
    231   I := 0;
    232   while (I < Count) and (TDatabase(Items[I]).Name <> Name) do Inc(I);
    233   if (I < Count) then Result := TDatabase(Items[I])
    234     else Result := nil;
    235 end;
    236 
    237 { TDatabaseClient }
    238 
    239 procedure TDatabaseClient.Query(DbRows: TDbRows; Text: string);
    240 begin
    241 end;
    242 
    243 constructor TDatabaseClient.Create;
    244 begin
    245 end;
    246 
    247 procedure TDatabaseClient.Load;
    248 begin
    249 
    250 end;
    251 
    252 procedure TDatabaseClient.Save;
    253 begin
    254 
    255 end;
    256 
    257 { TDatabaseEngines }
    258 
    259 function TDatabaseEngines.RegisterEngine(Name: string;
    260   DatabaseClass: TDatabaseClientClass): TDatabaseEngine;
    261 begin
    262   Result := TDatabaseEngine.Create;
     411{ TDbClient }
     412
     413function TDbClient.GetClientType: TDbClientType;
     414begin
     415  Result := FConnectProfile.ClientType;
     416end;
     417
     418procedure TDbClient.SetConnectProfile(AValue: TDbConnectProfile);
     419begin
     420  if FConnectProfile = AValue then Exit;
     421  FConnectProfile := AValue;
     422end;
     423
     424procedure TDbClient.Query(DbRows: TDbRows; Text: string);
     425begin
     426end;
     427
     428procedure TDbClient.LoadTables(Tables: TTables);
     429begin
     430  Tables.Clear;
     431end;
     432
     433constructor TDbClient.Create;
     434begin
     435  inherited;
     436end;
     437
     438procedure TDbClient.Load;
     439begin
     440
     441end;
     442
     443procedure TDbClient.Save;
     444begin
     445
     446end;
     447
     448{ TDbClientTypes }
     449
     450function TDbClientTypes.RegisterClientType(Name: string;
     451  DatabaseClass: TDbClientClass; ConnectParamsClass: TDbConnectParamsClass): TDbClientType;
     452begin
     453  Result := TDbClientType.Create;
    263454  Result.Name := Name;
    264455  Result.DatabaseClientClass := DatabaseClass;
     456  Result.ConnectParmasClass := ConnectParamsClass;
    265457  Add(Result);
    266458end;
    267459
    268 function TDatabaseEngines.FindByName(Name: string): TDatabaseEngine;
     460function TDbClientTypes.FindByName(Name: string): TDbClientType;
    269461var
    270462  I: Integer;
    271463begin
    272464  I := 0;
    273   while (I < Count) and (TDatabaseEngine(Items[I]).Name <> Name) do Inc(I);
    274   if I < Count then Result := TDatabaseEngine(Items[I])
     465  while (I < Count) and (TDbClientType(Items[I]).Name <> Name) do Inc(I);
     466  if I < Count then Result := TDbClientType(Items[I])
    275467    else Result := nil;
    276468end;
     
    310502end;
    311503
    312 { TDatabaseEngine }
    313 
    314 procedure TDatabaseEngine.UseTypes(ADataTypes: TDataTypes; Types: TFieldTypeSet);
     504{ TDbClientType }
     505
     506procedure TDbClientType.UseTypes(ADataTypes: TDataTypes; Types: TFieldTypeSet);
    315507var
    316508  I: TFieldType;
     
    321513end;
    322514
    323 constructor TDatabaseEngine.Create;
     515constructor TDbClientType.Create;
    324516begin
    325517  DataTypes := TDataTypes.Create;
     
    327519end;
    328520
    329 destructor TDatabaseEngine.Destroy;
     521destructor TDbClientType.Destroy;
    330522begin
    331523  DataTypes.Free;
     
    506698  Records.Clear;
    507699  DbRows := TDbRows.Create;
    508   Database.Client.Query(DbRows, 'SELECT * FROM ' + Name);
     700  DbClient.Query(DbRows, 'SELECT * FROM ' + Name);
    509701  for I := 0 to DbRows.Count - 1 do begin
    510702    NewRecord := TRecord.Create;
     
    531723  Records.Clear;
    532724  DbRows := TDbRows.Create;
    533   Database.Client.Query(DbRows, 'SELECT COUNT(*) FROM ' + Name);
     725  DbClient.Query(DbRows, 'SELECT COUNT(*) FROM ' + Name);
    534726  if DbRows.Count = 1 then begin
    535727    RecordsCount := StrToInt(TDictionaryStringString(DbRows[0]).Items[0].Value);
     
    561753end;
    562754
    563 { TDatabase }
    564 
    565 procedure TDatabase.SetEngine(AValue: TDatabaseEngine);
    566 begin
    567   if FEngine = AValue then Exit;
    568   if Assigned(Client) then
    569     Client.Free;
    570   FEngine := AValue;
    571   if Assigned(FEngine) then begin
    572     Client := Engine.DatabaseClientClass.Create;
    573     Client.Database := Self;
    574   end;
    575 end;
    576 
    577 constructor TDatabase.Create;
    578 begin
    579   Tables := TTables.Create;
    580   Tables.Database := Self;
    581   Engine := nil;
    582 end;
    583 
    584 destructor TDatabase.Destroy;
    585 begin
    586   Engine := nil;
    587   Tables.Free;
    588   inherited Destroy;
    589 end;
    590 
    591 procedure TDatabase.Load;
    592 begin
    593   if Assigned(Client) then Client.Load;
    594 end;
    595 
    596 procedure TDatabase.Save;
    597 begin
    598   if Assigned(Client) then Client.Save;
    599 end;
    600 
    601 procedure TDatabase.Clear;
    602 begin
    603   Tables.Clear;
    604 end;
    605 
    606755end.
    607756
Note: See TracChangeset for help on using the changeset viewer.