Una forma fácil de hacerlo manualmente es mediante el uso de la propiedad tag:
Código Delphi
[-]
procedure TForm1.Opcion(Form: TForm);
var
Item: TMenuItem;
begin
Form.Show;
Item:= TMenuItem.Create(MainMenu1);
Item.Caption:= Form.Caption;
Item.Tag:= integer(Form);
Item.OnClick:= VentanaOpcion;
Form.Tag:= integer(Item);
Ventanas.Add(Item);
end;
Y en los formularios secundarios colocar esto en el evento OnClose:
Código Delphi
[-]
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with Form1.Ventanas do
Delete(IndexOf(TMenuItem(self.tag)));
TMenuItem(self.tag).Free;
end;
Automatizar esto requiere algo mas de trabajo pero se puede hacer con un par de clases y realizando sunclassing del formulario principal y de los secundarios.
Saludos.