Zitat:
tmp.Parent := Form1;
Und was machst Du, wenn es gar kein Form1 gibt? Die TForm1-Instanz kann ja auch in einer anderslautenden Variablen hinterlegt werden. Oder aber man erstellt mehrere Instanzen von TForm1, dann wird aber immer dieselbe angesprochen.
tmp.Parent := self;
So zeigt man immer auf die eigene Instanz, unabhängig davon, wieviele es gibt und wie die Variablen heißen. Das Thema wird so oft angesprochen, dass es mich wundert, wie oft es immer noch ignoriert wird.