说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

RECT在Delphi中的灵活使用

HTML文档下载 WORD文档下载 PDF文档下载
RECT在Delphi中的灵活使用

----Delphi为用户提供了一个方便的绘图环境

即某些控件的CANVAS属性(画布)。用户可以把某些控件的表面作为一张画布

在上面绘制各种图形或显示图像

但在CANVAS的使用过程中少不了一个特殊对象

那就是矩形RECT

灵活使用它会完成很多特殊的功能

为Delphi编制的Windows程序增加活力。

RECT的特点

----RECT既是一个特殊的数据结构,又是一个函数

它的作用就是定义一个矩形区域对象

而作为函数使用时它可以用两个属性(Tpiont型)指明区域范围

同时也可分解成四个单一的变量类型(Integer型)

即:

topleft:左上角坐标(Tpiont型变量);

bottomright:右下角坐标(Tpiont型变量);

topleft.x或left:左上角横坐标;

topleft.y或top:左上角纵坐标;

bottomright.x或right:右下角横坐标;

bottomright.y或bottom:右下角纵坐标。

----例如,下面三种方法定义一个相同的RECT变量:

Rect(10

10

110

210);

topleft:=Piont(10

10);

bottomright:=Point(110

210);

left:=10;top:=10;right:=110;Bottom:=210;

----下面的代码在Form1窗体上定义一个RECT矩形并用红色填充:

var

NewRect: TRect;

begin

NewRect := Rect(20

30

50

90);

Form1.Canvas.Brush.Color := clRed;

Form1.Canvas.FillRect(NewRect);

end;

----从上面可以看出

RECT只是一个通用变量

它并不属于任何控件本身

定义之后可由任何具有CANVAS属性的控件使用

以指明某控件表面的一个矩形区域

并且程序运行过程中可随意修改尺寸和位置。

RECT操作命令

Rect(x1

y1

x2

y2):定义Rect区域范围。

FillRect(rect:Trect):用填充色填充Rect区域。

FloodFill:用填充色填充Rect之外区域。

textrect(Rect:TRect;X

Y:Integer;constText:string):在Rect对象中显示文本

其中的X、Y为显示文本的坐标值

是相对于画布的坐标而不是相对于RECT的坐标;const为显示的字符个数;string为待显示的字符串,只有在RECT内的字符才能显示出来

超出部分不显示。

stretchdraw(constRect:TRect;Graphic:TGraphic):把图像文件填充到Rect之中

并且图像按RECT的尺寸自动伸缩

其中的Graphic可为BMP或ICO等图像资源。

font.size:定义画布上显示文字的尺寸。

font.color:定义画布上显示文字的颜色。

textwidth:返回字符串的长度。

textheight:返回字符串的高度。

Brush.Color:定义画布的填充颜色。

Copyrect(Dest:TRect;Canvas:Tcanvas;Source:TRect):把图像从一个矩形中拷到另一个矩形之中

并且按目标矩形尺寸自动伸缩

其中,Dest为目标画布矩形

Canvas为源画布

Source为源矩形。

----由于上述命令均是基于画布本身使用的

所以具体使用时必须加上控件及画面属性

例如下面的代码:

var

TheRect: TRect;

begin

TheRect.Top := 10;

TheRect.Left := 10;

TheRect.Bottom := 100;

TheRect.Right := 100;

