不知道LZ要往上走几步,因为所有的类都是从TObject派生来的,所有的类都有相同的祖先,下面是段显示派生路径的代码,怎么判断两个类是否有同样的祖先,LZ自己想办法吧var vClass: TClass; begin vClass := TEdit; while vClass <> TObject do begin vClass := vClass.ClassParent; ShowMessage(vClass.ClassName); end; end;
按楼上的思想写了一个 function GetParent(Class1, Class2: TClass): TClass; var TmpClass: TClass; begin if Class1.InheritsFrom(Class2) then begin Result := Class2; Exit; end; if Class2.InheritsFrom(Class1) then begin Result := Class1; Exit; end; TmpClass := GetParent(Class1, Class2.ClassParent); Result := GetParent(Class1.ClassParent, Class2); if TmpClass.InheritsFrom(Result) then Result := TmpClass; end;procedure TForm1.FormCreate(Sender: TObject); begin Text := GetParent(TButton, TEdit).ClassName; end;
vClass: TClass;
begin
vClass := TEdit;
while vClass <> TObject do
begin
vClass := vClass.ClassParent;
ShowMessage(vClass.ClassName);
end;
end;
function GetParent(Class1, Class2: TClass): TClass;
var
TmpClass: TClass;
begin
if Class1.InheritsFrom(Class2) then
begin
Result := Class2;
Exit;
end;
if Class2.InheritsFrom(Class1) then
begin
Result := Class1;
Exit;
end;
TmpClass := GetParent(Class1, Class2.ClassParent);
Result := GetParent(Class1.ClassParent, Class2);
if TmpClass.InheritsFrom(Result) then Result := TmpClass;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Text := GetParent(TButton, TEdit).ClassName;
end;