Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 21:22   #1
sangls
Новичок
Джуниор
 
Аватар для sangls
 
Регистрация: 07.02.2009
Сообщений: 2
По умолчанию Программка по работе с реестром, обьясните чуток

Мне помогли с написанием программы, не моглибы вы обьяснить для чего некоторые процедуры функции и т.п. Заранее спасибо
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, Outline, ComCtrls, ImgList, ExtCtrls, Menus;

type
  TRegForm = class(TForm)
    TreeView1: TTreeView;
    ListView1: TListView;
    ImageList1: TImageList;
    ImageList2: TImageList;
    Splitter1: TSplitter;
    MainMenu1: TMainMenu;
    Cjhfybnm1: TMenuItem;
    N1: TMenuItem;
    memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure FormDestroy(Sender: TObject);
    procedure TreeView1Expanded(Sender: TObject; Node: TTreeNode);
    procedure TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure N1Click(Sender: TObject);
    procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
   procedure ShowSubKeys(ParentNode: TTreeNode;depth: Integer);
   function GetFullNodeName(Node: TTreeNode):string;
  end;

var
  RegForm: TRegForm;

implementation
uses registry, Unit1;
{$R *.DFM}
var  reg : TRegistry;

function TRegForm.GetFullNodeName(Node: TTreeNode):string;
var CurNode : TTreeNode;
begin
 Result:=''; CurNode := Node;
 while CurNode.Parent<>nil do
 begin
  Result:= '\'+CurNode.Text + Result;
  CurNode := CurNode.Parent;
 end;
end;

procedure TRegForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
var s: string;
KeyInfo : TRegKeyInfo;
ValueNames : TStringList;
i : Integer;
DataType : TRegDataType;
begin
 ListView1.Items.Clear;
 s:= GetFullNodeName(Node);
 if not Reg.OpenKeyReadOnly(s) then Exit;
 Reg.GetKeyInfo(KeyInfo);
 if KeyInfo.NumValues<=0 then Exit;
 ValueNames := TStringList.Create;
 Reg.GetValueNames(ValueNames);
 for i := 0 to ValueNames.Count-1 do
  with ListView1.Items.Add do
   begin
   Caption := ValueNames[i];
   DataType := Reg.GetDataType(ValueNames[i]);
   Case DataType of
    rdString: s := Reg.ReadString(ValueNames[i]);
    rdInteger: s:= '0x'+IntToHex(Reg.ReadInteger(ValueNames[i]),8);
    rdBinary: s:='Binary';
   else s:= '???';
   end;
   SubItems.Add(s);
   ImageIndex :=1;
   end;
 ValueNames.Free;
end;

procedure TRegForm.ShowSubKeys(ParentNode: TTreeNode;depth: Integer);
var ParentKey: string;
 KeyNames : TStringList;
 KeyInfo : TRegKeyInfo;
 CurNode : TTreeNode;
 i : Integer;
begin
 Cursor := crHourglass;
 TreeView1.Items.BeginUpdate;
 ParentKey := GetFullNodeName(ParentNode);
 if ParentKey<>'' then
  Reg.OpenKeyReadOnly(ParentKey)
 else
  Reg.OpenKeyReadOnly('\');
 Reg.GetKeyInfo(KeyInfo);
 if KeyInfo.NumSubKeys<=0 then Exit;
 KeyNames := TStringList.Create;
 Reg.GetKeyNames(KeyNames);
 While ParentNode.GetFirstChild<>nil do ParentNode.GetFirstChild.Delete;
 if (KeyNames.Count>0) then for i:=0 to KeyNames.Count-1 do
    begin
     Reg.OpenKeyReadOnly(ParentKey+'\'+KeyNames[i]);
     Reg.GetKeyInfo(KeyInfo);
     CurNode := TreeView1.Items.AddChild(ParentNode,KeyNames[i]);
     if KeyInfo.NumSubKeys>0 then
      begin
      TreeView1.Items.AddChild(CurNode,'');//
      end;
    end;
 KeyNames.Free;
 TreeView1.Items.EndUpdate;
 Cursor := crDefault;
end;

procedure TRegForm.FormCreate(Sender: TObject);
var root : TTreeNode;
begin
Reg := TRegistry.Create;
ListView1.ViewStyle := vsReport;
with ListView1 do
begin
 with Columns.Add do begin Width := ListView1.Width div 3 - 2;Caption := 'Name';end;
 with Columns.Add do begin Width := ListView1.Width div 3 * 2 - 2;Caption := 'Value';end;
end;
 TreeView1.Items.Clear;
 Reg.RootKey := HKEY_LOCAL_MACHINE;
 Root := TreeView1.Items.Add(nil,'HKEY_LOCAL_MACHINE');
 TreeView1.Items.AddChild(root,'');
end;

procedure TRegForm.FormDestroy(Sender: TObject);
begin
 Reg.Free;
end;

procedure TRegForm.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
begin
 ShowSubKeys(Node,1);
end;

procedure TRegForm.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
begin
with Node do
begin
 if Expanded then ImageIndex := 2
 else ImageIndex := 3;
end;
end;

procedure TRegForm.N1Click(Sender: TObject);
var i,j:integer;
    ste:string;
begin
treeview1.Items.Item[0].Expanded:=true;
treeview1.Items.Item[0].Item[3].Expanded:=true;
i:=treeview1.Items.Item[0].Item[3].Count-1;
for j:=0 to i do
              begin
              memo1.Lines.Add(treeview1.Items.Item[0].Item[3].Item[j].text);
              end;
form1.show;
end;

procedure TRegForm.OpenDialog1CanClose(Sender: TObject;
  var CanClose: Boolean);
begin
regform.Caption:='gggg';
end;

end.
Каждый человек по-своему прав а по-моему нет

Последний раз редактировалось sangls; 18.06.2010 в 11:08.
sangls вне форума Ответить с цитированием
Старый 17.06.2010, 21:29   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Прога по работе с реестром. Типа RegEdit'а.
Вряд ли кто-то возьмется "за так" вам весь код разжевывать.
Указывайте конкретные строки, поможем.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 17.06.2010, 21:32   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Для отображения кода есть тэг # - будь любезен поправить ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните FreeZeT Помощь студентам 3 15.06.2010 04:27
"Графика" (заплачу чуток) Student_ya Фриланс 6 01.06.2010 18:12
исправте чуток задачку Настенька..Блонди Помощь студентам 1 12.05.2009 13:26
Помогите написать прогу по работе с реестром. WIN API Mary_MJ Помощь студентам 3 04.05.2009 20:46