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

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

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

Gartner:全球PC出货量二季度下滑11% 联想成全球最大PC厂商 用来简化开发任务的20个JavaScript类库 煎饼,娇妻,Belief:黄太吉的移动互联网营销 AWS大降价:最高打两折 推荐十款超赞的Google Chrome扩展插件 在团队中进行单元测试/TDD的12条经验 小米游戏中心6月数据报告:页游转手游怎么搞? 司机请专心:安全是车载APP要解决的大问题 Windows 8之父Steven Sinofsky:跨平台开发会为什么越来越难? 一些达成共识的JavaScript编码风格约定 语义技术——微软、谷歌和Facebook的必争之地 初创公司PlumGrid:前思科工程师的“逆袭之战” Firefox OS智能手机继续扩张 德国市场今日开售 如果让莎士比亚、海明威编写JavaScript代码 开源的数据可视化JavaScript图表库:ECharts 已迭代1.3亿年的分布式系统——Anternet 软硬整合:14个可改变世界的Kickstarter项目 是时候放弃MySQL的五大理由 比特币钱包Coinbase推出即时交易功能,无需银行转账手续 回收不活跃邮箱续:雅虎高管称能保证前用户信息和数据安全 移动周报:IT民工携娇妻转战传统行业,黄太吉的移动互联网营销 独立游戏开发的传奇!LIMBO开发商Playdead公司CEO专访 Firefox OS模拟器4.0正式发布 支持模拟触摸事件 莫轻言已成功部署大数据,也许你离达标还相去甚远! 基于Java的四大开源测试工具 Firefox OS:称霸移动市场?我们的计划更长远! 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现 传苹果为iWatch招兵买马 以确保明年发布新产品 降价高达1200元的Surface RT,并不值得你购买 Daux.io:开源的项目文档生成器 避免代码注释的五大理由 为什么WinXP激活后就不能重装? 困惑--判断颜色是否相同??? (急急急)寻找:win2000/xp/nt/9x 的可安装文件开发包(IFS Kit),送大分 如何在DB2(V5.2)下面实现表的ID自动增加功能? 帖子结不了,在送300分~~~~~~~~~~ 请问oracle那些版本以上叫8i,常用的是哪个版本,有WINDOWS下使用的吗? 我看过的TOOLBAR 都是横着的,可是我现在想做一个竖立这的TOOLBAR 我该怎么做啊!我翻遍了 CODEGURU 可是没有一个这样的例子! 谁有什么好例子 多谢了!! error C2065: 'end1' : undeclared identifier 我怎么用CreateDialog 建立一个对话框呢! 谁有代码!!多谢!CreateDialog(hInst,LPCTSTR"ID_",hWnd,DlgProc); 送小分:怎样在一个对话框程序中产生一个HWND视窗? 在Windows 2000 Professional 下可以装VS.net吗? 关于文件上传问题 关于微软自己的控件下载问题!! 关于打包的问题 急求答案--请教高手:有关IIS与TOMCAT...... 请问有哪为知道,weblogic提供petstore例子,什么地方有详细说明?? 怎么样利用CHtmlViw将参数用POST的方式提交给WEB服务器 不明白.. 请问遇到连接错误该如何解决? pws的日志在什么地方? 在VBA中如何使用ClipBoard 哪里可以下载mastering delphi 6,或者其他有关delphi6的书籍。 vb和access的问题 C++Builder不支持tif或tiff格式怎么办? 为何我的TQuery为只读? 用Winsock传送文件如何判断一个文件已经传送完毕?(一定给分!) VC程序方法的请教。 请问如何禁用一个页面的cache 不好意思,怎么把引号赋给一个变量?thank 关于字体的保存,用序列化 关于oracle连接的一个简单问题 一个构件地址35分,快快来吧。 如何实现实时监测注册表的变化呢??????????? 如何锁定一个SQL SERVER的表? 哪里有Rose2000? MMGG Redhat7.2Ftp,硬盘安装问题求救! 请问怎样设置phpmyadmin带用户名和密码的登陆界面? 本来打算跳楼的,想想还是先来这试试...... 下面代码有什么用? 想问一下关于BDE和ADO组件的对应关系 就是这本《VC++技术内幕》……哎……我认了…… MSSQL2000 为什么我的log文件拼命往上涨 如何将用jsp得到的数据用javascript显示出来? 关于画声音波形曲线的问题.高手请帮帮忙(效果像flash加入声音时那样) TNND , 连个回复都不行 , 真恶心 (yeti_lee) 信用卡代理网站的可靠性 关于sqlserver联接问题帮一下了在线等待 小问题,高分啦!!:) 真的没有高手么,真的没人会么? 我为了使鼠标指向SpeedButton上时它的Caption颜色改变,在SpeedButtonMouseMove()和PanleMouseMove()中写了代码,但是很不敏感,鼠标移动快一点,就会有延时? 求初1级作文 《真想做个XX》RT XX部分自己填 500-600字左右 以友谊为题的作文 读了《雷锋日记》的读后感》. 我真想XX【作文】已我真想XX为作文题,血一片400字左右的作文 以《珍藏友谊》为题的作文600字 急用 大家帮帮我啊 哪里有读后感,雷锋日记读后感或读雷锋日记有感,雷锋故事读后感的 一般现在时的英语短文My pian for next time 为题的英语短文,60~80词左右就好了, 求作文《这件事真令我自豪》要求:600—700字 读雷锋日记的感受 一般现在时的英语小作文 这件事令我骄傲 作文600字! 作文 友谊 两个人 写两件事 关于“怎么样快乐的生活”的作文从前,有一个牧童,破衣烂衫,每天赶着牛羊刀上岗郊野中放牧,常常放开喉咙唱着歌,他的思想自由自在,放牧的任务也完成的不错.有一天,他拾到了一串钱,装在 作文:一件令我骄傲的事意义深刻题材新颖与时具进一件事体现一个道理 英语作文过度词越多越详细越好 求关于消费的政治论文 1000-1500字. 老师让我们写以班级为话题的作文,给我们几个题目,别样生活,美丽生活,累并快乐,如此生活才有意义,一切从这里开始,怎么写,选那个题目,我们每天中午几点来上黑板签到,还有家校联系本,老 我因XX而自豪 作文 600字不要我因祖国,奥运而自豪,这样的作文初二水平在线等 不要直接从网上拉,要拉也要拉好点的 荷兰牧场之国的作文是牧场之国 找一篇题目为《初中生活的几件快乐事》的作文 求作文 令我自豪的一件事 急求1篇1500字的初二政治小论文!1.理论和实践密切结合,事理交融,有现实意义.2.立意明确,观点正确,材料确凿,一事一议,论述严密.3.主题鲜明,反映当前社会生活和学生生活中的重要问题.4.文字 《生活因友情而快乐》600字作文 要求:不少于六百字;有完整的一件事;开头点题结尾扣题:语句优美thanks a lot 读了荷兰散记后怎样理解第五自然段最后一句话 英语 现在进行时与一般现在时写一篇春节作文急呐,各位精通英语的哥哥姐姐,帮我组织下吧,50字就可以勒,是写春节的,习俗传统, 荷兰散记细细长长的运河,清澈如镜,一道一道纵横去来,弯弯的拱桥,多情地把柔美的影子留在潋滟的波光里.干干净净的屋子傍河而立,一幢一幢小巧玲珑,好像是奶油做成的,可爱绝顶.微风过处, 需要六篇英语文章,70词左右的. 一般现在时的英语短文怎么写 荷兰散记阅读理解细细长长的运河,清澈如镜,一道一道纵横去来,弯弯的拱桥,多情地把柔美的影子留在潋(lian)滟(yan)的波光里.干干净净的屋子傍河而立,一幢一幢小巧玲珑,好像是奶油做成的,可 围绕时事热点,1500字.最好围绕高一课本的知识点……跪求~ 作文,风景作文! 《荷兰散记》句子理解站在运河旁边,我心神恍惚,根本分不清眼前的一切究竟是真实的景致,还是我不小心掉进了荷兰著名画家 高的名画里.理解这句话的意思 请帮我弄一篇有关评价低碳生活的政治论文?(800字左右)最好能告诉我论文大概的格式及写法 作文 心中的风景写出美的意境,不能太假写自己心里所想的 荷兰散记 (阅读题)细细长长的运河,清澈如镜,一道一道纵横去来,弯弯的拱桥,多情地把柔美的影子留在潋(lian)滟(yan)的波光里.干干净净的屋子傍河而立,一幢一幢小巧玲珑,好像是奶油做成的, 让我 XX 的经历 作文多来几篇. 求10篇作文啊.初中命题作文(感动 爱心 亲情 友情 青春 记叙 叙事 叙人 描写 抒情)求快啊. 作文 最XX的事暑假生活就要结束了,回首暑假生活,你一定有最开心的事,最烦心的事,最搞笑的事,最无聊的事,最有趣的事.采撷其中一“最”,释放自己的心语. 你的xx让我记住了你作文 围绕高一政治经济生活的论文,2000字 我为XX干XX(事情)作文写作文我为谁干什么,有米有范文?有就可以发过来.作文内容哈- - 我和xx作文 经济热点主题自定 1000-2000字,求题材,好写一点的, 求作文 【一件XX的事】600字 以友情为题的作文的题目点评要6个以上的以“友情”为话题的作文题目,并对其中一个题目作分析、点评.如果回答迅速,我再加10分是作文的题目,不是作文。 生命因什么而精彩作文写事要写人写事的 经济生活和政治生活各两篇字数随你们...不要太少就可以了 下面这句话的含义是什么(荷兰散记中的一句话雪花落在运河旁边那一幢一幢色彩缤纷的小屋上,纵然是黑夜,也处处闪着晶莹的光芒.那种美丽,是安恬又宁静的. 高一政治有关经济学的800字论文 一篇政治小论文,内容有关高一《经济生活》的,字数要800字以上, 帮我把这篇英语文章压缩小一点,希望在70到90词之间My favourite computer game is called“NEED FOR SPEED CARBON”.It is an interesting and exciting game.The main character is called“Fire GT1”.He is a handsome young man.In this g 政治小论文800字 ,也可以教我怎么写 经济生活 600字求写论文,复制也行,要切合主题.(目前青年人消费状况,消费心理.企业成功途径.国内经济发展) 生命作文 作文 xx使我懂得了xx这类的作文谁会~~发几遍来~~比如妈妈是我懂的了爱~~有吗? 高一政治经济小论文,题目我买年货,或者逛花市800字以上 生命是什么?(作文) xx使我懂得了xx 作文 求一篇100字的英语短文,以日常生活内容!哪们帮帮忙,写一篇不少于100这的英语短文,要求有一般现在时,过去时,一般将来时等时态.简单介始关于自己日常生活为内容! 生命像什么作文
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn