📄 o28.htm
字号:
<html>
<head>
<title>C++Builder编程文集</title>
<meta http-equiv="目录类型" content="文本/html; 字符集=gb2312">
</head>
<body bgcolor="#FFFFFF">
<table width="100%" border="0" height="285">
<tr>
<td height="35">
<div align="center" class="p14"><font color="#000000">C++Builder3.0使用经验谈</font></div>
</td>
</tr>
<tr valign="top">
<td>
<p align=center><font color="#000000">作者
钟伟</font></p>
<p align=center><font color="#000000">工作单位 成都电子研究所</font></p>
<p><font color="#000000">- C++ Builder 3.0 是Borland 公 司( 现 已 更 名 为Insprise)
于1998 年 推 出 的 新 一 代 基 于C 语 言 的RAD 开 发 工 具。C++ Builder 3.0 的 问 世, 对 广 大
爱 好C 语 言 的 用 户 来 说 不 啻 是 个 福 音。 因 为 以 往 在Windows 下, 没 有 一 种 真 正 基 于C 语
言 的 可 视 化 编 程 语 言。 你 如 果 想 用VB 或Delphi 这 一 类 可 视 化 编 程 语 言 去 编 程, 你 就
不 得 不 去 重 温 一 遍Basic 或Pascal 语 言, 没 有 了 像C 语 言 一 样 可 以 灵 活 应 用 的 指 针,
没 有 了" + +"、"――" 这 样 一 类 可 爱 的 运 算, 总 之 一 切 使 用 起 来 都 不 如C 语 言 一 样 得 心
应 手。 现 在 这 一 切 烦 恼 都 不 复 存 在 了。C++ Builder 3.0 不 仅 支 持 传 统 的C 语 言, 也 支
持Borland 的OWL 和Microsoft 的MFC。 可 以 这 样 说,C++ Builder3.0 是 目 前Windows 下
功 能 最 为 强 大 的C 语 言 编 译 器。 由 于C++ Builder 3.0 问 世 不 久, 有 关 资 料 不 是 很 多,
下 面 结 合 笔 者 的 使 用 情 况, 谈 谈 几 点 经 验、 体 会。</font> </p>
<p><font color="#000000">---- <b>一、 动 态 调 用 窗 体Form </b></font></p>
<p><font color="#000000">---- 在 缺 省 情 况 下, 由File/New Form 生 成 添 加 入
项 目 文 件 中 的 窗 体 都 具 有"Auto Create"( 自 动 创 建) 的 特 性。 即 只 要 程 序 运 行, 该 窗
体 就 存 在 于 内 存 中 了, 不 管 当 前 它 是 否 被 调 用。 具 有 这 种 特 性 的 窗 体 一 般 适 用 于 窗
体 属 性 比 较 固 定、 经 常 被 调 用 的 情 况。 其 优 点 是 速 度 快, 缺 点 是 占 用 内 存。 在 实 际 程
序 设 计 中, 会 遇 见 大 量 类 似 对 话 框 功 能 的 窗 体, 它 们 用 于 显 示 状 态 或 输 入 信 息, 仅 须
在 程 序 中 调 用 一 下, 完 成 其 功 能 就 行 了, 无 需 常 驻 内 存。 这 时 可 以 通 过 选 择Project/Options/Forms,
将"Auto--Create forms " 栏 中 相 应 的 窗 体, 如Form1, 用" >" 键 移 动 到 "Available
forms" 栏 中, 并 在 程 序 需 调 用 该 窗 体 处, 加 入 下 列 语 句:</font> </p>
<pre><font color="#000000">
TForm1 *myform=new TForm1(this);
myform- >ShowModal();
delete myform;
</font></pre>
<p><font color="#000000">---- 窗 体Form1 仅 是 在 需 要 调 用 时 才 调 入 内 存, 调
用 完 成 后, 即 用delete 清 除 出 内 存。 这 样 可 减 少 程 序 对 内 存 资 源 的 占 用。</font> </p>
<p><font color="#000000">---- <b>二、 遍 历 窗 体 控 件 的 方 法</b> </font> </p>
<p><font color="#000000">---- 要 访 问 或 修 改 窗 体 上 的 控 件, 方 法 很 简 单, 以TEdit
为 例 子:</font> </p>
<p><font color="#000000">---- Edit1- >Text="";</font> </p>
<p><font color="#000000">---- Edit2- >Text="";</font> </p>
<p><font color="#000000">---- 但 如 果 窗 体 上 有 十 来 个 像Edit1 这 样 的 控 件,
需 要 进 行 相 同 的 初 始 化, 用 上 面 的 方 法 一 个 一 个 地 进 行, 岂 不 麻 烦 ! 所 以 有 必 要 掌
握 遍 历 窗 体 控 件 的 方 法。 在 介 绍 该 方 法 之 前, 让 我 们 先 了 解 一 下 窗 体Form 的Components
和Controls 属 性。 参 见 表 一。</font> </p>
<p align=center><font color="#000000">表 一</font> </p>
<div align=center>
<center>
<table bgcolor=#FFFFFF border=1 bordercolor=#000000 bordercolordark=#000000
bordercolorlight=#000000 cellspacing=1>
<tbody>
<tr>
<td><font color="#000000">属性</font></td>
<td><font color="#000000">类型</font></td>
<td><font color="#000000">说明</font></td>
</tr>
<tr>
<td><font color="#000000">ComponentCount</font></td>
<td><font color="#000000">Int</font></td>
<td><font color="#000000">目前Form上各类<br>
控件的总数</font></td>
</tr>
<tr>
<td><font color="#000000">Components</font></td>
<td><font color="#000000">TCompont*</font></td>
<td><font color="#000000">目前Form上指向<br>
所有控件的数组</font></td>
</tr>
<tr>
<td><font color="#000000">ControlCount</font> </td>
<td><font color="#000000">Int</font></td>
<td><font color="#000000">目前Form上某一子<br>
区域上各类控件的总数</font></td>
</tr>
<tr>
<td><font color="#000000">Controls TControl*</font></td>
<td><font color="#000000"> </font></td>
<td><font color="#000000">目前Form上指向某一子<br>
区域上所有控件的数组</font></td>
</tr>
</tbody>
</table>
</center>
</div>
<p><font color="#000000">---- 以 图 一 为 例( 图 略) 说 明,Form1 的ComponentCount=6,
而Panel1 的ControlCount=4.,</font> </p>
<p><font color="#000000">---- 其 中: 数 组 对 象</font> </p>
<pre><font color="#000000">
Components[0] Panel1
Components[1] Label1
Components[2] Edit1
Components[3] Label2
Components[4] Edit2
Components[5] Button1
数 组 对 象
Controls[0] Label1
Controls[1] Edit1
Controls[2] Label2
Controls[3] Edit2
</font></pre>
<p><font color="#000000">---- 下 面 这 段 代 码 完 成 了 对Panel1 上 所 有TEdit
控 件 的 遍 历 初 始 化。 读 者 稍 加 修 改, 即 可 对 其 它 控 件 进 行 遍 历。 这 里 有 一 个 小 技 巧,
我 们 把 需 要 进 行 初 始 化 的 控 件 放 置 在 了 一Panel1 上, 与 不 需 要 初 始 化 的 控 件 区 分 开
来, 这 样 便 于 编 程。</font> </p>
<pre><font color="#000000">
AnsiString namestring="TEdit";
for(int i=1;i<panel1-> ControlCount;i++)
{
if(Panel1- > Controls[i]- ><TEDIT*>
ClassNameIs(namestring))
{
TEdit *p=dynamic_cast
(Panel1- >Controls[i]);
P- >Text="";
}
}
</font></pre>
<p><font color="#000000">---- <b>三、 用Enter 键 控 制 焦 点 切 换 的 方 法</b>
</font>
</p>
<p><font color="#000000">---- 在Windows 环 境 下, 要 使 一 个 控 件 取 得 焦 点,
可 在 该 控 件 上 用 鼠 标 单 击 一 下, 或 按Tab 键 将 焦 点 移 至 该 控 件 上。 这 种 控 制 焦 点 切 换
的 方 法 有 时 不 符 合 用 户 的 习 惯。 就 图 一 而 言, 用 户 就 希 望 用Enter 键, 控 制 焦 点 由Edit1
切 换 到Edit2。 要 实 现 这 样 的 功 能 需 借 助WinAPI 函 数SendMessage 来 完 成。 方 法 是: 先
设Form1 的KeyPreview 属 性 为true, 然 后 在Form1 的OnKeyPress 事 件 中 加 入 如 下 的 代
码。 这 样, 用 户 就 可 以 通 过 按Enter, 键 控 制 焦 点 按 定 义 好 的Taborder 顺 序 来 移 动 了
!</font> </p>
<pre><font color="#000000">
void __fastcall TForm1::
FormKeyPress(TObject *Sender, char &Key)
{
if(Key==VK_RETURN)
{
SendMessage(this- >Handle,WM_NEXTDLGCTL,0,0);
Key=0;
}
}
</font></pre>
<p><font color="#000000">---- <b>四、 为TStringGrid 的 文 字 加 上 颜 色</b>
</font>
</p>
<p><font color="#000000">---- TStringGrid 是C++ Builder 提 供 给 用 户 的
一 种 字 符 网 格 控 件。 美 中 不 足 的 是, 它 没 有 提 供 分 别 修 改 各 单 元 字 体 颜 色、 大 小 的 方
法。 其 实 要 为TStringGrid 实 现 这 样 功 能, 只 需 在 程 序 中 稍 加 处 理 就 行 了。 方 法 是 自
定 义 一 个 二 维 数 组cellbuf, 它 的 下 标 与 网 格 单 元 列 行 一 一 对 应, 用 于 存 放 各 网 格 单
元 的 颜 色、 文 字 等 信 息。</font> </p>
<pre><font color="#000000">
struct CellStru
{
AnsiString msg; // 文 字 信 息
TColor color; // 文 字 颜 色
};
CellStru cellbuf[MAXCOL][MAXROW];
</font></pre>
<p><font color="#000000">---- 初 始 化cellbuf 后, 再 在 字 符 网 格 控 件StringGrid1
的OnDrawCell 响 应 事 件 中, 加 入 如 下 的 代 码 即 可。</font> </p>
<pre><font color="#000000">
void __fastcall TForm1::StringGrid1DrawCell
(TObject *Sender, int Col,
int Row, TRect &Rect, TGridDrawState State)
{
StringGrid1- >Canvas- >Font- >
Color=cellbuf[Col][Row].color;
StringGrid1- >Canvas- >TextOut(Rect.Left+3,
Rect.Top+3,cellbuf[Col][Row].msg);
}
</font></pre>
<p><font color="#000000">---- <b>五、 软 件 封 面 的 实 现</b> </font> </p>
<p><font color="#000000">---- 现 代 软 件 设 计 的 流 行 做 法 是, 在 程 序 运 行 完
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -