De lo que explicas, lo que no me queda claro es qué hacer con los datos que no se pueden duplicar, justo esos que "cierras" para que no se dupliquen.
De todas formas, digamos que para duplicar tu formulario (que está conectado a unos datos) necesitas "duplicar" esas dos cosas; El formulario
(1) y los datos
(2) y cuando los crees tendrás un duplicado del original.
Para duplicar el formulario, basa con que crees uno nuevo de la misma clase
(1).
Si en tu Aaplicación se crea así:
Código Delphi
[-]
Application.CreateForm(TForm1, Form1);
bastará con crear uno nuevo:
Código Delphi
[-]
Form1 := TForm1.Create(Application);
Si creas varios debes tener en cuenta a la hora de destruirlos que no pierdas memoria, así que creo que lo más correcto es que en el OnClose utilices:
Con esto tendrás un segundo formulario de la misma clase que el primero, ¿Pero y los datos que muestra?
Pues lo lógico es que crees un nuevo registro en tu tabla de ordenes de compra(2) con los mismos datos del primero (menos los que no puedes duplicar) y hagas que el nuevo formulario apunte a ese nuevo registro; Con eso habrás conseguido dos formulario iguales apuntando a dos registros diferentes (duplicados) con los mismos datos.
No se si me he explicado bien y si es eso lo que quieres exactamente.
Un saludo.