📄 58.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>TForm</title>
</head>
<div><center>
<table border="0" width="640">
<tr><td align="center"><b>TForm</b></td></tr>
<tr><td align="center"><font color="#CC9933"></font></td></tr>
<tr><td> 一、让窗口总是在最前面 <br> Form 的FormStyle属性设置为fsStayOnTop值。 <br><br>二、 动 态 调 用 窗 体Form <br> 在 缺 省 情 况 下, 由File/New Form 生 成 添 加 入 项 目 文 件 中 的 窗 体 都 具 有"Auto Create"( 自动 创 建) 的 特 性。 即 只 要 程 序 运 行, 该 窗 体 就 存 在 于 内 存中 了, 不 管 当 前 它 是 否 被 调 用。 具 有 这 种 特 性 的 窗 体 一 般适 用 于 窗 体 属 性 比 较 固 定、 经 常 被 调 用 的 情 况。 其 优点 是 速 度 快, 缺 点 是 占 用 内 存。 在 实 际 程 序 设 计 中, 会 遇见 大 量 类 似 对 话 框 功 能 的 窗 体, 它 们 用 于 显 示 状 态 或 输入 信 息, 仅 须 在 程 序 中 调 用 一 下, 完 成 其 功 能 就 行 了, 无需 常 驻 内 存。 这 时 可 以 通 过 选 择Project/Options/Forms, 将"Auto--Create forms " 栏 中 相 应 的 窗 体, 如Form1, 用" >" 键 移 动 到 "Available forms" 栏 中, 并 在 程 序 需 调 用 该 窗 体 处, 加 入 下 列 语 句: <br><br> TForm1 *myform=new TForm1(this); <br><br> myform- >ShowModal(); <br><br> delete myform; <br><br> 窗 体Form1 仅 是 在 需要 调 用 时 才 调 入 内 存,调 用 完 成 后, 即 用delete 清 除 出 内 存。这 样 可 减 少 程 序 对 内 存 资 源 的 占 用。 <br><br>三、遍 历 窗 体 控 件 的 方 法 <br> 要 访 问 或 修 改 窗 体 上的 控 件, 方 法 很 简 单, 以TEdit 为 例 子: <br><br> Edit1- >Text=""; <br><br> Edit2- >Text=""; <br><br> 但 如 果 窗 体 上 有 十 来个 像Edit1 这 样 的 控 件, 需 要 进 行 相 同 的 初 始 化, 用 上 面 的方 法 一 个 一 个 地 进 行, 岂 不 麻 烦 ! 所 以 有 必 要 掌 握 遍 历窗 体 控 件 的 方 法。 在 介 绍 该 方 法 之 前, 让 我 们 先了 解 一 下 窗 体Form 的Components 和Controls 属 性。 参 见 表 一。 <br> 表 一 <br><br> 属性 类型 说明 <br><br> ComponentCount Int 目前Form上各类 <br> 控件的总数 <br><br> Components TCompont* 目前Form上指向 <br> 所有控件的数组 <br><br> 目前Form上指向 <br> 所有控件的数组 <br> ControlCount <br> Int <br> 目前Form上某一子 <br> 区域上各类控件的总数 <br> Controls TControl* <br><br> 目前Form上指向某一子 <br> 区域上所有控件的数组 <br> <br><br> 以 图 一 为 例(图 略) 说 明,Form1 的ComponentCount=6, 而Panel1 的ControlCount=4., <br><br> 其 中: 数 组 对象 <br><br> Components[0] Panel1 <br><br> Components[1] Label1 <br><br> Components[2] Edit1 <br><br> Components[3] Label2 <br><br> Components[4] Edit2 <br><br> Components[5] Button1 <br> <br> <br><br> 数 组 对 象 <br><br> Controls[0] Label1 <br><br> Controls[1] Edit1 <br><br> Controls[2] Label2 <br><br> Controls[3] Edit2 <br> <br><br> 下 面 这 段 代 码 完 成 了 对Panel1 上 所 有TEdit 控 件 的 遍 历 初 始 化。 读 者 稍 加 修 改, 即 可 对 其它 控 件 进 行 遍 历。 这 里 有 一 个 小 技 巧, 我 们 把 需 要 进 行 初始 化 的 控 件 放 置 在 了 一Panel1 上, 与 不 需 要 初 始 化 的 控 件区 分 开 来, 这 样 便 于 编 程。 <br> AnsiString namestring="TEdit"; <br> for(int i=1;i< Panel1- > ControlCount;i++) <br> { <br> if(Panel1- > Controls[i]- > ClassNameIs(namestring)) <br><br> { <br><br> TEdit *p=dynamic_cast < TEdit* > (Panel1- >Controls[i]); <br><br> P- >Text=""; <br><br> } <br> } <br><br>四、不规则窗口 <br><br> 1.在窗口定义中,加入HRGN hWndRgn; <br> 2.在TForm::OnCreate()消息函数最后,加入下面的代码: <br> hWndRgn=::CreateEllipticRgn(0,0,Width,Height); <br> ::SetWindowRgn(hWndRgn,TRUE); <br> 3.设置TForm的属性为无标题,无边框。 <br> 4.编译连接应用程序,就可以看到一个椭圆形窗口。 <br><br>五、MDI Form <br> <br> 1.Application->CreateForm(__classid(Tjjcginput), &jjcginput); <br><br> 后不用在使用显示Form的语句就可以显示出来了。 <br><br> 2.form 的onclose 事件必须用下面语句释放空间: <br> void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action) <br> { <br> Action = caFree; <br> }</td></tr>
</table></center></div>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -