mdi-delphiMDI程序的设计

问题描述

delphiMDI程序的设计

本人在自学delphi,有一段代码看不懂,求教各位大神解释,越详细越好
procedure OpenChildForm(FormClass: TFormClass; var Fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(Fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;

解决方案

 procedure OpenChildForm(FormClass: TFormClass; var Fm; AOwner:TComponent); 打开子窗口(窗口类型,父窗口)
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then //遍历屏幕上所有的窗口,寻找类型和参数传来的一样的
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then //如果窗口最小化,那么显示它
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA); //否则隐藏它
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront; //把窗口放入前台
Child.Setfocus; //设置输入焦点
TForm(Fm):=Child;
exit; //退出
end;
Child:=TForm(FormClass.NewInstance); //如果没找到,那么就走不到退出的地方,进入这里
TForm(fm):=Child; //创建新窗口
Child.Create(AOwner);
end;

解决方案二:

一、子窗口要动态创建
二、调用子窗口的代码
if not Assigned(SetSaleFrm) then
begin
SetSaleFrm:=TSetSaleFrm.Create(Self);
SetSaleFrm.WindowState:=MID_WindowState;
end
else SetSaleFrm.BringToFront;

时间: 2024-12-22 10:42:21

mdi-delphiMDI程序的设计的相关文章

C++ Builder中MDI应用程序的设计

MDI(多文档界面)应用程序是指用户可以同时打开多个文档,每一个文档显示在应用程序主窗口客户区的独立窗口中.如字处理程序Word就是一个典型的MDI应用程序,你可以在Word中同时打开和使用多个文档,PowerPoint中你也可以同时创建和打开多个幻灯片应用程序,电子表格中也允许用户同时对多个图表进行编辑.MDI应用程序一般包括三类窗口: * 框架窗口:框架窗口与应用程序的主窗口类似,有可改变大小的边框.标题栏.系统菜单等.应用程序必须为框架窗口注册一个窗口类.一个MDI应用程序一般只有一个框架

菜鸟急求,关于windows程序界面设计的。自己想了好长时间了,百度了很多资料也没看到点眉目

问题描述 菜鸟急求,关于windows程序界面设计的.自己想了好长时间了,百度了很多资料也没看到点眉目 是这样的,我想在一个主窗口里,放置几个按钮控件,分别用来更新同一块矩形区域,但是每一个按钮按下,区域显示的内容是不一样的,并且擦除之前的内容,功能就 像图片里的那些按钮,能够控制下边显示的内容, 我用了InvalidateRect(hwnd,&rect,TRUE)发现区域只是闪了一下,并没有擦除任何内容,尤其是之前区域里的按钮控件也没有删除掉.导致新按钮和旧按钮都显示着. 查资料的时候,看到了

为 ADO 程序员设计的 ADO.NET (2)

ado|程序|程序员|设计 转换现有代码有许多 ASP 页面使用 ADO 对象来抽取数据.让我们来讨论几种典型的情况,您在不久的将来移植和改编代码时可能会遇上这些情形.如果您有从单个记录集生成报表的 ASP 页面,DataReader 对象将是您最好的伙伴.您浏览 DataReader 对象时,它会将结果输出到页面. String strConn, strCmd; strConn = "DATABASE=MyAgenda;SERVER=localhost;UID=sa;PWD=;";

基于Ajax的应用程序架构设计汇总

ajax|程序|架构|设计 1 浏览器端框架被划分成两大类: •应用程序框架:提供浏览器的功能,但是常以包括窗口小部件抽象和另外的部件而出名,其功能主要围绕桌面GUI框架. •基本结构框架:提供基本的管道和可移植的浏览器抽象,让开发者去创建内容.典型的功能: * 针对XMLHttpRequest的包装器以封装浏览器-服务器的交互.(所有的框架都提供这一功能). * XML操作和查询. * 根据来自XMLHttpRequest的应答执行DOM操作. * 在一些情况中,与另外的浏览器端技术如Flas

为ADO 程序员设计的 ADO.NET (转)

ado|程序|程序员|设计 摘要:本文讨论如何以 ADO.NET 方式实现基本数据库操作,以及何时使用 ADO.NET 代替 ADO. 目录.NET 中的数据访问读取数据DataSet.DataTable 和 Recordset转换现有代码更新数据XML 扩展支持总结 自若干年前推出开放式数据库连接 (ODBC) 应用程序编程接口 (API) 以来,出现了各种各样的数据库访问技术,而 ADO.NET 是其中最新的一种.在这过程中,发生了许多有趣的事.例如,COM 闯入数据库领域,开始培植 OLE

为 ADO 程序员设计的 ADO.NET

ado|程序|程序员|设计 摘要:本文讨论如何以 ADO.NET 方式实现基本数据库操作,以及何时使用 ADO.NET 代替 ADO. 目录.NET 中的数据访问读取数据DataSet.DataTable 和 Recordset转换现有代码更新数据XML 扩展支持总结 自若干年前推出开放式数据库连接 (ODBC) 应用程序编程接口 (API) 以来,出现了各种各样的数据库访问技术,而 ADO.NET 是其中最新的一种.在这过程中,发生了许多有趣的事.例如,COM 闯入数据库领域,开始培植 OLE

为 ADO 程序员设计的 ADO.NET (1)

ado|程序|程序员|设计 为 ADO 程序员设计的 ADO.NET 摘要:本文讨论如何以 ADO.NET 方式实现基本数据库操作,以及何时使用 ADO.NET 代替 ADO. 目录 .NET 中的数据访问读取数据DataSet.DataTable 和 Recordset转换现有代码更新数据XML 扩展支持总结自若干年前推出开放式数据库连接 (ODBC) 应用程序编程接口 (API) 以来,出现了各种各样的数据库访问技术,而 ADO.NET 是其中最新的一种.在这过程中,发生了许多有趣的事.例如

VB外接程序的设计- 得到VB的控制权

程序|控制|设计 VB外接程序的设计一,得到VB的控制权首先,外接,故名思意,当然必须是要和vb一起启动!在新建一外接工程后.新工程中设计器中有 Conncet.Dsr有这一元件,元件中有最为关键的一个事件 Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As

Windows Phone实用教程:利用Blend为程序添加设计时数据

Blend自诞生那一天起就伴随这开发者如此的评价: 有VS还用Blend干啥,直接码代码就好了. Blend会生成一堆垃圾无用代码,很不爽. 对于这类我只会在心里评价,当你并不真正了解一样事物的情况下,就给这个东西扣帽子,实在很不公平. 作为程序员首先要明白时间的宝贵和效率的重要性,更应了解各种效能工具,Blend便是其中一个,如果你仍然觉得学怎么用Blend纯粹是浪费时间, 那么恭喜你,后面的文章可以忽略了:-) [本文讲述的内容] 使用blend为程序添加设计时的数据. [本文适用的场景]