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

📄 chap391.htm

📁 经典的C入门教程,想学习VC的朋友们可以看一下
💻 HTM
📖 第 1 页 / 共 2 页
字号:

<p>(1) 在表格上加入TPanel元件。 

<ol START="2">
  <li>设定TPanel的Align性质为 alTop。因为我们希望工具列置於表格上方,所以将它设定为浮贴於表格的上方。如此一来当表格大小改变时,工具列的宽度为跟着改变,而高度则维持原先的高度。</li>
  <li VALUE="3">将TSpeedButton加入TPanel原件上。</li>
</ol>

<p>你可以在表格中加入多个上述的工具列,它们会依序自动排列於表格的上方,因此你不需费心去处理这些额外的动作。</p>

<p>04-01 TSpeedButton 元件解析及设定</p>

<p>ToolBar的几个基本要素是:</p>

<p>(1) 代表该功能的图形。</p>

<p>(2) 可依状况切换其状态。 

<ol START="3">
  <li>当使用者点取该功能时,必须执行该功能。</li>
</ol>

<p>我们来看看TSpeedButton如何达到以上的要求。</p>

<p>首先,TSpeedButton具备Glyph性质,可以指定其图形,所以第一个要求不成问题,再来TSpeedButton具备以下叁种状态: 

<ul>
  <li>一般按钮的功能。</li>
  <li>可以除能/致能。</li>
  <li>具备群组特性。(也就是说同一群组的TSpeedButton会互相影响,因此可轻易做出互斥的功能,以绘图程式为例,一次只能使用一种工具,因此当使用者选取工具时,除了被选取的工具之外,其他的工具应该都呈浮起状态)</li>
</ul>

<p>由上可知,TSpeedButton确实是实作ToolBar的适当人选。</p>

<p>04-02将SpeedButton加入ToolBar</p>

<p>依照我们先前的需求,我们需要一个可以切换绘图工具的工具列,因此我们就照前面所说的方式来完成它。</p>

<p><img SRC="Image14.gif" WIDTH="464" HEIGHT="35"></p>

<p>图07工具列</p>

<p>图07就是我所加入的SpeedButton,除此之外还有几个程序必须完成 

<ul>
  <li>为SpeedButton命名。取一个有意义的名字。</li>
  <li>依需要设定其高度及位置。</li>
  <li>设定图形。</li>
  <li>设定SpeedButton状态初值。</li>
  <li>设定群组特性。</li>
</ul>

<p>◎ 设定事件处理函式。</p>

<p>SpeedButton的命名原则和一般变数的命名原则相同,简单明了就好。以本程式为例,我们就可以LineButton、RectangleButton等名字命名之。命名时只要改变SpeedButton的Name性质即可。</p>

<p>至於设定图形,只要先选取该SpeedButton,然後至物件检视器点取Glyph性质,然後将欲选取的点阵图Load进来,即可完成设定图形的程序了。</p>

<p><img SRC="Image15.gif" WIDTH="294" HEIGHT="254"></p>

<p>图08 Glyph图形之选取。</p>

<p>设定状态初值:由於我们希望本程式执行的初始值是使用CLine元件,因此我将LineButton的Down属性为True,其馀则为 
False。</p>

<p><img SRC="Image16.gif" WIDTH="464" HEIGHT="35"></p>

<p>图09选取後的状态</p>

<p>设定群组特性:群组特性是SpeedButton用以实作出ToolBar的重要功能之一。我们可以将一群SpeedButton设为同一群组,如此一来在此一群组的SpeedButton就具备了互斥特性,也就是说在任何一个SpeedButton按下时,会导致其他的SpeedButton浮起。此为实作ToolBar的必备条件,而利用SpeedButton可以轻易达成此目的。</p>

<p>设定群组特性其实很简单,只要把该群组的SpeedButton的Groupindex性质设为相同数字即可,在此例中我们希望将所有绘图工具列按钮设为同一群组,因此我把该相关工具的Groupindex性质都设为1。</p>

<p>另外,相信你已经发现在上面的工具列中,除了前面所谈到的绘图工具之外,我还多加了两个额外的SpeedButton 
,它们是用来设定笔及笔刷的工具。在此例中,我们是以它来叫出另外两个设定笔及笔刷的工具列,因此它必须具备所谓Toggle 
On/Off的开关功能。也就是类似CheckBox的功能。</p>

