2 RXL
Слу, может ты мне переформулируешь его задачу, а то я все посты прочитал, но нифига не понял чего надо сделать.
Имхо, два равноправных окна (рабочее и дата) там точно не нужны. Выбор даты - однозначно маленькое модальное окно, которое вызывается (создается) в другом окне (главном или рабочем). Там вроде и проблемы нет.
А если ему надо много документов одновременно открывать, то тогда MDI или нет. Это уже решать в зависимости от удобства.
Но, повторяю, при всех условиях, окно с датой должно создаваться только на время выбора даты.
Я бы сделал примерно так:
unit u_MyDateForm;
interface
юзес
  Вындовз, Классес, Мессагес, СысУтилз и чо там еще  :)
type
  TMyDate = record  // вот тока не надо спрашивать, нахрена я создал свою структуру, описывающую дату, просто так нагляднее
    Year: BYTE;
    Month: BYTE;
    Day: BYTE;
  end;
  TMyDateForm = class(TForm)  // Класс формы с выбором даты
     бла бла бла контролы
    ......
  public
    procedure SetDate(Date: TMyDate); // Процедура будет разбираться с переданой на форму датой и инициализировать контролы
    // в соответствии с этим
    function GetDate: TMyDate;  // Функция будет возвращать дату, выбранную пользователем
  end;
  // А вот это самое главное: из других форм будем вызывать только эту функцию
  // Делать это можно из разных форм
  // Параметры:
  // Date - дата для инициализации
  // OwnerForm - форма-родитель
  // Функция возвращает выбранную дату
  function ChooseDateTime(Date: TMyDate; OwnerForm: TForm): TMyDate;
implementation
{$R *.DFM}
function ChooseDateTime(Date: TMyDate; OwnerForm: TForm): TMyDate;
var
  _Form: TMyDateForm;
begin
  _Form := TMyDateForm.Create(OwnerForm);
  if not(Assigned(_Form)) then х.з. чо делать, форма не создалась
  try
    _Form.SetDate(Date);  // Процедура разбирается в структуре Date и инициализирует контролы на форме
    _Form.ShowModal;  // Показываем форму
    Result := _Form.GetDate;  // Вызываем процедуру, которая собирает данные с контролов обратно в структуру
  finally
    _Form.Free;  // не забыть почистить за собой
  end;
end;
Вот примерно так. Это только форма с датой.
По поводу проверки на создание формы. Ну не знаю, я ни разу не сталкивался с тем, что простая форма не создалась. Но проверка на не nil перед употреблением является хорошим тоном.
Больно за код не бейте, писал в текстовом редакторе. Может чо не так. Но идея понятна.