⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 o28.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
 

<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">作者 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     

        钟伟</font></p>    

      <p align=center><font color="#000000">工作单位 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成都电子研究所</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, 用" &gt;" 键 移 动 到 "Available     

        forms" 栏 中, 并 在 程 序 需 调 用 该 窗 体 处, 加 入 下 列 语 句:</font> </p>    

      <pre><font color="#000000">

	TForm1	*myform=new TForm1(this);



		myform- &gt;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- &gt;Text="";</font> </p>    

      <p><font color="#000000">---- Edit2- &gt;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=&quot;TEdit&quot;;



    for(int i=1;i<panel1-> ControlCount;i++)



    {



        if(Panel1- &gt; Controls[i]- &gt;<TEDIT*> 



ClassNameIs(namestring))



        {



            TEdit *p=dynamic_cast



 (Panel1- &gt;Controls[i]);



            P- &gt;Text=&quot;&quot;;



        }



}



</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 &amp;Key)



{



    if(Key==VK_RETURN)



    {



        SendMessage(this- &gt;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 &amp;Rect, TGridDrawState State)



{



    StringGrid1- &gt;Canvas- &gt;Font- &gt;



          Color=cellbuf[Col][Row].color;



StringGrid1- &gt;Canvas- &gt;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 + -