delphi 新form

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 新form相关的知识,希望对你有一定的参考价值。

我是delphi自学者,我想实现这样的功能form1为主在form1里建立一个区间,还有很多个button,这些button用来调出form2、form3……然后再这个区间内显示,调出来的这些子form只能在这个区间内拖曳移动。当按新的button时新的子form显示前个子form关闭。
这样的功能我该用什么控件实现。
请详细一点,我是新手自学者。

//新建一个Form窗体,单元文件如下,用作子Form的模板,子Form的尺寸自己设定即可

unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
type
  TForm2 = class(TForm)
  private
    Flag: Boolean;     //设置一个标记判断鼠标是否执行了移动
    procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE;    //监听鼠标开始移动的消息
    procedure WMNCHITTEST(var Msg: TWMNCHITTEST); message WM_NCHITTEST;            //监听窗体标题栏消息
  public
     Public declarations 
  end;
var
  Form2: TForm2;
implementation
uses
  Unit1;     //这里要use Form1所在的单元文件
$R *.dfm
procedure TForm2.WMEnterSizeMove(var Message: TMessage);
begin
  Flag := true;
end;
procedure TForm2.WMNCHITTEST(var Msg: TWMNCHITTEST);
begin
  inherited;
  if Flag then    //如果鼠标执行了移动
  begin
    if self.Left < Form1.Left then       //当窗体的位置超出了Form1窗体的位置,则最多调整为跟Form1窗体位置一致
      self.Left := Form1.Left
    else if self.Left + self.Width > Form1.Left + Form1.Width then
      self.Left := Form1.Left + Form1.Width - self.Width
    else if self.Top < Form1.Top then
      self.Top := Form1.Top
    else if self.Top + self.Height > Form1.Top + Form1.Height then
      self.Top := Form1.Top + Form1.Height - self.Height;
    Flag := false;
  end;
end;
end.


//以下是在Form1里面的调用方式
uses Unit2;     //先引用子Form的单元文件;

type
  TForm1 = class(TForm)
    procedure CreateForm(Sender: TObject);  //在TForm类声明的下面新增一个窗体创建的过程
  end;

var
  MyForm: TForm2;   //声明一个子Form类型的公共变量MyForm

procedure TForm1.CreateForm(Sender: TObject);  //窗体创建过程
begin
  if MyForm <> nil then   //如果公共变量MyForm已经创建,则销毁
    MyForm.Destroy;
  MyForm := TForm2.Create(Self);  //重新创建一个新的
  MyForm.FormStyle := fsStayOnTop;  //设置窗口置顶,方便观察效果
  MyForm.Show;  //显示窗体
end;


//ok,全部搞定,剩下的只要你把Form1下面那些需要点击后创建新窗体的Button的onclick事件绑定CreateForm过程即可。绑定方法:选中Button,在Object Inspector(属性)面板里面选择Events(事件),找到“OnClick”,在后面的下拉菜单里面可以看到CreateForm,选择即可。

参考技术A 你想创建的大概是
Mdi窗体吧 那不是默认建立的工程类型
你要新建 other projects 选择 mdi application

至于demo 百度
MDIDemo Delphi MDI 控制Demo
在csdn上有追问

我现在几个子form已经用普通模式建设完毕 功能都已经做好了,还能转换为mdi模式吗?如果可以怎么操作。

本回答被提问者和网友采纳
参考技术B 你可以试一下win32下的PageControl控件 跟你描述的差不多

delphi怎么使用

时,经常需要选中Form来改变Form的属性值或生成新的Form事件句柄。有些时候,选择页面只需简单在页面上单击。但更多的时候,页面总是完全被其上的组件所隐藏。

通过对象观察器(Object Inspector)顶端的下拉组合框来选择是一种解决办法。但从下拉列表中找出form类并不容易,尤其在页面包含了大量的组件时。
IDE提供了选择form的快捷键。如当一个Memo组件以client方式充满了整个form的客户区域时。要想选择form,只要在Memo上单击,然后按下Esc键,就会选中form。
因为IDE将焦点转向了最初所选对象的父对象。如有多个组件重叠。多按几次Esc键后,就会选中form。
2、复选container(容器)中的组件
Panel面板经常被用作其他组件的容器。如要同时选中Panel面板上的几个组件来移动它们或是改变它们的共同属性。一般可以通过Shift+单击来选择这些组件。但如想通过拖动鼠标来选的话,只会将panel拖的到处乱跑。按下Ctrl键再拖的话,就能选中后进行拖动。这个办法适用于所有的容器类组件(GroupBox, ScrollBox, ControlBar,等等)。
3、微调组件
选中一个组件后,按住Ctrl键再按下方向键(四个箭头)可以将组件往相应的方向以像素点为单位移动。同时按住Shift 和 Ctrl键,再按一下方向键的话可以使组件移至下一个网格定位点。
要想组件往相应的方伸长或缩短一个像素点的话,按住Shift键再按方向键。左右键调整组件宽度,上下键调整组件高度。
4、同时改变数个组件的属性
当选择了多个组件时,对象观察器(Object Inspector)将会显示这些组件的共同属性。如想让Form中的数个Edit组件都有同样的宽度的话,只需同时选中它们,然后在对象观察器中改变Width属性,所有您选中的组件宽度都会变成新的宽度值。
5、使用Alignment(对齐)对话框
使一组组件能够以某种方式对齐。如希望一个Edit组件和与其对应的Label组件中间对齐。先选中Edit组件,然后按住Shift键选择Label组件,再在其中一个组件上右击鼠标,选择弹出菜单上的Align(对齐)选项。这时会弹出一个Alignment(对齐)对话框,允许您按照某些顺序对齐组件(以第一个选定的为参照)。 6、有用的一组快捷键
快捷键 功能
F1 Help帮助
F3 Find
F4 Run To Cursor
步跟踪 进入函数过程实现内部)
F8 Step Over(单步跟踪)
F9 Run
F10 显示工具栏
F11 切换Object Inspector / Form / Unit
F12 切换 Form/Unit
Ctrl + F2 Program Reset
Ctrl + F3 Call Stack窗口
Ctrl + F4 关闭当前单元
Ctrl + F5 Add Watch 把当前选中添加到Watch中
Ctrl + F7 显示Evaluate/Modify dialog box
Ctrl + F9 编译
Ctrl + F11 Open Project
Alt + F4 关闭所有单元,但不关闭项目
Alt + F6 同F12
Alt + F10 相当于鼠标右键
Alt + F11 Use Unit 引用同一工程内的其他单元
Shif t + F7 Trace To Next Source Line
Shift + F8 调试时弹出CPU窗口
Shift + F10 同Alt + F10
Shift + F11 Add to Project
Shift + F12 显示View Form
Ctrl + Shift + F11 显示Project的Options
Ctrl + Alt + F11 显示Project Manager
Shift + Alt + F11 切换Object TreeView/Form/Unit
Ctrl + 鼠标左键 找到指向的变量名、单元名、类名等的相应的定义部分
Alt + 鼠标左键 块选代码
Ctrl + 鼠标转轮 加速滚屏
Ctrl + Shift + 数字键(0..9) 加书签或取消相同编号的书签(NUM不能用小键盘)
Ctrl + 数字键(0..9) 跳转到相应的书签的位置(NUM不能用小键盘)
移到屏幕的第一行,屏幕不滚动
Ctrl + Page Down 将光标移到屏幕的最后一行,屏幕不滚动
Ctrl + Home 将光标移至文件头
Ctrl + End 将光标移至文件尾
Ctrl + (向上方向键) 向上滚动屏幕,光标跟随滚动不出屏幕
Ctrl + (向下方向键) 向下滚动屏幕,光标跟随滚动不出屏幕
Ctrl + (向左方向键) 光标向左跳Tab
Ctrl + (向右方向键) 光标向右跳Tab
Shift + 方向键 选择代码
Ctrl + A 全选
Ctrl + B 显示Buffer List窗口
Ctrl + C 复制
Ctrl + F 显示Find窗口
Ctrl + I 同Tab键
Ctrl + J 显示代码模板列表
Ctrl + M 同Enter键
Ctrl + N 同Enter键
Ctrl + R 显示Replace Text窗口
Ctrl + S 保存当前单元
Ctrl + T 删除光标右边的一个单词
Ctrl + V 粘贴
Ctrl + X 剪切
Ctrl + Y 删除光标右边的一个单词
Ctrl + Z 撤销
Ctrl + Shift + B 显示Browser窗口
Ctrl + Shift + E 显示Explorer窗口
Ctrl + Shift + F 同Ctrl + F
Ctrl + Shift + G 插入GUID
Ctrl + Shift + I 选中的代码整体向右移块两格
Ctrl + Shift + J 选中的代码整体向左移块两格
Ctrl + Shift + M 同Ctrl + M
Ctrl + Shift + N 同Ctrl + N
Ctrl + Shift + T 显示Add To-Do List窗口
Ctrl + Shift + Y 同Ctrl + Y
Ctrl + Alt + B 显示Breakpoint List 窗口
L 显示Local Variables窗口
Ctrl + Alt + M 显示Modules窗口
Ctrl + Alt + S 显示Call Stack窗口
Ctrl + Alt + T 显示Threads窗口
Ctrl + Alt + V 显示Event Log窗口
Ctrl + Alt + W 显示Watches窗口
Ctrl + Space 显示代码自动完成列表
(Ctrl + Space显示代码自动完成列表,与操作系统的输入法有冲突,简单解决方式更换操作系统的输入法中的相应的快捷键)
Ctrl + K -> O 将选中转换为小写
Ctrl + K -> N 将选中转换为大写
参考技术A 它和vb差不多,所见即所得,采用界面设计与代码结合工作的方法,建议先认识一下各个组件,并且了解各组件的属性,Delphi简单而又非常实用的,这也是它一直流行到现在的原因。

以上是关于delphi 新form的主要内容,如果未能解决你的问题,请参考以下文章

delphi - 使用新事件创建自定义框架

Delphi 在设计时检测新组件的插入

delphi编程实现为Windows窗口标题栏添加新按钮

Delphi新注释

c ++指针将结构新数组指向delphi到DLL函数

delphi中,怎样设置新窗体打开时,就运行指定的SQL语句