JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

TRegKeyInfo

- компонент
Компонент TRegistry
Определяет информацию о ключе компонента TRegistry.

Создание объекта

rkiObj=new TRegKeyInfo();

Собственные свойства
Свойство Тип Описание
Только чтение
FileTime DateTime время последней записи в ключ
MaxDataLen Number максимальная длина значения данных
MaxSubKeyLen Number максимальная длина имени подключаемого ключа (в символах)
MaxValueLen Number максимальная длина имени значения данных
NumSubKeys Number количество подключаемых ключей
NumValues Number количество значений данных

Стандартные методы

Пример (JS+)
var sel_Itm=0;

// Главная форма
frm=new TForm();
frm.Caption="JS+ - компонент TRegKeyInfo";
frm.Width =800;
frm.Height=600;

// Строка состояния из двух сегментов
stb=new TStatusBar(frm);
stb.SimplePanel=false;
stp=new TStatusPanel(stb);
stp.Text=" Название ключа";
stp=new TStatusPanel(stb);
stp.Alignment=taCenter;
stp.Text="Последнее изменение";
stp.Width=frm.TextWidth(stp.Text)+20;
stb.Panels[0].Width=stb.ClientWidth-stp.Width;

// Внешняя панель
pnl=new TPanel(frm);
pnl.SetBounds(10,10,frm.ClientWidth-20,stb.Top-20);

// ListView
lsv=new TListView(pnl);
lsv.BorderStyle=bsSingle;
lsv.ViewStyle=vsReport;
lsv.ColumnClick=false;
lsv.Align=alRight;
lsv.Width=pnl.ClientWidth-250;
lsv.OnDblClick=lsv_DblClick;

for (i=w=0;i<3;i++) {
  lsc=new TListColumn(lsv);
  switch (i) {
    case 0: lsc.Caption=" Имя ";
            w+=(lsc.Width=180);
            break;

    case 1: lsc.Caption=" Тип ";
            w+=(lsc.Width=lsv.TextWidth("UNKNOWN")+15);
            break;

    case 2: lsc.Caption=" Значение ";
            lsc.Width=lsv.ClientWidth-w;
  }
}

// Разделитель
spl=new TSplitter(pnl);
spl.Align=alRight;
spl.Width=5;
spl.MinSize=pnl.ClientWidth-lsv.Width-spl.Width;

// Outline
otl=new TOutline(pnl);
otl.BorderStyle=bsSingle;
otl.Align=alClient;
otl.OnExpand=otl_Expand;
otl.OnClick=otl_Click;

// HKEY_CURRENT_USER
otn=new TOutlineNode(otl);
otn.numTag=eval(otn.Text="HKEY_CURRENT_USER");
Hand_Key(otn,false);

// HKEY_LOCAL_MACHINE
otn=new TOutlineNode(otl);
otn.numTag=eval(otn.Text="HKEY_LOCAL_MACHINE");
Hand_Key(otn,false);

frm.ShowModal();

function Hand_Key(Node,Recurse)
{
  var i,stl,reg,otn,stp_Str,key_Str=otl.ItemSeparator;
  var stp=stb.Panels[0];

  if (Node.HasItems) {
    if (Recurse==true) {
      stp_Str=stp.Text;
      for (i=Node.getFirstChild();i>=0;i=Node.getNextChild(i)) {
        stp.Text=" "+otl.Items[i].FullPath;
        Hand_Key(otl.Items[i],false);
      }
      stp.Text=stp_Str;
    }
    return;
  }

  if (Node.Level>1) {
    key_Str+=Node.FullPath.
    substr(Node.FullPath.indexOf(otl.ItemSeparator)+1);
    if (key_Str.substr(i=key_Str.length-1)==otl.ItemSeparator)
      key_Str=key_Str.substr(0,i);
  }

  reg=new TRegistry();
  reg.RootKey=Node.numTag;
  if (!reg.OpenKeyReadOnly(key_Str)) {
    reg.Delete();
    return;
  }

  reg.GetKeyNames(stl=new TStrings());
  for (i=0;i<stl.Count;i++) {
    if (stl.Strings[i]=="")
      continue;
    otn=new TOutlineNode(Node);
    otn.Text=stl.Strings[i];
    otn.numTag=Node.numTag;
  }
  stl.Delete();

  reg.Delete();
}

// Обработчик события OnExpand
function otl_Expand(otl,index)
{
  Hand_Key(otl.Items[index],true);
}

