我用动态生成菜单,所有子窗体都是一个输出函数,
动态调用DLL的方法产生子窗体的实例:procedure TMAINF.Myclick(Sender: Tobject);
var
  TmpQuery: Tquery;
  Pstr: Pchar;
  xhStr,DllNamestr: string; //菜单的名字是从CBBDIR的[XH]+'N'得到的
  DllHandle: THandle;
  ProcAddr: FarProc;
  DllFormShow: T_DllFormShow;
  i: integer;
begin
  LockControl(MainF, True);
  try
    TmpQuery := Tquery.Create(nil);
    TmpQuery.DatabaseName := dm.Name;
    xhstr := (sender as TmenuItem).name;
    xhstr := copy(xhstr, 2, length(xhstr));
    TmpQuery.SQL.Text := 'SELECT DLLNAME,SHOWING FROM CBBDIR WHERE XH= ' + xhstr;
    TmpQuery.Open;
    if TmpQuery.Fields[1].AsString = '1' then
      abort
    else
    begin
      Pstr := Pchar(TmpQuery.Fields[0].AsString);
      DllHandle := LoadLibrary(Pstr);
      ProcAddr := GetProcAddress(DllHandle, 'DllFormShow');
      if ProcAddr <> nil then
      begin
        DllFormShow := ProcAddr;
        DllFormShow(Application, MainF);
      end;
    end;
  finally
    DllNamestr := TmpQuery.Fields[0].AsString;
    LockControl(MainF, False);
  end;
end;
子窗体不显示标题栏:procedure Tgsf.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style and (not WS_CAPTION) ;
end;
当我打开多个子窗体时,主窗体的标题栏能正确显示最后一次打开的子窗体的标题,
但关闭最上面一个子窗体时,主窗体不能正确显示下一个子窗体的标题。