|
Определяет информацию о ключе компонента TRegistry.
Создание объекта
rkiObj=new TRegKeyInfo();
Собственные свойства
|
Свойство
| Тип
| Описание
|
Только чтение
| [TYPE]
| [DESC]
|
FileTime
| DateTime
| время последней записи в ключ
|
MaxDataLen
| Number
| максимальная длина значения данных
|
MaxSubKeyLen
| Number
| максимальная длина имени подключаемого ключа (в символах)
|
MaxValueLen
| Number
| максимальная длина имени значения данных
|
NumSubKeys
| Number
| количество подключаемых ключей
|
NumValues
| Number
| количество значений данных
|
|
Стандартные методы
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+ | Руководство пользователя
|
|
|