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

Reply via email to