如何让子窗体的名称显示在主窗体的窗口列表中

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);begin
       form1.FormStyle :=fsMDIForm;
    with TForm.Create(Application.MainForm) do
    begin
        FormStyle := fsMDIChild;
        Show;
        Caption :=  'Budded '
     end;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       form2: Tform;
    begin
       form1.FormStyle :=fsMDIForm;
       form2:= TForm.Create(Application.MainForm );
       form2.FormStyle := fsMDIChild;
       form2.Show ;
       form2.Caption :='1';
       form2.WindowState :=wsMaximized;
    End;
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      form2: Tform;
    begin
       form2:=Tform.Create(self);
       form2.FormStyle :=fsMDIchild;
       form1.FormStyle :=FsMDIform;
       form2.Show ;
       Form2.Caption :='1';
       form2.WindowState :=Wsmaximized;
    end;
      

  4.   

    //县创建一个单元作为所有DLL中窗体的祖先窗体.在这个窗体中可以加入窗口的公共成员.下面为了简化,省略了.
    unit AbstractForm;interface
    uses Forms;type
      TAbstractForm = class(TForm)
      
      end;  TAbstractFormClass = class of TAbstractForm;
    implementationend.//创建一个窗体,继承至上面创建的祖先窗口
    unit ChildForm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, AbstractForm;type
      TForm1 = class(TAbstractForm)
        cxButton1: TcxButton;
        cxMemo1: TcxMemo;
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    ....//省略
    end;//创建一个用于装载DLL窗口的公共方法,这个文件可以被包含到多个DLL项目中。
    unit DLLManager;interface
    uses Forms, Windows, AbstractForm;/// <summary>
    /// DLL入口函数。设置DLL中窗口的Application为主程序的Application对象,
    /// 置DLL中窗口的窗体对象为主程序窗体对象;
    /// </summary>
    procedure InitDll(dWseason: DWORD);
    /// <summary>
    /// 装载DLL中的MDI窗体  
    /// </summary>
    ///  <params name='FormClass'>要创建的窗体对象的类型</params>
    ///  <params name='App'>主程序的Application对象</params>
    ///  <params name='Scr'>主程序窗体对象</params>
    ///  <returns>返回指定类型的窗体对象</returns>
    function LoadForm(FormClass: TAbstractFormClass; App: TApplication; Scr: TScreen): TAbstractForm; StdCall;implementationvar
      GApplication: TApplication ;
      GScreen: TScreen;function LoadForm(FormClass: TAbstractFormClass; App: TApplication; Scr: TScreen): TAbstractForm; StdCall;
    var
      LPtr: PLongint;
      form :TAbstractForm;
    begin
      Application := App;
      Screen := Scr;  
      LPtr := @Application.MainForm;
      LPtr^ := Longint(App.MainForm);
      Form := FormClass.Create(App.MainForm);
      Result := Form;   
    end;procedure InitDll(dWseason: DWORD);
    begin
      case dWseason  of
        DLL_PROCESS_ATTACH: 
        begin
          GApplication := Application;
          GScreen := Screen;
        end;
        DLL_PROCESS_DETACH: 
        begin
          Application := GApplication;
          Screen := GScreen;
        end;
      end;
    end;end.//DLL项目单元文件
    uses
      Windows,
      ChildForm in 'ChildForm.pas' {Form1},
      DLLManager in 'DLLManager.pas',
      AbstractForm in 'AbstractForm.pas';{$R *.res}
    function TChildForm: TAbstractFormClass; stdcall;
    begin
      Result := TForm1;
    end;
    exports
      LoadForm,
      TChildForm;begin
      DllProc := @InitDll;
      InitDll(DLL_PROCESS_ATTACH);
    end.
    //调用程序
    type
      TLoadForm = function (formclass: TAbstractFormClass; App: TApplication; Scr: TScreen): TAbstractForm; StdCall;
      TMainForm = class(TForm)
       //省略
      end;implementation
    {$R *.dfm}      
    function TChildForm: TAbstractFormClass; external 'TestDllForm.dll';procedure TMainForm.CreateMDIChild(const Name: string);
    var
      Child: TAbstractForm;
      LoadFrm: TLoadForm;
      DllHandle: Cardinal;begin
      DllHandle := LoadLibrary(Pchar('TestDllForm.dll'));
      if DllHandle <= 0 then  Exit;
      LoadFrm := GetProcAddress(DllHandle, PChar('LoadForm'));
      if @LoadFrm = nil then Exit;
      Child := LoadFrm(TChildForm, Application, Screen);
    end;该方法可以使得多个DLL中的MDI窗口的创建尽量减少代码量,和易于维护。