1.如果要创建一个mdi child,先看是否有这个child 存在,如果有,则用它,如果没有再创建 //该函数判断MDI 子窗体是否存在,再进行创建和显示function isInclude(formclass: TFormClass): boolean;var  i: Integer;  form: TObject;begin  result := false;  for i := 0 to frmMain.MDIChildCount do  begin    form := frmMain…
    Delphi中实现MDI子窗体 用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容  ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子.MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理.切换等工作.自然,子窗体上承载的内容可各不相同.Tidy浏览器最终实现了三种不同的窗体:主窗体.浏览子窗体.源代码子窗体.  ② 设置窗体类型  我们通过窗体的FormStyle…
本文转载:http://www.cnblogs.com/Ricky81317/archive/2008/09/17/1292443.html 看到论坛中有朋友问,如何可以保证在MDI主窗体中,同一类型的子窗体只能打开一次,再打开只是将原来打开的窗体激活.这个要求我以前写程序的时候也遇到过.我实现的基本思路是: 一般每个子窗体都是继承自Form类型,不同子窗体分别代表不同的功能,因此只需要判断当前MDI打开的子窗体的类型中有没有当前需要打开的子窗体类型就行了,如果有,则直接激活,如果没有则创建一个…
用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用. 易于程式升级,当程式升级时,不用编译主exe文档,更新某个DLL就能够升级. 能够根据客户不同的需求.价钱给他们不同的模块.(奸商都愿意用这招)最近用到这个技术,因为小弟没有用过,在网上google了一下,对他有了了解,我用的是基于COM的DLL,下面总结如下: 想在DLL中封装MDI子窗体,要注意以下几点: 您的DLL中的接口要有…
“用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1.把父窗体的IsMdiContainer设置为True:2.把子窗体的WindowState设置为Normal:3.在父窗体中用下面的方法打开子窗体:private void menuItemsMdiForm_Click(object sender, EventArgs e){     MyChild…
在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下: var DllApp: TApplication;//定义保存原DLL的TApplication对象 DllScr: TScreen;//定义保存原DLL的TScreen对象 procedure UnProcDll(Reason: Integer); register;//重新定义DLL入口函数…
“用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1.把父窗体的IsMdiContainer设置为True:2.把子窗体的WindowState设置为Normal:3.在父窗体中用下面的方法打开子窗体:private void menuItemsMdiForm_Click(object sender, EventArgs e){     MyChild…
2008-02-28 15:18 //*************************************************************************** //函 数 名: CreateForm //返 回 值: boolean //参       数: TForm //功       能: 判断MDI窗体的子窗体是否存在 //********************************************************************…
问题是这样的 我做了一个小程序 把 adoconnection放到了主窗体  连接的是access数据库; 新建了一个子窗体继承自FBase  新建了一个pubulic方法 qrySearch 实现了打开表; formCreate调用了qrySearch方法 ; public procedure qrySearch(cLiuShui: string = '-1'); { Public declarations } end; var FRuKuDan: TFRuKuDan; implementat…
补充说明: 此问题已经在新版本中解决(15.2.6),方法更加简单,只需要在 MDIChild 窗体的 Create 方法中,将 Ribbon 的 Visible 属性设置为 false 就可以了,且无刷新. ---------------------------------------------------------------------------------------------------- 以下为历史的解决方案 ---------------------------------…
Windows程序设计中的MDI(Multiple Document Interface)官方解释就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows .0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序. 新建一个WindowForm程序.得到一个窗体作为我们父窗体Parent.拖入一个menustrip空间.在新建一个窗体FrmChi…
出现这种情况一般是 打开了多个MDI的子窗体,打开新窗体的时候关闭其他的子窗体就OK了, 具体代码: foreach (Form form in main.MdiChildren)            {                if (!form.IsDisposed)                {                    form.Close();                }            }…
可以在MDI主窗体中添加以下方法. //防止打开多个窗体 private bool ShowChildrenForm(string p_ChildrenFormText) { int i; //依次检测当前窗体的子窗体 ; i < this.MdiChildren.Length; i++) { //判断当前子窗体的Text属性值是否与传入的字符串值相同 if (this.MdiChildren[i].Name == p_ChildrenFormText) { //如果值相同则表示此子窗体为想要调…
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void ToolCollectorClick(object sender, EventArgs e) { AddForm(new frmWebCollector()); } private void AddForm(Form frm) { if(MdiChildren.Any(p=>p.GetType().Name==frm…
场景:在mid加载子窗体的时候如果指定WindowState为Maximized,加载完成后主窗体会显示最大化.最小化.关闭的按钮图标. 解决方法: 1.更改主窗体FormMain的属性.制定MainMenuStrip的属性为menuStrip1控件.menuStrip1控件就是主窗体上的菜单栏. 2.在menuStrip1控件的ItemAdded事件中添加一下代码: private void menuStrip1_ItemAdded(object sender, ToolStripItemEv…
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 {…
using System.Runtime.InteropServices; [DllImport("user32")] public static extern int SetParent(int hWndChild, int hWndNewParent); Form2 f2 = new Form2(); f2.MdiParent = this; f2.Show(); SetParent((int)f2.Handle, (int)this.Handle);…
DELPHI中MDI子窗口的关闭 和打开       Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会   发觉该子窗口只是最小化,而不是你预期的那样被关闭.解决办法是在子窗口的OnClose事件处理过程中   加入如下代码,示例:   procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction); begin    Action := caFree; end;   …
Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭.解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例: procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);begin   Action := caFree;end; Delphi为一个Form的关闭行为指定了四种方式,分别是: caNone 禁止F…
“用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化:1.把父窗体的IsMdiContainer设置为True:2.把子窗体的WindowState设置为Normal:3.在父窗体中用下面的方法打开子窗体 private void testToolStripMenuItem_Click(object sender, EventArgs e) {       …
一个MDI文本文件编辑器打开了N个子窗体子窗体的.pas文件有一些public的过程和函数我想在父窗体调用当前活动的子窗体函数我用Self.ActiveChildForm无法调用直接frmEdit.xxxx运行出错求大家指导,谢谢! 回复于: 2013-01-21 15:31:31 将子窗口的函数定义为类函数calss function a(const s: string): Boolean;   有两种解决办法,一种就是上楼说的,定义成class function静态方法,第二种就是普通的方法…
Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦点从模式窗体转到其他窗体上.而非模式窗体则没有这种限制,你可以从一个非模式窗体切换到另外一个非模式窗体上.两种窗体的区别仅仅在调用的方式上有区别. 窗体的创建: 当使用Delphi的IDE New一个窗体后,在Project1.dpr文件中,会出现一句 1 Application.CreateFor…
转]delphi判断MDI窗体的子窗体是否存在//***************************************************************************//函 数 名: CreateForm//返 回 值: boolean//参 数: TForm//功 能: 判断MDI窗体的子窗体是否存在//***************************************************************************func…
//***************************************************************************//函 数名: CreateForm //返 回值: boolean //参 数: TForm //功 能: 判断MDI窗体的子窗体是否存在 //*************************************************************************** function TForm1.CreateFo…
\Delphi 6数据库开发典型实例\图表的绘制 1.在主窗体里面打开子窗体:ShowForm(Tfrm_Print); procedure Tfrm_Main.ShowForm(AFormClass:TFormClass); begin with AFormClass.Create(Self) do try ShowModal; // 阻塞或者模态窗口,只有你把当前窗口关闭后,才能去操作父亲窗口. finally Free; end; end; //这个例子打开有异常,提示单元chart 引用…
Delphi中的窗体分为模式窗体和无模式窗体.二者的区别在于,用户可以在无模式窗体和其他窗体之间切换.这样,用户就可以同时工作于一个应用程序的几个部分.Delphi中窗体的初始化有两种情况,动态创建,和自动创建.通过show显示一个无模式窗体,ShowModal显示一个模式窗体.窗体有创建对应的也要考虑释放问题.当关闭一个窗体时,窗体并没有真正从内存中释放掉,它仍然存在于内存中,除非关闭了主窗体.因为模式窗体于无模式窗体的不同,所以二者的释放处理也有不同. 模式窗体的创建与释放 因为模式窗体可以…
cnpack下载地址:http://www.cnpack.org/showdetail.php?id=726&lang=zh-cn 时候创建的子窗体不能关闭,点关闭按钮时子窗体最小化了. 出现这种情况的时候可在窗体的 onClose 事件 中加入 Action := caFree;  即可: 例: procedure TTInputCLSY.FormClose(Sender: TObject; var Action: TCloseAction);begin   Action := caFree;…
1.创建子窗体Form1 File -> New -> Form,新建一个form,在form的单元文件中修改 2.子窗体中引用父窗体单元 uses TFatherForm 3.将子窗体中代码修改 TForm1 = class(TForm) 改为 TForm1 = class(TFatherForm) //TFatherForm为被继承的窗体 4.在Form窗体上弹出右键菜单,选择View As Text 把第一行的Object 改成 inherited 后保存: 5.在Form标签上点击右键…
创建基于对话框的Windows应用程序(二) —— Button的应用.新建子窗体 可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的.现在我们来为他们添加退出对话框的功能. 6.首先定义命令消息响应函数(Dlg_OnCommand)如下: 其中IDOK和IDCANCEL分别是按钮OK和Cancel对应的标识符. 7.接下来定义宏替换如下: 8.再在回调函数(Dlg_Proc)中利用宏替换调用命令消息响应函数(Dlg_OnCommand)如下: 9.由于HANDLE_WM…
Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Creating and Destroying Subwindows 利用GLUT我们可以定义子窗体,例如切分主窗体到不同区域,每个子窗体有自己的OpenGL上下文和回调函数.一个可行的程序是可以同时提供几种相同场景的视觉. 为了创建子窗体,我们可以使用glutCreateSubWindow函数,原型如下: int glutCreateSubWindow(int par…