关于抽象的一个奇怪问题(50分)

  • 主题发起人 主题发起人 deanjoy
  • 开始时间 开始时间
D

deanjoy

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure ReadUninstallItems;//读取注册表中的反安装项目
var reg:TRegistry;
names:TStrings;//所有反安装的项目
index,num:integer;//项目的序号和总数
name:string;//项目的键名
value:string;//键值
info:TRegKeyInfo;
begin
index:=0;
mainform.lst_uninstall.Items.Clear;//一个列表匡
names:=TStrings.Create;
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('Software/Microsoft/Windows/CurrentVersion/Uninstall',false);
if reg.GetKeyInfo(info) then begin //GetKey()的返回值是boolean
num:=info.NumSubKeys; //得到子键个数
reg.GetKeyNames(names);//得到所有子键
while index<=num do begin //以下列出项目
name:=names.Strings[index];
reg.OpenKey(name,false);
value:=reg.ReadString('DisplayName');
mainform.lst_uninstall.Items.Add(value);
index:=index+1;
end;
end;
reg.free;
names.Free;
end;

结果运行时出现EAbstractError,这应该是重载抽象方法时的错误,但是我这里那个函数是
要重载的呢?帮助里没有说啊!会不会是其他的什么原因呢?
 
Names:=TStringList.Create
就可以了。
 
这个问题我遇到多次了,每次都是手快打成TStrings.Create ^_^
请注意TStrings.Create就是抽象方法.建议一般不要用TStrings,要用就用它的派生类.
 
但是,又有一个问题:List Index out of bounds(75)
什么意思?谢谢!
 
1、用TStringList
2、while (Index <= num) do 改成 while (Index < num) do。TStrings 中 Items 的下标
范围是从 0 到 Count - 1。
 
多人接受答案了。
 
后退
顶部