<p>SpeedButton也可轻易达到以上的要求,只要设定该SpeedButton的AllowAllUp属性为True即可以做到此功能。</p>

<p>最後我们必须将设定笔及笔刷的两个SpeedButton,PenButton及BrushButton的Groupindex分别设为 
2、3,如此才不会和绘图工具的SpeedButton的群组特性相干扰。</p>

<p>05工具列的事件处理函式</p>

<p>完成的工具列的设定之後,接着我们要设定工具列的处理函式,由於此工具列是用来切换绘图工具的,因此我们只要处理SpeedButton的OnClick事件,再分别根据不同的事件做处理即可。</p>

<p>在此例中,OnClick的事件处理函式其很简单,只要删除原来使用的绘图工具物件,再重新启始一个新的绘图工具即可。</p>

<p>//---------------------------------------------------------------------</p>

<p>void __fastcall TGraphEx::LineButtonClick(TObject *Sender)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; delete m_pObj;</p>

<p>&nbsp;&nbsp;&nbsp; m_pObj = new CLine(Canvas);</p>

<p>}</p>

<p>//---------------------------------------------------------------------</p>

<p>void __fastcall TGraphEx::PolylineButtonClick(TObject *Sender)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; delete m_pObj;</p>

<p>&nbsp;&nbsp;&nbsp; m_pObj = new CPolyline(Canvas);</p>

<p>}</p>

<p>//---------------------------------------------------------------------</p>

<p>void __fastcall TGraphEx::PolygonButtonClick(TObject *Sender)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; delete m_pObj;</p>

<p>&nbsp;&nbsp;&nbsp; m_pObj = new CPolygon(Canvas);</p>

<p>}</p>

<p>//---------------------------------------------------------------------</p>

<p>void __fastcall TGraphEx::RectangleButtonClick(TObject *Sender)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; delete m_pObj;</p>

<p>&nbsp;&nbsp;&nbsp; m_pObj = new CRectangle(Canvas);</p>

<p>}</p>

<p>//---------------------------------------------------------------------</p>

<p>void __fastcall TGraphEx::EllipseButtonClick(TObject *Sender)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; delete m_pObj;</p>

<p>&nbsp;&nbsp;&nbsp; m_pObj = new CEllipse(Canvas);</p>

<p>}</p>

<p>//---------------------------------------------------------------------</p>

<p>void __fastcall TGraphEx::RoundRectButtonClick(TObject *Sender)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; delete m_pObj;</p>

<p>&nbsp;&nbsp;&nbsp; m_pObj = new CRoundRect(Canvas);</p>

<p>}</p>

<p>//---------------------------------------------------------------------</p>

<p>在完成了以上的设定之後,此程式就具备了利用绘图工具列来切换绘图工具的功能。</p>

<p><img SRC="Image17.gif" WIDTH="460" HEIGHT="382"></p>

<p>图10具备绘图工具列的绘图程式范例。</p>
</font>

<p align="right"><font SIZE="2"><!--webbot bot="ImageMap" rectangle="(40,1) (71, 23)  ../ch4/chap04.htm" rectangle="(4,1) (36, 23)  chap39.htm" src="../ch1/NextBack.gif" width="72" height="24" alt="NextBack.gif (743字节)" border="0" startspan --><MAP NAME="FrontPageMap1"><AREA SHAPE="RECT" COORDS="40, 1, 71, 23" HREF="../ch4/chap04.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap39.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch3/chap391.htm/map1"><img ismap usemap="#FrontPageMap1" border="0" height="24" alt="NextBack.gif (743字节)" src="../ch1/NextBack.gif" width="72"></a><!--webbot bot="ImageMap" endspan i-checksum="1093" --></font></p>
<font SIZE="2">

<p><small><a href="../../../index.htm">首页</a> &gt;&gt; <a href="../../program.htm">程序设计</a> 
  &gt;&gt; <a href="../cbuilder.htm">C++ Builder</a>&nbsp; &gt;&gt;&nbsp; </small><font>具体而微的绘图程式</font>&middot;小结</p>
</font>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -