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

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

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

有道周枫和他的“放养”团队 看IE11如何助力AAF推动公益事业 SUSE总裁Nils:将SUSE Cloud 2.0打造成“零影响的云安装程序” Windows 8之父Steven Sinofsky:2014年科技界的十大趋势 电视盒子还没智能化?看Fan TV们怎么玩 畅游启动“必赢计划” 十亿巨资代理优质产品 数据控使用Hadoop的三种最常用方式 值得创始人学习的五大企业文化管理方式 圣诞节快乐:来自程序员们的问候 宏碁任命新CEO Jason Chen:曾任职英特尔14年、台积电8年 史上第一次越狱发布会与Evad3rs太极助手罗生门 新东方在线CTO曾明:已用Cocos2d-html5开发出150余款产品 Facebook 2013年的9个开源项目 开源力量公开课2013年度庆典:我们的开源项目 看雪学院“走进企业看安全”活动走进安全管家 视频+PPT:苹果iOS7 Tech Talks大会演讲内容 iPhone 6和Galaxy S5暂不会采用弯曲屏技术 当程序不工作时,开发者常用的借口 携程技术副总裁叶亚明:三次重大技术改进的故事及背后原因 Google抛弃C语言,采用Go语言重写Go编译器 jQuery Mobile 1.4.0正式版发布,着重性能改进 IBM收购Aspera加速大数据传输 各式各样的极品程序员,你属于哪一种 Google员工离职前必做的14件事情 GitHub上最火的开源项目及编程语言是什么? 2014的12个大数据趋势:Hadoop继续升温,R将进入主流 研究称三星手机可能存在安全漏洞 初创IT公司里开发者最容易犯的九种错误 还有多少开发者在为IE6做兼容性测试? 解读华三“新IT易之道”理念下的云计算和数据中心 回顾苹果2013:硬件几乎无突破 热衷收购 如何卸载rose 分虽小,结得快的啊!讨论一下…… option explicit是什么意思 大哥大姐们!看一下嘛!帮帮我! 又一次被奶牛拒掉,而且有了注册机。 simple question 60 points wait for your picking (菜鸟的问题)在EditBox中怎么换行? 超级难题 SQL如何写??? 如何让WinCE支持DVDROM 請問如何在ASP.NET中實現從客戶機上傳文件到服務器? 新手问:我声明api,但是参数里有我没有定义的类型,pb报错,怎么办 关于Tclientdataset中commandtext的问题 关于按扭的简单问题 调用ejb的错误,请帮忙看看,帮我顶顶也给分,谢谢 关于lei的配置问题 java中 ,换行为\r\n ,空格为什么呢???? 关于快速排序的问题?在线等待!!! 如何在网页上显示动态图表?(送100分) 高兴,散分,收集故事喽,多讲多得,不讲不得。请斑竹留情,不要删除。 一个文件上传的bean编译成功了,但不会使,哪位用过,请给出使用的源代码,或者其它能实现上传的也行,越简单越好并附说明的 我想在触发器中得到对当前表的SQL操作的内容,应该如何实现??v$sql视图中有相关的信息,如何提取?? 心情好好,散分,各位谈谈LINUX和UNIX的感受啊:) Can u help me? 在B/S下如何根据不同用户来相应的mail库 insert into 求解! 各位高手帮帮忙,关于存储过程的问题 请教:VFP6在表单1中,关闭表单1打开表单2。结果显示表单2后,表单1又显示了一下才关闭。怎样让表单1直接关闭呢?谢谢! 很简单的问题--可是我不懂如何用javascript实现弹出窗口(无菜单和工具条的) 请高手帮忙有关“邮件多播”的问题。 《Oracle Pro *C/C++设计》的下载 哪位有最简单的SERVLET的里子,包括添加,查询。。。 水园的人有没有搞过聚会啊? SOS,用脚本连接数据库问题,100分求助,请帮忙。 救救我!SOS!SOS! 请问谁有恩雅的Mp3下载地址吗? 提示wscript未定义?该如何改呢? 关于C#遍译可执行程序问题 请高手看看,这个问题很有意义!为了同时查询不同的数据库(在不同的服务器上),请问用ASP怎么样实现多线程查询不同的库? 我是初学者,在开发ejb中,请问update、add和delete 的操作 ,在session bean中直接写sql来updat、add、delete语句对库操作行吗?还是在e 请问如何编程实现将打印的内容控制在一页之内? 请问如何编程实现将打印的内容控制在一页之内? 微软专家来看:我的datagrid排序还不行,为什么??? ******请教,VC中重新排版源代码的功能按键怎么用???****** 请教MYSQL_RESULT()函数! 加密方法分析 我是初学者,在开发ejb中,请问update、add和delete 的操作 ,在session bean中直接写sql来updat、add、delete语句对库操作,还是在entiy 防伪编码排版 如何取的当前鼠标的X,Y值? Win2k的NETBIOS程序如何跟DOS下的纯netbios程序通信???十分紧急,谢谢 DBGrid的实时刷新 请问哪里还有好一点的VB论坛? soon finish the book write how you如何连词成句今天的作业,快点 英语作文60字左右:关于穿着(就是穿衣服)的话题、就你而言,是以舒适为主还是以时尚为主?说说你的观点 Auto-Detect Hard What is the biggest country ________(anaadC)把打乱的单词拼好What is the tallest tree?_________(ewRdood)把打乱的单词拼好 die的过去式是什么 谁让你执着?用英语怎么说 选词填空 1.are they[ ].yes,they are a.swim b.going to swimming c.swimming d.swims 动词后边接什么 英语中动词变形容词 hurry 这个词hurry 变副词为什么要在后面加ed再加ly呢?hurriedly 它是不规则的吗? Can Amy ____ A、swim B 、swimming C、swims D、to swim At the end of a letter you should write yours t_______ and your name. 用动词的适当形式填空 hurry up!we_____(wait) for you She can’t _______ in the classroom.A.swims B.swim C.swimming D.to swim我不光要答案,还要原因~ 怎么往mp3上下英语短文啊 look forward to doing/expect to do 有区别吗 北京哪有英语角 Can he___fast?A.swims B.swimming C.swim Sometimes you can write “________(sincere) yours “ at the end of your letter. 北京现在哪里还有英语角?我英语水平特别不好,可以说得从音标学起吧,所以想去英语角,感受一下氛围,最好能是周六日的,因为平时工作没有时间啊!去过的人给介绍介绍吧, 2010年12月的四级中仔细阅读的答案怎么新东方的和沪江网的不一样啊? villege怎么读 读音写汉字 北京哪里还有英语角?人大周五晚还有吗? 沪江和新东方什么关系? 根据所给单词的读音写出相应单词,并写中文 用所给词的正确形式填空Do you often go____(swim)? 新东方和沪江网校哪个更好一点? 八年级(上)数学单元测试题(三)1.在梯形ABCD中 ,AD//BC,中位线EF分别交AC,BD于点G,H,且G,H分别为AC,BD的中点,AD=3,BC=5.求GH的长. how often do you go swim?改错 这次英语六级新东方和沪江答案有哪些不一样的,到底哪个对?如题! if后加动词什么形式 ( )( )you often( )in winter?go skating (提问) 上午刚考完四级,想问下现在新东方,沪江上面给的答案准吗?我今天上午刚考完四级,用沪江上面的答案估分418(作文估的75).我想问下现在新东方,沪江上面给的答案准吗?我都不知道自己还有没 if 后面接动词什么形式听说if后面如果是虚拟语气就用动词过去式,条件状语从句就用一般现在时.那是不是意味着:翻译这句话:如果我做的话,我就会更快乐(指做将来的事情和以前的事情 he asked me ,Do you often go skiing in winter改间接引语,我就是不知道后面的go要不要变时态.纠结ING help! Do you often write letters____your sisterA for B to C with D at if作是否用时,后面跟动词什么形式I want to know if you ___(go) hiking next week 翻译:"get undressed,take a shower和take off your shoes and clothes,go to bed. 关于名人的不良行为习惯说的仔细一些 are you?(write) a letter?适当形式填空 i go to _______ a shower.A take B make 选几为什么 英语作文不好怎么办, Write me a letter and let me know how you are getting on with your stuides中为什么不用动名词Writing做主语?我要详细…… Many people love to ____a shower in the morning.A go B get C take D join 如何养成良好的行为习惯英语作文 how are you?lt's very_1_of you to write _2_me.from you letter l _3_a lot about you and your school.now l will _4_you something about me and my school.1.A nice B good C fine D firm2.A from B of C too D to3.A get B study C talk D know4.A tell B say C s 英语翻译Nothing Succeeds Without a Strong WillNo great work can be performed without will.We envy famous men and imagine that fame was due to some trock of luck.But when we know their histories,we find that it is long years of will and constant e 英语作文很不好每次作文十五分,我总被扣五分.怎么提高英语作文? 怎样练就一口标准的英语口音?我说的英语一般都不标准,怎样才能说出一口标准的英语啊?我才14岁,我居住的这地方没英国人,没钱移民。 石家庄哪里有英语角啊? 不好的行为习惯对我们有什么不好 英语:如何练就标准的美国口音!What's the best way to study English? 英语口语比赛演讲稿 十万火急!微笑参与2008 要求:3-5分钟(350词以上) 什么才算是纯正的英语口音有以下几个问题,请专家回答:1.英语有多种口音,即使在一个以英语为母语的国家的不同区域也有多种口音.比如英国就有多种口音,英格兰口音,伦敦口音,苏格兰口 如何能练就一口标准的英语贵族口音!贵族口音,就是牛津音,英国式贵族口音,如何练就? Do you swim often还是 Do you swim oftenly?哪个才是对的说法呢? 有没有训练英语发音的书,带磁带或光盘的?还有,在哪里能泛听不同口音的英语呢? 英语口音的疑问http://v.youku.com/v_show/id_XMTQ5Njk2NTA0.html请问这个是不是非常纯正的英式英语?Discovery里面的是美式还是英式(指的是广告时段的那个声音)? 新东方学四级英语有用吗..效果大不大.. 胖子和瘦子怎样穿衣.英语作文.非常急.胖子瘦子怎样穿衣.英语作文. 屏幕auto detect是什么意思
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