要编一个类似regedit注册表编辑器的软件,有没有现成的控件?
如题,没有控件有例子也成啊!
[解决办法]
直接在程序总运行regedit就行了。
[解决办法]
uses Registry;
用Registry单元中的TRegistry类
可以枚举、读写注册表
具体代码自己到网上搜吧
[解决办法]
自己写就可以啊
DELPHI有操作注册表的单元,或者直接用API也可以,然后用LIST显示出来就可以了
[解决办法]
HOHO~~伴水不厚道哦,这么晚了不睡觉给偶抢分分~~
[解决办法]
参考如下连接
http://www.realcoding.net/teach/Delphi7_prof/Glava5/Index6.html
搜索关键字为:Registry TRegistry TreeView HasChildren
[解决办法]
...职业抢分...
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, Outline, ComCtrls, ImgList, ExtCtrls;
type
TForml = class(TForm)
TreeViewl: TTreeView;
ListViewl: TListView;
ImageListl: TImageList;
Splitterl: TSplitter;
procedure FormCreate(Sender: TObject);
procedure TreeViewlChange(Sender: TObject; Node: TTreeNode);
procedure FormDestroy(Sender: TObject);
procedure TreeViewlExpanded(Sender: TObject; Node: TTreeNode);
procedure TreeViewlGetlmagelndex(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
procedure ShowSubKeys(ParentNode: TTreeNode;depth: Integer);
function GetFullNodeName(Node: TTreeNode):string;
end;
var
Forml: TForml;
implementation
uses registry;
{$R *.DFM}
var reg : TRegistry;
procedure TForml.FormCreate(Sender: TObject);
var root : TTreeNode;
begin
Reg := TRegistry.Create;
ListViewl.ViewStyle := vsReport;
with ListViewl do
begin
with Columns.Add do
begin
Width := ListViewl.Width div 3-2;
Caption := 'Name ';
end;
with Columns.Add do
begin
Width := ListViewl.Width div 3*2-2;
Caption := 'Value ';
end;
end;
TreeViewl.Items.Clear;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Root := TreeViewl.Items.Add(nil, 'HKEY_LOCAL_MACHINE ');
TreeViewl.Items.AddChildtroot, ' ');
end;
procedure TForml.FormDestroy(Sender: TObject);
begin
Reg.Free;
end;
function TForml.GetFullNodeName(Node: TTreeNode):string;
var CurNode : TTreeNode;
begin
Result:= ' '; CurNode := Node;
while CurNode.Parentonil do
begin
Result:= '\ '+CurNode.Text + Result;
CurNode := CurNode.Parent;
end;
end;
procedure TForml.TreeViewlChange(Sender: TObject; Node: TTreeNode);
var s: string;
Keylnfo : TRegKeylnfo;
ValueNames : TStringList;
i : Integer;
DataType : TRegDataType;
begin
ListViewl.Items.Clear;
s:= GetFullNodeName(Node);
if not Reg.OpenKeyReadOnly(s) then Exit;
Reg.GetKeylnfo(Keylnfo);
if Keylnfo.NumValues <=0 then Exit;
ValueNames := TStringList.Create;
Reg.GetValueNames(ValueNames);
for i := 0 to ValueNames.Count-1 do
with ListViewl.Items.Add do
begin
Caption := ValueNames[i];
DataType := Reg.GetDataType(ValueNames[i]);
Case DataType of
rdString: s := Reg.ReadString(ValueNames[i]);
rdlnteger: s:= '0x '+IntToHex(Reg.Readlnteger(ValueNames[i]),8);
rdBinary: s:= 'Binary ';
else s:= '??? ';
end;
Subltems.Add(s);
Imagelndex :=1;
end;
ValueNames.Free;
end;
procedure TForml.ShowSubKeys(ParentNode: TTreeNode;depth: Integer);
var ParentKey: string;
KeyNames : TStringList;
KeyInfo : TRegKeylnfo;
CurNode : TTreeNode; i : Integer;
begin
Cursor := crHourglass;
TreeViewl.Items.BeginUpdate;
ParentKey := GetFullNodeName(ParentNode);
if ParentKeyO1 ' then
Reg.OpenKeyReadOnly(ParentKey)
else
Reg.OpenKeyReadOnly( '\ ') ;
Reg.GetKeylnfo(Keylnfo) ;
if KeyInfo.NumSubKeys <=0 then Exit;
KeyNames := TStringList.Create;
Reg.GetKeyNames(KeyNames);
While ParentNode.GetFirstChildonil do ParentNode.GetFirstChild.Delete;
if (KeyNames.Count> 0) then for i:=0 to KeyNames.Count-1 do
begin
Reg.OpenKeyReadOnly(ParentKey+ '\ '-t-KeyNames[ i ]) ;
Reg.GetKeylnfo(Keylnfo);
CurNode := TreeViewl.Items.AddChild(ParentNode,KeyNames[i];
if KeyInfo.NumSubKeys> 0 then
begin
TreeViewl.Items.AddChild(CurNode, ' ');
end;
end;
KeyNames.Free;
TreeViewl.Items.EndUpdate;
Cursor := crDefault;
end;
procedure TForml.TreeViewlExpanded(Sender: TObject; Node: TTreeNode);
begin
ShowSubKeys(Node,1);
end;
procedure TForml.TreeViewlGetlmagelndex(Sender: TObject; Node: TTreeNode);
begin
with Node do
begin
if Expanded then Imagelndex := 2
else Imagelndex := 3;
end;
end;
end.
[解决办法]
DevExpress的TreeList控件专门有一个例子,演示注册表编辑器的做法。你直接基于这个例子修改即可。
[解决办法]
伴水在抢分~~~顶~~
[解决办法]
随便抢起啊
[解决办法]
一片混乱,抢?