// Обработчик события OnClick/Outline
function otl_Click(otl)
{
  var i,j,k,d,reg,stl,lvi,otn,stl_Str,key_Str,type_Str,val_Str;
  var bin_Lst,rki=new TRegKeyInfo();

  if (sel_Itm==otl.SelectedItem)
    return;
  otn=otl.Items[sel_Itm=otl.SelectedItem];

  lsv.Clear();

  key_Str=otl.ItemSeparator+otn.FullPath.
  substr(otn.FullPath.indexOf(otl.ItemSeparator)+1);
  if (key_Str.substr(i=key_Str.length-1)==otl.ItemSeparator)
    key_Str=key_Str.substr(0,i);

  reg=new TRegistry();
  reg.RootKey=otn.numTag;
  if (!reg.OpenKeyReadOnly(key_Str)) {
    reg.Delete();
    return;
  }

  stb.Panels[0].Text=" "+otn.FullPath;
  stb.Panels[1].Text="";
  if (reg.GetKeyInfo(rki)==true) {
    d=new Date(rki.FileTime);
    stb.Panels[1].Text=d.toLocaleDateString();
    d.Delete();
  }

  stl=new TStrings();
  stl.Sorted=true;
  reg.GetValueNames(stl);
  for (i=0;i<stl.Count;i++) {
    if ((stl_Str=stl.Strings[i])=="")
      continue;

    type_Str=val_Str="";

    switch (reg.getDataType(stl_Str)) {
      case rdString :
      case rdExpandString: type_Str="STRING";
                           val_Str=reg.ReadString(stl_Str);
                           break;

      case rdInteger : type_Str="NUMBER";
                           j=reg.ReadInteger(stl_Str);
                           val_Str="0x"+j.toStringEx(16,8).toUpperCase();
                           break;

      case rdBinary : type_Str="BINARY";
                           stb.Panels[0].Text+=" 3";
                           if ((j=reg.GetDataSize(stl_Str))<=0)
                             break;
                           stb.Panels[0].Text+=" 1";
                           bin_Lst=new Array(j);
                           k=reg.ReadBinaryData(stl_Str,bin_Lst,j);
                           stb.Panels[0].Text+=" 2";
                           for (j=0;(j<k) && (j<100);j++)
                             if (bin_Lst[j]!=undefined)
                               val_Str+=" "+bin_Lst[j].toStringEx(16,2).toUpperCase();
                           stb.Panels[0].Text+=" 3";
                           if ((j==100) && (k>j))
                             val_Str+="...";
                           stb.Panels[0].Text+=" 4";
                           val_Str=val_Str.trim();
                           stb.Panels[0].Text+=" 5";
                           bin_Lst.Delete();
                           stb.Panels[0].Text+=" 6";
                           break;

                  default: type_Str="UNKNOWN";
    }

    lvi=new TListItem(lsv);
    lvi.Caption=stl_Str;
    lvi.SubItems.Add(type_Str);
    lvi.SubItems.Add(val_Str);
  }

  stl.Delete();
  reg.Delete();
}

// Обработчик события OnDblClick
function lsv_DblClick(lsv)
{
  var i,j,reg,lvi,otn,frp,lbe,lbl,mem,btn,key_Str,bin_Lst;
  var prm_Ttl,prm_Val="";

  if (((lvi=lsv.Selected)==null) || ((i=otl.SelectedItem)<0))
    return;
  otn=otl.Items[i];
  prm_Ttl=lvi.Caption;

  // Форма параметра
  frp=new TForm();
  frp.Caption=" Просмотр параметра";
  frp.Width=500;
  frp.KeyPreview=true;
  frp.OnKeyPress=frp_KeyPress;

  // Метка параметра
  lbe=new TLabeledEdit(frp);
  lbe.EditLabel.Caption="Параметр: ";
  lbe.BorderStyle=bsSingle;
  lbe.Left=10;
  lbe.Top =10+lbe.EditLabel.Height;
  lbe.Width=frp.ClientWidth-lbe.Left*2;
  lbe.ReadOnly=true;
  lbe.Text=prm_Ttl;

  // Метка значения
  lbl=new TLabel(frp);
  lbl.Caption="Значение: ";
  lbl.Left=lbe.Left;
  lbl.Top =lbe.Top+lbe.Height+10;

  // Текстовое поле значения
  mem=new TMemo(frp);
  mem.BorderStyle=bsSingle;
  mem.SetBounds(lbe.Left,lbl.Top+lbl.Height+5,lbe.Width,200);
  mem.ReadOnly=true;

  key_Str=otl.ItemSeparator+otn.FullPath.
  substr(otn.FullPath.indexOf(otl.ItemSeparator)+1);
  if (key_Str.substr(i=key_Str.length-1)==otl.ItemSeparator)
    key_Str=key_Str.substr(0,i);

  reg=new TRegistry();
  reg.RootKey=otn.numTag;
  if (!reg.OpenKeyReadOnly(key_Str)) {
    reg.Delete();
    frp.Delete();
    return;
  }

  switch (reg.getDataType(prm_Ttl)) {
    case rdString :
    case rdExpandString: prm_Val=reg.readString(prm_Ttl);
                         break;

    case rdInteger : i=reg.readInteger(prm_Ttl);
                         prm_Val=i.toStringEx(16,8).toUpperCase();
                         break;

    case rdBinary : if ((i=reg.GetDataSize(prm_Ttl))==0)
                           break;
                         bin_Lst=new Array(i);
                         j=reg.ReadBinaryData(prm_Ttl,bin_Lst,i);
                         for (i=0;i<j;i++)
                           if (bin_Lst[i]!=undefined)
                             prm_Val+=bin_Lst[i].toStringEx(16,2).toUpperCase();
                         bin_Lst.Delete();
                         break;

                default: reg.Delete();
                         frp.Delete();
                         return;
  }
  mem.Text=prm_Val;
  reg.Delete();

  // Кнопка
  btn=new TButton(frp);
  btn.Caption="ОК";
  btn.Left=lbe.Left+lbe.Width-btn.Width;
  btn.Top =mem.Top+mem.Height+10;
  btn.Hint="Закрыть окно";
  btn.ShowHint=true;
  btn.OnClick=btn_Click;

  frp.ClientHeight=btn.Top+btn.Height+10;

  mem.SetFocus();
  frp.ShowModal();
}

// Обработчик события OnKeyPress
function frp_KeyPress(frp,Key)
{
  switch (Key.Value) {
    case VK_ENTER :
    case VK_ESCAPE: frp.Close();
  }
}

// Обработчик события OnClick/Button
function btn_Click(btn)
{
  btn.Parent.Close();
}
Совместимость
C++ Builder/Delphi
См. также
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/Component/System/TRegistry/TRegKeyInfo.htm
© 2024,