Delphi MDI 子窗体的创建和销毁 [zhuan]

Delphi主窗体打开窗体及调用其他单元中的方法 Delphi主子窗体及单元方法 阅读详情

文章来源: Delphi MDI 子窗体的创建和销毁

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.MDIChildren[i];
    if form is formclass then
      result := true;
  end;
end;

//例如:打开frmAbout这个子窗体

procedure TfrmMain.actAboutExecute(Sender: TObject);
begin
  if not isInclude(TfrmAbout) then
//  if not Assigned(frmAbout) then
  begin
    frmAbout := TfrmAbout.Create(Self);
    frmAbout.Caption := '关于';
    frmAbout.Show;
  end
  else
    frmAbout.Show;
end;

 http://www.whois.com/whois/pc100.net

2. 如果判断一个form是否存在,用 assigned(aForm)来看是否有创建并指向这个instance. (需要注意form destroy掉时,aForm 指标并没有free掉,要注意下一条的细节。


3. 对于mdi child 的销毁,注意以下几项: 
   ①关闭mdi, 用form.close方法。 
   ②在 onClose事件处理中,需要判断是否可以 free掉, 用 Action := caFree 
   ③销毁form时,需要释放form参数的指针内容。 aForm := nil.


Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例: 
procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction); 
begin 
  Action := caFree; 
end;


Delphi为一个Form的关闭行为指定了四种方式,分别是: 
    caNone: 禁止Form被关闭  
    caHide: Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。 

    caFree: Form被关闭,并且释放其占用的资源。  
    caMinimize: Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。

原文出自:http://www.cnblogs.com/python001/

Delphi中DLL调用MDI窗口的实现详解 本文还有配套的精品资源,点击获取 简介:DLL(动态链接库)是Windows操作系统中的关键组件,支持代码和数据共享,提高效率。在Delphi编程语言中,DLL特别适用于多文档界面(MDI)应用程序。本文详细介绍了如何在Delphi中创建DLL来与MDI窗口进行交互,包括DLL项目创建、函数编写、导出函数、DLL调用及MDI窗口的管理等技术要点。 1. DLL定义... 阅读详情

相关推荐

MDI程序调用dll中的mdiChildForm例子并从主窗体传值到dll

调用dll中的窗体做子窗体,并将主程序中的 record传给dll

DELPHI中MDI子窗口的关闭 和打开

Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例: procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction); begin    Acti

wozengcong的专栏 7986

Delphi工具主程序调用子窗口(多窗口)

用DELPHI工具开发的调用子窗口DLL模块实例

Delphi中MDI窗体调用MDI子窗体Delphi中MDI窗体调用MDI子窗体,怎么调用

////先定义一个函数 private function FindForm(caption: string): bool; { Private declarations } public { Public declarations } end; var MAIN: TMAIN; implementation {$R *.dfm} //-----------通过用户定义的函数,判断窗体是否已存在-------------------- function Tmain.FindForm(caption: stri

fangyuan621的专栏 983

delphi中判断子窗体是否打开

delphi中判断子窗体是否打开delphi中判断子窗体是否打开

io_uring vs epoll ,谁在网络编程领域更胜一筹?

简介:从定量分析的角度,通过量化 io_uring 和 epoll 两种编程框架下的相关操作的耗时,来分析二者的性能差异。 本文作者:王小光,「高性能存储技术SIG」核心成员。 背景 io_uring 在传统存储 io 场景已经证明其价值,但 io_uring 不仅支持传统存储 io,也支持网络 io。io_uring 社区有众多的开发者尝试将 io_uring 用于网络应用。我们之前也在《你认为 io_uring 只适用于存储 IO?大错特错!》中也探索过 io_uring 在网络场景的应用及其

阿里云云栖号 3035

Delphi动态创建子窗口例子

Delphi动态创建子窗口例子procedure TForm1.mlskntlbr2ItemDown(Sender: TObject; const ItemIndex: Integer); begin case ItemIndex of 0: ShowSubForm(Form2, TForm2); 1: ShowSubForm(Form3, TForm3...

pdw2009的专栏 3541

PyCharm配置WSL开发环境保姆级教程:从安装Conda到项目依赖一键搞定

本文提供PyCharm配置WSL开发环境的完整教程,涵盖从安装Conda到项目依赖管理的全流程。详细介绍了WSL2环境准备、Conda环境配置、PyCharm远程解释器设置等关键步骤,并包含实用技巧和常见问题解决方案,帮助开发者高效搭建Python开发环境。

weixin_42620202的博客 309

Delphi窗体浮动小问题

在一个项目中发现这样一个问题,在Delphi父窗体弹出一个子窗体时,切换桌面窗体的显示.却发现这个子窗体没有跟着父窗体一起被切换窗体隐藏,而是继续浮动在桌面顶端.后来还是发现了问题所在,子窗体的FormStyle是设置成了fsNormal,但是在代码里面,弹出此子窗体时,却设置成了fsStayOnTop.所以就会出现以上的问题.

任游.Abraham.Wei.rEny0u.pRince 1013

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2455

避坑指南:OpenWRT改AP模式必做的5个关键设置(DHCP/防火墙/WAN口处理)

本文详细解析了将OpenWRT设备从路由模式切换为AP模式时,必须完成的五个关键设置步骤。核心在于理解AP模式本质是带无线的智能交换机,需彻底关闭DHCP服务、调整防火墙策略、正确桥接所有物理接口(包括WAN口处理),并集成无线网络,以确保设备能透明接入主路由网络,避免出现设备隔离或无法互访等常见问题。

t1u2v的博客 734

【Delphi FireMonkey实现窗体嵌入的功能】

以前在VCL模式下,个人喜欢实现选项卡的方式打开子窗体,即每打开一个子窗体,就在主窗体的PageControl上增加一个Page,并将子窗体嵌入到新增的Page中。后面开始玩FMX,发现VCL的方式不能直接套用,需要做一些修改才可以用,以下就是针对此问题做个笔记,希望对有需要的朋友们有用。以上两步就能实现FMX模式下的窗体嵌入功能,如下图,中间图表就是调用子窗体内容。功能描述:将子窗体在主窗体的Layout里面打开显示。子窗体显示的区域:主窗体的Layout3。以下是打开子窗体的函数。

1272

Eclipse邂逅Deepseek:本地化部署全攻略

通过前面一系列的步骤,我们成功地在 Eclipse 中完成了 Deepseek 的本地化部署,并且对部署后的功能进行了测试和优化,还解决了可能遇到的一些常见问题。这一过程不仅让我们体验到了将强大的大语言模型与高效的开发环境相结合的魅力,也为我们在软件开发过程中带来了诸多便利。本地化部署 Deepseek 到 Eclipse,使得我们在代码编写过程中能够获得智能的代码补全和精准的问答支持,大大提高了开发效率。同时,本地化部署保障了数据的安全性和隐私性,避免了数据在传输过程中可能面临的风险。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4517

一个简单的MDI示范程序(Delphi)

最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI示范程序,这个程序的功能是打开和保存图形文件(包括位图、图标等),为了完成这个任务,我们有一个大概的计划,计划内容如下: (1)建立主窗体(一个MDI父窗体),包括菜单。 (2)为【File | Open…】 和【File | Save…】菜单选项编写代码。 (3)为Windows菜单上的Cascade、Tile和Arran...

weixin_34121282的博客 373

音视频OSD——使用freetype将矢量字库的信息叠加至YUV

目录freetypes使用步骤1)包含头文件:2) 初始化库:3)加载face对象:4)设置字体大小5)设置字体位置,以及旋转度数:6)加载字形图像准备矢量字库代码.c.h效果叠加至YUV freetypes FreeType是一个完全开源的、可扩展、可定制且可移植的字体引擎,它提供TrueType字体驱动的实现统一的接口来访问多种字体格式文件 下载freetypes tar -xjf freetype-2.4.10.tar.bz2 cd freetype-2.4.10/ ./configure

路人coder 2364

华为OD机试真题 新系统2026-04-01 C++ 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 383

Delphi使用SetWindowLong 修改子窗体属性,实现z轴任意覆盖

今天有个朋友问我一个问题,现在Delphi创建的子窗体默认子窗体只能在主窗体上面,不能被主窗体遮挡,问如何才可以使主窗体获得焦点的时候可遮挡子窗体,本来以为很简单的问题,其实还是需要了解一个函数。 SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。 原型 LONGSetWindowLong( HWNDhWnd,//handletowindow ...

重楼的博客 917

揭秘AI人工智能中Stable Diffusion的模型微调技巧

Stable Diffusion作为一种强大的文本到图像生成模型,在艺术创作、设计、娱乐等多个领域展现出了巨大的应用潜力。然而,其默认的模型输出可能无法满足特定用户或特定场景的个性化需求。本文章的目的在于深入揭秘Stable Diffusion的模型微调技巧,让读者能够根据自己的需求对模型进行定制化调整,生成符合特定风格、主题或要求的图像。范围涵盖了从基础概念到实际操作,从理论原理到项目实战的全方位内容,旨在为读者提供一个系统且深入的学习指南。

大模型应用工坊 949

Delphi中实现MDI子窗体(转)

Delphi中实现MDI子窗体用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容   ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子。MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理、切换等工作。自然,子窗体上承载的内容可各不相同。Tidy浏览器最终实现了三种...

dkopg24406的专栏 2049

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Delphi中MDI父窗体与子窗体菜单合并

如果你写的MDI程序中,要将父窗体与子窗体菜单融合在一起,Delphi提供了非常方便的方法.将父窗口的上级菜单比方说"File"文件,有个属性GroupIndex,设为0,将子窗体的菜单比方说"Funcion"功能,将GroupIndex设为1,这样的话,在打开子窗体的时候,就会将菜单合并在一起了.如果你不改这个属性的话,一般来说,GroupIndex都是0,这样一来,打开子窗体的时候,父窗体的菜单就看不到了.还有注意,将菜单本身的AutoMerge(自动合并)设为false,如果放成true的话,两个菜单

疯流人物 1028

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

建立Delphi窗体模板

最近在写一个信息管理系统,为了方便使用Delphi先建立一个模板窗体,以后就可以直接使用这个窗体来建立客户窗体了。窗体要实现以下功能:1.       这个窗体是作为MDI子窗体使用的,Delphi默认的MDI子窗体关闭是最小化,所以需要修改实现关闭后彻底释放窗体。2.       中文显示环境。3.       Enter键代替Tab键实现控件切换。4.       把窗体上的主

lizpen的专栏 3245

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: delphi如何把Frame嵌入一个Form里面
下一篇: php如何抓取网页中邮箱地址代码
shao882
博客等级 码龄12年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值