Form1.Canvas.TextRect(TheRect

0

0

'Hello

world!');

end;

应用实例

----本文利用RECT完成四种特殊屏幕效果的制作

分别为平滑渐变窗口、背景字符串的随机显示、百页窗式显示图像及图像的平铺显示,主要使用了RECT的颜色填充、字符串显示、矩形图像的拷贝等命令,具体实现方法并不复杂,所需要控件及程序代码请见文后程序(见编者注)。该程序运行之后首先通过OpenDialog窗口指定一个图像文件

可为BMP位图文件或ICO图标文件。如果演示百页窗式的图像显示,最好使用接近全屏的大幅图像

而图像的平铺显示可选用小一些的图像。然后按下按钮1,则初始化窗口为自上而下由黑到蓝的平滑窗口

全屏幕方式效果更好;按下按钮2则在窗口内随机显示字符串

其背景、文字颜色以及位置都是随机变化的;按下按钮3则演示百页窗式显示图像方法;按下按钮4实现图像的平铺显示;按下按钮5退出程序。以上方法及程序在Windows95、Delphi2.0环境下调试通过。

----编者注:本文源程序代码发表在本报WWW站点上,地址是:http://www.computerworld.com.cn/98/skill/default.htm。欢迎访问!

用VB5设计适应性界面

北京1840信箱计算中心(102205)--杨春生

--------------------------------------------------------------------------------

----在设计应用软件时,设计者总希望设计的软件

无论显示器分辨率设置是640×480、800×600还是1024×768

无论显示器设置是在大字体还是在小字体,都能正常运行,且具有美观一致的界面。本文介绍笔者解决这些问题的方法,供参阅。

使界面居中

----为了使界面元素能在各种显示分辨率下均有合理的布局,可以采用两种方法。一种是获取当前显示分辨率,并根据这一分辨率计算界面各元素的位置和大小来进行设置。这种方法虽然能解决界面元素布局问题,但需要知道每个元素的位置和大小,程序烦琐。另一种方法是先设计一个具有极大化、无边界、无标题、无控制盒的窗体,然后在其上放置一个容器控件Picture,在Picture中再放置其他控件。在窗体Load事件中根据当前的显示分辨率居中Picture,从而实现了居中整个界面。具体代码如下:

Private Sub Form_Load()

Call CenterControl(Picture1)

End Sub

Public Sub CenterControl(obj As Object)

Dim cx

cy As Single

cx =(Screen.Width/Screen.TwipsPerPixelX -obj.Width)/2 #

cy =(Screen.Height/Screen.TwipsPerPixelY -obj.Height)/2 #

obj.Left = cx

obj.Top = cy

End Sub

使界面适应大字体与小字体

----Win95在创建控件时,根据当前显示属性为大字体或小字体来作相应调整。尽管应用程序传送的参数(控件位置和尺寸)是一致的,但实际控件的位置和尺寸在这两种情形下并不一样。如果应用程序仅仅考虑一般小字体的情况,在大字体下界面则十分难看混乱,甚至无法操作。为解决这一问题,可通过系统注册表来了解当前显示器设置。下面的程序采用了另一种方法:在一个映射模式为Pixel的窗体中放置一个控件,在显示属性为小字体的设计环境下首先看一下控件的初始位置x、y,然后在窗体的Load事件中计算出x和y方向的放大比例xFac、yFac:

Private Sub Form_Load()

xFac = 400 # / mmlhwnd.Left

yFac = 400 # / mmlhwnd.Top

End Sub

----其中:mm\hwnd为放置在窗体中的控件,初始坐标为400、400。

----最后在各个需要调整界面的窗体Load事件中调用下列子程序,调整各控件的位置与大小:

Public Sub CorrectForm(fm As Form)

Dim C As Control

For Each C In fm.Controls

If TypeOf C Is Timer Then

ElseIf TypeOf C Is CommonDialog Then

ElseIf TypeOf C Is Line Then

C.X1 = C.X1 * xFac

C.Y1=C.Y1 *yFac

C.X2=C.X2 *xFac

C.Y2=C.Y2 *yFac

Else

C.Left=C.Left *xFac

C.Top=C.Top *yFac

If TypeOf C Is SSCommand Then

C.Width=C.Width *xFac

C.Height=C.Height *yFac

C.FontSize=C.FontSize *xFac

ElseIf TypeOf CIsCommandButtonThen

C.Width=C.Width *xFac

C.Height=C.Height *yFac

C.FontSize=C.FontSize *xFac

ElseIf TypeOf C Is ListBox Then

C.Width=C.Width *xFac

C.Height=C.Height *yFac

C.FontSize=C.FontSize *xFac

ElseIf TypeOf CIsComboBox Then

C.Width=C.Width *xFac

C.FontSize=C.FontSize *xFac

End If

End If

Next C

End Sub

----上述程序中仅列举了几个典型的控件,如果窗体中还有其他类型的控件,可仿造上述程序加入。

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