IDE: Fix reading ancestor type TFrame for object in LFM when it is not a direct ancestor. Issue #38585.

git-svn-id: trunk@64763 -
This commit is contained in:
juha 2021-03-07 13:24:52 +00:00
parent 2fa9987008
commit bda23a6856

View File

@ -6476,16 +6476,14 @@ begin
end; end;
function LoadAncestorDependencyHidden(AnUnitInfo: TUnitInfo; function LoadAncestorDependencyHidden(AnUnitInfo: TUnitInfo;
const aComponentClassName: string; const aComponentClassName: string; OpenFlags: TOpenFlags;
OpenFlags: TOpenFlags;
out AncestorClass: TComponentClass; out AncestorClass: TComponentClass;
out AncestorUnitInfo: TUnitInfo): TModalResult; out AncestorUnitInfo: TUnitInfo): TModalResult;
var var
AncestorClassName, IgnoreBtnText: String; AncsClsName, S: String;
CodeBuf: TCodeBuffer; CodeBuf: TCodeBuffer;
GrandAncestorClass, DefAncestorClass: TComponentClass; GrandAncestorClass, DefAncestorClass: TComponentClass;
begin begin
AncestorClassName:='';
AncestorClass:=nil; AncestorClass:=nil;
AncestorUnitInfo:=nil; AncestorUnitInfo:=nil;
@ -6496,22 +6494,22 @@ begin
if Result<>mrOk then exit; if Result<>mrOk then exit;
AnUnitInfo.Source:=CodeBuf; AnUnitInfo.Source:=CodeBuf;
end; end;
if not CodeToolBoss.FindFormAncestor(AnUnitInfo.Source,aComponentClassName,
AncestorClassName,true)
then begin
DebugLn('LoadAncestorDependencyHidden Filename="',AnUnitInfo.Filename,'" ClassName=',aComponentClassName,'. Unable to find ancestor class: ',CodeToolBoss.ErrorMessage);
end;
// try the base designer classes S:=aComponentClassName;
if not FindBaseComponentClass(AnUnitInfo,AncestorClassName, repeat
aComponentClassName,AncestorClass) then if not CodeToolBoss.FindFormAncestor(AnUnitInfo.Source,S,AncsClsName,true) then
begin DebugLn('LoadAncestorDependencyHidden Filename="',AnUnitInfo.Filename,'" ClassName=',aComponentClassName,
DebugLn(['LoadAncestorDependencyHidden FindUnitComponentClass failed for AncestorClassName=',AncestorClassName]); '. Unable to find ancestor class: ',CodeToolBoss.ErrorMessage);
exit(mrCancel); // try the base designer classes
end; if not FindBaseComponentClass(AnUnitInfo,AncsClsName,S,AncestorClass) then
begin
DebugLn(['LoadAncestorDependencyHidden FindUnitComponentClass failed for AncsClsName=',AncsClsName]);
exit(mrCancel);
end;
S:=AncsClsName;
until Assigned(AncestorClass);
// try loading the ancestor first (unit, lfm and component instance) // try loading the ancestor first (unit, lfm and component instance)
if AnUnitInfo.UnitResourceFileformat<>nil then if AnUnitInfo.UnitResourceFileformat<>nil then
DefAncestorClass:=AnUnitInfo.UnitResourceFileformat.DefaultComponentClass DefAncestorClass:=AnUnitInfo.UnitResourceFileformat.DefaultComponentClass
else else
@ -6521,13 +6519,11 @@ begin
DefAncestorClass:=BaseFormEditor1.StandardDesignerBaseClasses[DesignerBaseClassId_TForm]; DefAncestorClass:=BaseFormEditor1.StandardDesignerBaseClasses[DesignerBaseClassId_TForm];
if (AncestorClass=nil) then begin if (AncestorClass=nil) then begin
IgnoreBtnText:=''; S:='';
if DefAncestorClass<>nil then if DefAncestorClass<>nil then
IgnoreBtnText:=Format(lisIgnoreUseAsAncestor, [DefAncestorClass.ClassName]); S:=Format(lisIgnoreUseAsAncestor, [DefAncestorClass.ClassName]);
Result:=LoadComponentDependencyHidden(AnUnitInfo,AncsClsName,OpenFlags,
Result:=LoadComponentDependencyHidden(AnUnitInfo,AncestorClassName, false,AncestorClass,AncestorUnitInfo,GrandAncestorClass,S);
OpenFlags,false,AncestorClass,AncestorUnitInfo,GrandAncestorClass,
IgnoreBtnText);
if Result<>mrOk then begin if Result<>mrOk then begin
DebugLn(['LoadAncestorDependencyHidden DoLoadComponentDependencyHidden failed AnUnitInfo=',AnUnitInfo.Filename]); DebugLn(['LoadAncestorDependencyHidden DoLoadComponentDependencyHidden failed AnUnitInfo=',AnUnitInfo.Filename]);
end; end;
@ -6543,7 +6539,7 @@ begin
end; end;
end; end;
//DebugLn('LoadAncestorDependencyHidden Filename="',AnUnitInfo.Filename,'" AncestorClassName=',AncestorClassName,' AncestorClass=',dbgsName(AncestorClass)); //DebugLn('LoadAncestorDependencyHidden Filename="',AnUnitInfo.Filename,'" AncsClsName=',AncsClsName,' AncestorClass=',dbgsName(AncestorClass));
if AncestorClass=nil then if AncestorClass=nil then
AncestorClass:=DefAncestorClass; AncestorClass:=DefAncestorClass;
Result:=mrOk; Result:=mrOk;