There also seems to be a problem with fixing up references to other
components while reading - TLabel.FocusControl seems to be one of the
things that is tripping this up. Local unresolved references are being
silently discarded, but I think should be added to the global list. The
attached patch fixes it for my application, but might not be the best
general fix.
Colin
diff -uNr --exclude=.svn --exclude='*.rst' trunk/fpcsrc/rtl/objpas/classes/reader.inc trunk.w/fpcsrc/rtl/objpas/classes/reader.inc
--- trunk/fpcsrc/rtl/objpas/classes/reader.inc 2008-03-29 16:56:06.000000000 +0000
+++ trunk.w/fpcsrc/rtl/objpas/classes/reader.inc 2008-03-29 16:57:37.000000000 +0000
@@ -630,7 +630,7 @@
procedure TReader.DoFixupReferences;
Var
- R,RN : TLocalUnresolvedReference;
+ R : TLocalUnresolvedReference;
G : TUnresolvedInstance;
Ref : String;
C : TComponent;
@@ -644,7 +644,6 @@
R:=TLocalUnresolvedReference(L.Root);
While (R<>Nil) do
begin
- RN:=TLocalUnresolvedReference(R.Next);
Ref:=R.FRelative;
If Assigned(FOnReferenceName) then
FOnReferenceName(Self,Ref);
@@ -654,14 +653,10 @@
else
begin
P:=Pos('.',R.FRelative);
- If (P<>0) then
- begin
- G:=AddToResolveList(R.FInstance);
- G.Addreference(R.FRoot,R.FPropInfo,Copy(R.FRelative,1,P-1),Copy(R.FRelative,P+1,Length(R.FRelative)-P));
- end;
+ G:=AddToResolveList(R.FInstance);
+ G.Addreference(R.FRoot,R.FPropInfo,Copy(R.FRelative,1,P-1),Copy(R.FRelative,P+1,Length(R.FRelative)-P));
end;
- L.RemoveItem(R,True);
- R:=RN;
+ R:=TLocalUnresolvedReference(R.Next);
end;
FreeAndNil(FFixups);
end;
diff -uNr --exclude=.svn --exclude='*.rst' trunk/fpcsrc/rtl/objpas/classes/resref.inc trunk.w/fpcsrc/rtl/objpas/classes/resref.inc
--- trunk/fpcsrc/rtl/objpas/classes/resref.inc 2008-03-28 09:19:50.000000000 +0000
+++ trunk.w/fpcsrc/rtl/objpas/classes/resref.inc 2008-03-29 16:57:37.000000000 +0000
@@ -220,7 +220,10 @@
C : TComponent;
begin
- C:=FindGlobalComponent(FGlobal);
+ if FGlobal <> '' then
+ C:=FindGlobalComponent(FGlobal)
+ else
+ C:=FRoot;
Result:=(C<>Nil);
If Result then
begin
@@ -229,7 +232,7 @@
If Result then
SetObjectProp(Instance, FPropInfo,C);
end;
-end;
+end;
Function TUnresolvedReference.RootMatches(ARoot : TComponent) : Boolean; Inline;
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel