Принцип работы MDI не совпадает с тем, что вы пытаетесь сделать.
Если вам нужен формат «MDI», вам следует рассмотреть возможность использования либо встроенного, либо коммерческого стыковочного пакета и использовать настройку стыковки для имитации ощущения MDI.
В моих приложениях Delphi я часто использую TFrames и привязываю их к основной форме, а также максимизирую их, чтобы они занимали клиентскую область. Это дает вам нечто похожее на внешний вид Outlook. Это выглядит примерно так:
TMyForm = class(TForm)
private
FCurrentModule : TFrame;
public
property CurrentModule : TFrame read FModule write SetCurrentModule;
end;
procedure TMyForm.SetCurrentModule(ACurrentModule : TFrame);
begin
if assigned(FCurrentModule) then
FreeAndNil(FCurrentModule); // You could cache this if you wanted
FCurrentModule := ACurrentModule;
if assigned(FCurrentModule) then
begin
FCurrentModule.Parent := Self;
FCurrentModule.Align := alClient;
end;
end;
Чтобы использовать его, вы можете просто сделать это:
MyForm.CurrentModule := TSomeFrame.Create(nil);
Есть хороший аргумент, что вы должны использовать интерфейсы (создающие интерфейс IModule или что-то еще), которые вы используете. Я часто так делаю, но объяснить эту концепцию здесь сложнее, чем нужно.
НТН