精华内容
下载资源
问答
  • 如题
  • 我们知道,在Delphi中,如果一个MDI Form非主窗体的话,我们就不能创建任何MDI Child Form,实在是遗憾,不过还是可以解决的。 Kingron查看了VCL的源代码,发现在创建窗体的时候,系统会检测MainForm是不是nil和...

    我们知道,在Delphi中,如果一个MDI Form非主窗体的话,我们就不能创建任何MDI Child Form,实在是遗憾,不过还是可以解决的。

    Kingron查看了VCL的源代码,发现在创建窗体的时候,系统会检测MainForm是不是nil和MainForm.ClientHandle是不是nil,对于MainForm就是MDI Form的,因为有ClientHandle,所以没有问题,但是对于非MDI的主窗体,其ClientHandle为nil,因此出现错误。知道原因之后,就好办了,因此我们只要把MainForm.ClientHandle修改称自己的MDI Form的ClientHandle即可,要做这个工作,非指针莫属了!!!

    在你的MDI MainForm的创建子窗体的代码中改成类似的即可。我测试通过,不过是否有什么后遗症之类,我就无法保证了,还有错误,请来信告知。
    var

    pHandle:^THandle;

    begin

    pHandle :=@Application.MainForm.ClientHandle;

    pHandle^:=ClientHandle; ///关键在这一句!

    with Tform3.Create(Application) do show;

    end;

    转载于:https://www.cnblogs.com/sonicit/archive/2007/06/27/797776.html

    展开全文
  • **新打开的窗体使用最小化 最大化 关闭的时候 主窗体会跟着一起动??** 所以没想明白 现在只能 在main 进程里 有 let mainWindow,new1win,new1win 三个来操作new BrowserWindow 求助 如何在 ipc.on('...
  • MDI子窗体里申明一个事件,在主窗体里实现这个事件过程。然后在创建MDI子窗体的时候,赋值这个事件。 MDI退出的时候,触发一下这个事件。 例如: TMDIForm=... private FOnMDIEvent:TNotifyEvent; public ...

    我习惯用事件驱动。

    MDI子窗体里申明一个事件,在主窗体里实现这个事件过程。然后在创建MDI子窗体的时候,赋值这个事件。
    MDI退出的时候,触发一下这个事件。

    例如:
    TMDIForm = ...
    private
      FOnMDIEvent : TNotifyEvent;

    public
      property FOnMDIEvent : TNOtifyEvent read FOnMDIEvent write FOnMDIEvent;
    end;

    procedure TMdiForm.OnClose(...);
    begin
      if Assigned(FOnMDIEvent ) then FOnMDIEvent (Self);
    end;

    在主窗体的代码中实现一个过程,就像给控件动态赋值一样,应该就可以了

     

     

    procedure TfrmCaiGouShouLiao.ZDYItemClick(Sender: TObject);  //自定义TNotifyEvent事件
    var
      issize, date1, date2: string;
    begin
      inherited;
       vou_no := DataSet1 .FieldByName('vou_no').AsString ;//先记住单据号
      if cxCheckBox2.Checked then
        issize := 'Y'
      else
        issize := 'N';
      date1 := FormatDateTime('yyyy-mm-dd', cxDateEdit1.Date);
      date2 := FormatDateTime('yyyy-mm-dd', cxDateEdit2.Date);
      with DataSet2 do
      begin
        Close;
        ParamByName('store_pno').AsString := cxButtonEdit1.text;
        ParamByName('issize').AsString := issize;
        ParamByName('date1').AsString := date1;
        ParamByName('date2').AsString := date2;
        ParamByName('ofac_no').AsString := Self.ofac_no;
        Open;
      end;
      //定位到原来的记录
       DataSet1 .Locate('vou_no',vou_no,[loCaseInsensitive]) ;//精确匹配
    end;

     

    子窗体

     private
        { Private declarations }
        FOnMDIEvent: TNOtifyEvent;
       {子窗体里申明一个事件,在主窗体里实现这个事件过程。然后在创建MDI子窗体的时候,赋值这个事件。
    MDI退出的时候,触发一下这个事件。}
      public
        { Public declarations }
        property OnMDIClose: TNOtifyEvent  read FOnMDIEvent write FOnMDIEvent;
      end;

    procedure ShowfrmCaiGouShouLiouRuKuXuanZe(vou_no,ofac_no: string;OnMDIClose:TNotifyEvent);

    var
      frmCaiGouShouLiouRuKuXuanZe: TfrmCaiGouShouLiouRuKuXuanZe;

    implementation

    procedure ShowfrmCaiGouShouLiouRuKuXuanZe(vou_no,ofac_no: string;OnMDIClose:TNotifyEvent);
    begin
      if Assigned(frmCaiGouShouLiouRuKuXuanZe) then
      begin

       frmCaiGouShouLiouRuKuXuanZe.FOnMDIEvent:=OnMDIClose;
        frmCaiGouShouLiouRuKuXuanZe.vou_no := vou_no;
        frmCaiGouShouLiouRuKuXuanZe.ofac_no := ofac_no;
        frmCaiGouShouLiouRuKuXuanZe.Visible := True;
        frmCaiGouShouLiouRuKuXuanZe.BringToFront;

      end
      else
      begin
        frmCaiGouShouLiouRuKuXuanZe := TfrmCaiGouShouLiouRuKuXuanZe.Create(Application);

        frmCaiGouShouLiouRuKuXuanZe.FOnMDIEvent:=OnMDIClose;
        frmCaiGouShouLiouRuKuXuanZe.vou_no := vou_no;
        frmCaiGouShouLiouRuKuXuanZe.ofac_no := ofac_no;
        frmCaiGouShouLiouRuKuXuanZe.ShowModal;  //用show需要在窗体的Close事件里面加nil释放语句;
        frmCaiGouShouLiouRuKuXuanZe.BringToFront;

      end;

    end;

    procedure TfrmCaiGouShouLiouRuKuXuanZe.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      DST_CAILIAO.Close;
       if Assigned(FOnMDIEvent) then FOnMDIEvent(Self);

    end;
     

    展开全文
  • 动态创建窗体如何相互通讯 主窗体和新窗体 delegate
  • 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前常见...

     很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可。
      
        下面重点介绍前一种,目前常见的有两种方法,基本上大同小异:
      
        第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如:
      
      public static yourMainWindow pCurrentWin = null;
      
        然后在主窗体构造函数中,给静态成员初始化,如下:
      
      pCurrentWin = this;
      
        那么在子窗体中调用父窗体,可以通过“主窗体类名. pCurrentWin”来操作当前的主窗体。
      
        第二种,是在子窗体中定义一个私有成员,来保存当前主窗体对象,例如:
      
      private yourMainWindow pParentWin = null;
      
        然后在子窗体构造函数中,加一参数,如下:
      
      public yourChildWindow( yourMainWindow WinMain )
      {
       pParentWin = WinMain;
       //Other code
      }
      
        在主窗体创建子窗体的时候,要把this作为参数来构造子窗体,这样在子窗体中调用父窗体,可以直接用“this.pParentWin”就可以了
      
        不过以上所作的,只是让你能够访问当前主窗体对象,那么如何操作控件,很多人直接修改控件的成员访问符,即把“private”改为“public”

    展开全文
  • 请问不知道控件的类型,能不能在VB6.0中创建一个动态的OCX控件,并且添加到窗体上?
  • 主窗体和子窗体之间如何相互操作对方的控件主窗体和子窗体之间如何相互操作对方的控件 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,...
    主窗体和子窗体之间如何相互操作对方的控件
    主窗体和子窗体之间如何相互操作对方的控件

    很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可。

    下面重点介绍前一种,目前常见的有两种方法,基本上大同小异:

    第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如:

    public static yourMainWindow pCurrentWin = null;

    然后在主窗体构造函数中,给静态成员初始化,如下:

    pCurrentWin = this;

    那么在子窗体中调用父窗体,可以通过“主窗体类名. pCurrentWin”来操作当前的主窗体。

    第二种,是在子窗体中定义一个私有成员,来保存当前主窗体对象,例如:

    private yourMainWindow pParentWin = null;

    然后在子窗体构造函数中,加一参数,如下:

    public yourChildWindow( yourMainWindow WinMain )

    {

    pParentWin = WinMain;

    //Other code

    }

    在主窗体创建子窗体的时候,要把this作为参数来构造子窗体,这样在子窗体中调用父窗体,可以直接用“this.pParentWin”就可以了

    不过以上所作的,只是让你能够访问当前主窗体对象,那么如何操作控件,很多人直接修改控件的成员访问符,即把“private”改为“public”,我觉得这样破坏了本身类的封装,所以我比较喜欢的做法是增加公有属性或方法来供调用,例如:

    public string ButtonText

    {

    get{ return btn.Text;}

    set{ btn.Text = value;}

    }

    public void Button_Click()

    {

    this.btnDConvert.PerformClick();//Execute button click

    }

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130591/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/374079/viewspace-130591/

    展开全文
  • 为什么80%的码农都做不了架构师?>>> ...
  • 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体创建子窗体的时候,保留所创建子窗体对象即可。下面重点介绍前一种,目前常见的...
  • 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前常见...
  • 主窗体和子窗体之间如何相互操作对方的控件document.title="主窗体和子窗体之间如何相互操作对方的控件 - "+document.title很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。...
  • 原文地址:...相比较而言,后面稍微简单一些,只要在主窗体创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异:第一种,在主窗体
  • 本文提供了一个简单的示例,说明如何通过子类化.NET System.Configuration命名空间中的ApplicationSettingsBase类的实例,以编程方式保存应用程序的主窗体和一些相关的子控件设置。
  • 转:...相比较而言,后面稍微简单一些,只要在主窗体创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异:第一种,在主窗体类中定义一个
  • C#子窗体调用主窗体中事件

    千次阅读 2015-07-16 22:33:11
    很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前...
  • (最近在做一个刷卡的门卫管理系统,需要通过子窗体操作父级MDI窗体,在网上找了一位大侠的文章解决了,先表示下感谢,这里也冒昧地贴出来,希望能和更多的人共享)很多人都苦恼于如何在子窗体中操作主窗体上的控件...
  • 主窗体和子窗体之间如何相互操作对方的控件 document.title="主窗体和子窗体之间如何相互操作对方的控件 - "+document.title很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。...
  • 本文提供了一个简单的示例,说明如何通过子类化.NET System.Configuration命名空间中的ApplicationSettingsBase类的实例,以编程方式保存应用程序的主窗体和一些相关的子控件设置。
  • 在文件.../clist/clui.c中函数int LoadCLUIModule(void)中 有代码  cli.hwndContactList = CreateWindowEx(  DBGetContactSettingByte(NULL, "CList", "Tool...此处返回的即为ContactList的主窗体 据此可作一定改动。
  • 本文提供了一个简单的示例,说明如何通过子类化.NET System.Configuration命名空间中的ApplicationSettingsBase类的实例,以编程方式保存应用程序的主窗体和一些相关的子控件设置。
  • 写作日期:2019-10-23 作者:习践无界 主界面 uses DataModule 后要需注意要先创建DataModule ,然后才能使用 DataModule 中的...2、Main form选择主窗体,Auto-create forms 中将DataModule1拖到主窗体前。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 453
精华内容 181
关键字:

如何创建主窗体