请问HeyTommy,这段源码为什么出错,还有这如果是unit2怎么响应主界面unit1上的button1的click?100分 (100分)

  • 主题发起人 主题发起人 thebluehouse
  • 开始时间 开始时间
T

thebluehouse

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,registry, StdCtrls;

type
TForm1 = class(TForm)

Label1: TLabel;

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
TempReg:TRegistry;
TempValue:string;
begin
TempReg:=TRegistry.Create;
try
TempReg.RootKey:=HKEY_LOCAL_MACHINE;
if TempReg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/',false) then
begin
if tempreg.ValueExists('ProductId') then
begin
TempValue:=TempReg.ReadString('ProductId');
label1(出错).caption:=tempvalue;
end
else
ShowMessage('ProductID is not exist!');
end;
finally
TempReg.CloseKey;
TempReg.Free;
end;
end;

end.
 
用Delphi操作Windows 95/NT注册表

  类似于Windows 3.x中的ini文件,Windows 95、Windows NT中的注册表记录了有
关Windows系统、应用软件运行时的初始化参数等。用户经常需要在程序中操作注册
表,以控制软件的启动及保存软件运行中的若干主要参数等。
  Windows注册表的结构
  运行Regedit,可以进入注册表编辑器。如下图。图1
  上图中左框表示注册表的主键;右框中的名称指键值名,数据指键值;状态栏中显
示了当前打开的完整的主键名称。可以看出,整个注册表以树的结构及规则来组织,键
值名和键值组成了该树的叶子。
  操作注册表实例
  Delphi 3.0中的registry.dcu文件定义注册表的数据结构,并提供了TRegIniFile
这个不可视的控件。在程序中可通过该控件来操作注册表。
下面的例子描述了新建(修改)、读取、删除Windows注册表中
的主键HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windo ws/Curre ntVersion/Run下
的键值名RemoteOperate和键值remoteControl.exe 。
  unit s_registry;
  interface
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Contr ols, Forms,
Dial ogs, StdCtrls,registry;
  {注意:registry必须自己加上}
  type
  TForm1 = class(TForm)
  new: TButton;
  read: TButton;
  delete: TButton;
  procedure newClick(Sender: TObject);
  procedure readClick(Sender: TObject);
  procedure deleteClick(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;
  var
  Form1: TForm1;
  implementation
  {$R *.DFM}
  {新建(修改)注册表}
  procedure TForm1.newClick(Sender: TObject);
  var ini : TRegIniFile;
  begin
  ini := TRegIniFile.Create(‘');
  {创建TRegIniFile对象}
  ini.RootKey:=HKEY_LOCAL_MACHINE;
  {改变Rookey,缺省为HKEY_USERS}
  ini.WriteString(‘Software/Microsoft/Windows/CurrentVers ion/Run',{主键}
  ‘RemoteOperate', {键值名,若该名称与主键下的键值名相同,
则修改它的键值。否则,新建键值名及键值}
  ‘remoteControl.exe');  {键值}
    ini.Free;
  end;
  {读取键值}
  procedure TForm1.readClick(Sender: TObject);
  var ini  : TRegIniFile;
   RegStr: String;
  begin
   ini := TRegIniFile.Create(‘');
    ini.RootKey:=HKEY_LOCAL_MACHINE;
    RegStr:=ini.ReadString(‘Software/Microsoft/Windows/C urrentVersion/Ru n’,‘RemoteOperate’,‘');
  ini.Free;
  ShowMessage(RegStr);
  end;
  {删除键值名及键值}
  procedure TForm1.deleteClick(Sender: TObject);
  var ini  : TRegIniFile;
  begin
    ini := TRegIniFile.Create(‘');
    ini.RootKey:=HKEY_LOCAL_MACHINE;
    ini.DeleteKey(‘Software/Microsoft/Windows/CurrentVer sion/Run',‘Remo teOperate');
    ini.Free;
  end;
  end.
  上面的例子只描述了键值是字符串的情况。
用TRegIniFile的Rea dBool、ReadInteg er、WriteBool、WriteInteger方法
可对布尔型、整型的数据值进行操作。
 
procedure TForm1.WMEndSession(var Message: TWMEndSession);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/RunOnce',
True)
then Reg.WriteString('MyApp','"' + ParamStr(0) + '"');
finally
Reg.CloseKey;
Reg.Free;
inherited;
end;
end;
等等,详细的参看TRegistry的帮助,如CreageKey deleteKey 等等
 
同意楼上,不过,最好不用注册表
 
我想要删除的是..........software/microsoft/windows/下的左边子键而不是右边的键值
 
哦,,对不住,,现在才看到:(
 
啊,,你居然把分给了没回答你问题的一个人!!!!!!哎,,,
 
thebluehouse:

想要删除的是..........software/microsoft/windows/下的左边子键而不是右边的键值?

你想干啥子哦?恩?呵呵,,我晓得你想干什么?
方法我不是在你的那个问题里都说了码?

你说的:unit2怎么响应主界面unit1上的button1的click?
你要怎么响应?是控件还是别的?
如果也是控件如BUTTON,你可以用下面的办法:
假设单元2中BUTTON2要响应,
则要在程序运行前:
button2.OnClick:=button1.OnClick;

或在单元1中的窗体中给单元2中的窗体发消息,在消息处理函数中激活button2的点击事件!
 
接受答案了.
 
请问HeyTommy,这段源码为什么出错
 
thebluehouse:

什么错?

哦,,你需要加一句:
也就是在响应button1的点击事件的时候,加
button2.OnClick(Sender);
 
后退
顶部