📄 014.htm
字号:
</font><p><font face="宋体" lang="ZH-CN">表</font>5.3 Mode<font face="宋体"
lang="ZH-CN">的取值及含义</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━</font></p>
<p><font face="宋体" lang="ZH-CN"> </font>Mode <font face="宋体" lang="ZH-CN">象素颜色</font></p>
<p><font face="宋体" lang="ZH-CN">──────────────────────────</p>
<p> </font> PmBlack <font face="宋体" lang="ZH-CN">黑色</p>
<p> </font>PmWhite <font face="宋体" lang="ZH-CN">白色</p>
<p> </font>PmNop <font face="宋体" lang="ZH-CN">不变</p>
<p> </font>PmCopy <font face="宋体" lang="ZH-CN">使用</font>Color<font
face="宋体" lang="ZH-CN">属性中的颜色</p>
<p> </font>PmNotCopy <font face="宋体" lang="ZH-CN">笔颜色的反转值</p>
<p> </font>PmMergePenNot <font face="宋体" lang="ZH-CN">笔的颜色与屏幕颜色反转值的结合</p>
<p> </font>PmNaskNotPen <font face="宋体" lang="ZH-CN">屏幕颜色与笔颜色</p>
<p> </font>PmMergeNotPen <font face="宋体" lang="ZH-CN">屏幕颜色与笔颜色反转值的结合</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>5.1.3 TBrush OBject(<font face="宋体" lang="ZH-CN">画刷对象</font>)</p>
<font face="宋体" lang="ZH-CN"><p> 画刷对象用以填充图形,如用画刷颜色或图案对矩形或椭圆进行填充。</font>TBrush<font
face="宋体" lang="ZH-CN">拥有一个画刷句柄</font>(HBrush)<font face="宋体"
lang="ZH-CN">。</p>
<p> 画刷的颜色定义在</font>Color<font face="宋体" lang="ZH-CN">属性中。画刷还有一个</font>Bitmap<font
face="宋体" lang="ZH-CN">属性,该属性只能在运行时得到,画刷可使用位图填充图形以产生特殊效果。位图大小为</font>8<font
face="宋体" lang="ZH-CN">个象素点,高</font>8<font face="宋体" lang="ZH-CN">个象素点宽。</p>
<p> </font>Style<font face="宋体" lang="ZH-CN">属性定义了画刷填充图形的风格。</font></p>
<p>5.1.4 TColor<font face="宋体" lang="ZH-CN">类型</p>
<p> </p>
<p> </font>TColor<font face="宋体" lang="ZH-CN">类型用于定义一个对象的颜色。很多部件的颜色属性就是</font>TColor
<font face="宋体" lang="ZH-CN">类型,</font> <font face="宋体" lang="ZH-CN">在</font>Graphics<font
face="宋体" lang="ZH-CN">单元中</font>TColor<font face="宋体" lang="ZH-CN">定义如下:</p>
<p> </p>
<p> </font>TColor = -(COLOR_ENDCOLORS + 1)..$02FFFFF;</p>
<p> </p>
<p><font face="宋体" lang="ZH-CN">这是一个</font>32<font face="宋体" lang="ZH-CN">位二进制数据。</font>Graphic<font
face="宋体" lang="ZH-CN">单元中还定义了一些常用的颜色常量,这些常量或直接映射成系统调色板中最相近的颜色,或映射成</font>Wondows
<font face="宋体" lang="ZH-CN">控制面板中颜色部分的系统视频颜色。</p>
<p> 直接映射成系统调色板中的颜色有: </p>
<p> </font>ClAqua,CLBlack,ClBlue,ClbkGrray,ClFuchsoa......ClYellow</p>
<font face="宋体" lang="ZH-CN"><p> 映射程序用</font>4<font face="宋体"
lang="ZH-CN">字节的二进制码来定义颜色,低</font>3 <font face="宋体"
lang="ZH-CN">位字节代表</font>RGB <font face="宋体" lang="ZH-CN">相应的颜色,如</font>$00FF0000<font
face="宋体" lang="ZH-CN">表示纯蓝,</font>$0000FF00<font face="宋体" lang="ZH-CN">表示纯绿,</font>$000000FF<font
face="宋体" lang="ZH-CN">表示纯红,</font>$00000000<font face="宋体" lang="ZH-CN">表示黑色,</font>$00FFFFFF<font
face="宋体" lang="ZH-CN">表示白色。如果最高位字节是</font>$00,<font
face="宋体" lang="ZH-CN">则表示用系统调色板中最相近的颜色;最高位字节是</font>$01<font
face="宋体" lang="ZH-CN">,则表示用当前调色板中最相近的颜色匹配;最高位字节是</font>$02<font
face="宋体" lang="ZH-CN">,则用当前设备描述表中逻辑调色板的次相近颜色匹配。</p>
<p> 用</font>Windows API<font face="宋体" lang="ZH-CN">的</font>SelectPalette<font
face="宋体" lang="ZH-CN">函数可创建逻辑调色板,要实现逻辑调色板到硬件调色板的映射,需用函数</font>RealizePalett<font
face="宋体" lang="ZH-CN"> </font></p>
<p>5.2 <font face="宋体" lang="ZH-CN">图形程序的开发 </p>
<p> </font>Graphex.dpr<font face="宋体" lang="ZH-CN">是一个简单的图形图像应用程序,运行状态如图</font>5.2<font
face="宋体" lang="ZH-CN">。该程序可用鼠标绘制多种图形,可设置画笔颜色、画刷填充方式;另外还可以浏览位图、元文件、图标,改变它们的大小,并打印。本节结合例程讲述以下问题:</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">在工具条中添加加速按钮</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">响应鼠标事件</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">设置画笔和画刷</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">实现绘图的“橡皮擦”功能</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">加入状态条</font></p>
<p>5.2.1 <font face="宋体" lang="ZH-CN">在工具条中添加加速按钮 </p>
<p> 加速按钮是应用程序常用的部件,它是替代菜单的快捷形式,通常把多个加速按钮集中在一个工具条中以方便使用。</font>Graphex<font
face="宋体" lang="ZH-CN">中有三个工具条,它们是</font>TPancel<font
face="宋体" lang="ZH-CN">部件,面板上有几组加速按钮,用以设置绘图方式、画笔、画刷。</p>
<p> 每个加速按钮的</font>glyph<font face="宋体" lang="ZH-CN">属性是图像对象,位图对象用来指示该按钮是否被使用。</font>glyph
<font face="宋体" lang="ZH-CN">通常需要四幅图像,分别表示按下、不按、选择、失效四种状态。程序员可根据个人喜好来选择图像。</p>
<p> 加速按钮使用图像来告诉用户其状态和目的,因为按钮上无标题,</font>
<font face="宋体" lang="ZH-CN">因此应给用户正确的提示:</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">把</font>Down<font face="宋体"
lang="ZH-CN">属性设置成真值使加速按钮呈按下状态</p>
<p> ●</font> <font face="宋体" lang="ZH-CN">把</font>Enable<font face="宋体"
lang="ZH-CN">属性设置成假值使加速按钮呈失效状态。 </p>
<p> 例程中缺省的绘图工具是画线,因此应用程序开始时画线按钮呈按下状态。</p>
<p> 在应用程序中,常把一些功能相似的按钮放在一起,用户在同一时刻只能选择其中的一个按钮。当其它按钮按下时,原来被按下的按钮自动弹起,这些选择排它的按钮称为一组加速按钮。</p>
<p> 要使多个加速按钮成为一组,将这些按钮的</font>GraphIndex<font
face="宋体" lang="ZH-CN">属性设成相同的值。最简单的办法是在设计状态时,用鼠标选中各个加速按钮,然后设置</font>GraphIndex<font
face="宋体" lang="ZH-CN">值。</p>
<p> 有时用户按一个已经按下的按钮,希望该按钮能够弹起,这样没有任何按钮被按下,使用</font>AllowAllup
<font face="宋体" lang="ZH-CN">属性可实现上述功能。对于一组加速按钮来讲,设置该组中任一按钮的</font>AllowAllup<font
face="宋体" lang="ZH-CN">可使这组的每一个按钮具有这种功能。</font></p>
<p>Graphex<font face="宋体" lang="ZH-CN">程序中设计了三组加速按钮和两个单独的加速按钮。</font>
<font face="宋体" lang="ZH-CN">第一组加速按钮用来选择绘图工具,它与两个单独的按钮处在同一面板中,这个面板是缺省可见的。另外两个按钮分别代表画笔、画刷。第二组与第三组加速按钮处在两个缺省不可见的面板中,它们分别代表不同风格的画笔和画刷,只有按下第一个面板中的画笔</font>(<font
face="宋体" lang="ZH-CN">或画刷</font>)<font face="宋体" lang="ZH-CN">按钮,第二</font>(<font
face="宋体" lang="ZH-CN">或第三</font>) <font face="宋体" lang="ZH-CN">个面板才会显示,这样用户就可以选择画笔、画刷了。 </p>
</font><p>5.2.2 <font face="宋体" lang="ZH-CN">响应鼠标事件 </p>
<p> 鼠标常被用作绘图的工具,应用程序利用鼠标位置的变化来绘制各种不同的图形。鼠标有三个动作:鼠标按钮按下、鼠标移动、鼠标按钮弹起。在</font>Delphi<font
face="宋体" lang="ZH-CN">中,</font> <font face="宋体" lang="ZH-CN">对应三个动作有三个不同的事件:</font>OnMouseDown,OnMouseMove,OnMouseUp<font
face="宋体" lang="ZH-CN">。</font></p>
<p><font face="宋体" lang="ZH-CN">当</font>Dlephi<font face="宋体" lang="ZH-CN">应用程序探测到一个鼠标动作时,它传递五个参数,并调用相应的事件响应。</p>
<p>程序员可利用这些参数来定义事件程序。五个参数如下表</font>5.4<font
face="宋体" lang="ZH-CN">: </p>
</font><p><font face="宋体" lang="ZH-CN">表</font>5.4 <font face="宋体" lang="ZH-CN">鼠标事件的五个参数</font>
</p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> 参数 含义</font></p>
<p><font face="宋体" lang="ZH-CN">──────────────────────────</p>
<p> </font>Sender <font face="宋体" lang="ZH-CN">探测鼠标动作的对象</p>
<p> </font>Button <font face="宋体" lang="ZH-CN">涉及的鼠标按钮:左键,中键,右键</p>
<p> </font>Shift <font face="宋体" lang="ZH-CN">鼠标动作时,</font>Alt,Ctrl,Shift<font
face="宋体" lang="ZH-CN">按钮的状态</p>
<p> </font>X,Y <font face="宋体" lang="ZH-CN">事件发生时鼠标的坐标</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p> 当鼠标按下时发生</font>OnMouseDown<font face="宋体" lang="ZH-CN">事件。举一个简单例子来说明程序如何对该事件进</p>
<p>行响应。假如我们想在鼠标按下的地方出现</font>"Here"<font
face="宋体" lang="ZH-CN">。</font></p>
<p><font face="宋体" lang="ZH-CN">响应鼠标的</font>OnMouseDown<font face="宋体"
lang="ZH-CN">事件 </p>
<p> 可在该事件中调用</font>TextOut<font face="宋体" lang="ZH-CN">方法: </p>
<p> </font>procedure TForm1.FormMouseDown(Sender: TObject,Button: TMouseButton;</p>
<p>Shift : TShifState; X,Y : Integer);</p>
<p>begin</p>
<p>Canvas.TextOut(X, Y, 'Here!');</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">用户放松鼠标键时发生</font>OnMouseUp<font
face="宋体" lang="ZH-CN">事件。该事件发生时,鼠标到达的对象并不一定是鼠标键按下时鼠标所在的对象。例如,用户可在窗体之外画一条线段,</font>(<font
face="宋体" lang="ZH-CN">鼠标在窗体外,线段在窗体内</font>)<font
face="宋体" lang="ZH-CN">。下面的代码可用鼠标绘制直线:</font></p>
<p>procedure TForm1.FormMouseDown(Sender:TObject)</p>
<p>begin</p>
<p>Moveto(x,y); </p>
<p>end;</p>
<p> </p>
<p>procedure TForm1.FormMouse Up(Sender:Tobject)</p>
<p>begin</p>
<p>Lineto(X, Y);</p>
<p>end;</p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" background="bg.gif"><strong><A HREF="015.htm" ><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR>
<A HREF="013.htm" ><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR>
<A HREF="index.html" ><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR>
<A HREF="../../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首页</font></A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -