mdi-delphi 中MDI程序设计

问题描述

delphi 中MDI程序设计 10C
 本人在编写MDI程序建立子窗体时,出现如图所示的错误,求教大神!

具体内容:建立三个窗体mianformjchildform1childform2在mainform上放两个按钮,buttto1button2分别点击这两个按钮,能够在mainform中打开两个子窗体。部分代码如下:
mainform中的代码:
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.handleSW_SHOWNORMAL)
else
ShowWindow(Child.handleSW_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 TMainForm.Button1Click(Sender: TObject);
begin
OpenChildForm(TChildForm1ChildForm1 Self);
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
OpenChildForm(TChildForm2ChildForm2 Self);
end;

childform1childform2 中代码相同: Action:=caFree;错误提示: project project1.exe rasied exception class EInvalidOperation with message 'cannot create form.No MDI forms are currently active.

解决方案

你使用raise 异常捕获啊,两个 ChildForm ,没有实例化,是随机值指针吧,先创建在传进去试试

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

时间: 2024-07-28 16:42:58

mdi-delphi 中MDI程序设计的相关文章

在MDI程序中实现类似WPS2000的文件切换标签

用过WPS2000的朋友,肯定对其文件切换功能有很深的印象.当打开多个文件时,他可以使我们快速的切换到指定的文件.本文将详细地说明如何在自己的MDI程序中加入这样一个标签. 图一是本文例子程序运行画面. 图一 例子程序运行画面 开始之前,我们先对WPS2000中的文件切换标签做简单分析,这是一个Tab标签,该标签具有以下功能: 1.当鼠标移到Tab标签上时,对应的文字将变为蓝色: 2.新建或打开一个文件时,Tab标签会以文件标题为标签文本自动加入一项: 3.切换Tab标签时,对应的文件窗口会跟着

mdi-VC6中关于MDI程序中框架窗口重新排列的问题

问题描述 VC6中关于MDI程序中框架窗口重新排列的问题 场景如下:打开主程序一开始弹出一个HTMLView,通过这个view输入用户名和密码登录后打开其他的几个view,但是默认都是在此htmlview的后面显示的(最大化的时候),有没有办法在不关闭登录htmlview的前提下把其放到新打开view的最后显示?谢谢 解决方案 pMDIChild->SetWindowPos传SWP_NOMOVE | SWP_NOSIZE

在MDI窗体中,如何把最小化的子窗体放在主窗体的状态栏上

问题描述 在MDI窗体中,如何把最小化的子窗体放在主窗体的状态栏上 解决方案 解决方案二:下面的代码只是实现你上面说的要求.如果要求点击状态栏上的按钮,再把窗体show出来,还需要在下面代码的基础上再扩展.主要的思路就是,在父窗体能处理子窗体的最小化事件.//先建一个FormBase的基类,子窗体都从这个基类继承publicclassFormBase:System.Windows.Forms.Form{publicdelegatevoidFormMinSize(objectsender,Even

鼠标在MDI窗口中的指定的窗框中移动

问题描述 鼠标在MDI窗口中的指定的窗框中移动 鼠标在MDI窗口中的指定的窗框中移动,对应的窗口由MDI程序主程序调用执行,怎么实现?

初探Delphi中的插件编程

前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个工程的形式也不利于团队协作.为了提高工作效率,我希望利用DLL动态链接库的形式实现插件结构的编程. 插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函

初探Delphi中的插件编程_Delphi

插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函数.通过接口函数,插件容器可以向DLL模块传递参数实现动态控制.具体实现细节我将在下文说明并给出响应代码. 您可能需要先了解一下DELPHI中UNIT的结构,工程的结构.本文没有深入讨论DLL编程的理论细节,只是演示了一些实用的代码,我当时学习的是刘艺老师的<DELPHI深入编程>一书. 我也处于

Delphi中的消息处理

1.windows的消息驱动体系 在windows系统中,消息传递是实现对乡间通信和控制的主要手段.可以额系统都以消息驱动的方式工作.系统中发生的用户输入操作.显示信息的改变.系统环境参数变化等所有时间都以系统定义消息的形式出现在相关的应用程序和窗口.所以程序设计的主要任务就是为这些消息的处理设计代码. 在应用程序中,发送者可以通过发送消息要求接收者完成相应的处理.当程序运行时,windows系统为每个应用程序实例建立一个消息队列,一次保存发送给该程序实例的消息,在应用程序的主控部分,需要设置一

Delphi中的布尔类型

Delphi中预定义的布尔类型有四种:Boolean ,ByteBool,WordBool,LongBool.其中,Boolean 类型是首选布尔类型,其余三种是为其它编程语言和Windows 环境提供兼容性支持.这些布尔类型在使用上大同小异,但如果混淆使用将可能会有意外结果. 现做简单辨析供大家参考. 一.从资源占用的角度进行比较 一项Boolean 类型的数据占用 1字节的内存: 一项ByteBool类型的数据占用 1字节的内存: 一项WordBool类型的数据占用 2字节的内存: 一项Lo

085_《Delphi经典游戏程序设计40例》

<Delphi经典游戏程序设计40例> Delphi 教程 系列书籍 (085) <Delphi经典游戏程序设计40例> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 Part5 作者: (日)日高 徹 译者: 博硕文化 丛书名: 游戏编程大师系列 出版社:中国铁道出版社 ISBN:7113059848 上架时间:2004-12-16 出版日期:2004 年11月 开本:18开 页码:549 版次:1-1