第:;i卷第6期2007年12月
武汉理工大学学报(鸯望霾差)
JournalofWuhanUniversityofTechnology
(TransportationScience&Engineering)
V01.31No.6
Dec.2007
Delphi下智能交通系统车道指示器控件的实现
高焕兵D袁丽艳2’
(山东建筑工程大学信息与电气工程学院"济南250101)
(山东电子职业技术学院2’济南250014)
摘要:介绍了一种以Delphi开发的车道指示器控件,这一控件模拟了现实智能交通系统中的车道
指示器,从而为高效开发交通监控系统提供了便利.对该控件的设计思路和实现方法做了全面的
阐述,介绍了使用方法,并就可改进方面作了说明.
关键词:智能交通系统;车道指示器;Delphi;控件
中图法分类号:U463.79;TP311.11
0引言
智能交通系统(ITS)是交通运输领域的一场革命,它充分利用电子技术、信息技术和通信技术,使交通运输系统实现智能化,从而大大提高交通运输的安全性和运行效率,是实现公路运输现代化管理与控制、保证高速公路达到安全、高速、舒适、通行车流量大的重要手段.车道指示器普遍应用于高速公路和城市交通监控系统,是现代化交通系统中不可或缺的交通控制设备.在智能交通系统的上位机软件的开发中,Delphi和C++Builder因其高效的编译器、友好的可视化界面而大受青睐n4j.由于这两种开发工具都可以直接加载第三方控件,如果有一个可以直接使用的车道指示器的控件,将会使交通监控软件的开发非常方便.本文从这一需求出发,设计了一个模拟车道指示器功能的控件,此控件用ObjectPascal语言开发,可以在Delphi和C++Builder中直接使用.
】
车道指示器控件应具备的功能
重庆市菜高速公路共有5座互通式立交和2座隧道,在隧道的出口和入口的每个车道,都需要设置车道指示器.全线设一监控中心,若干外场监控点,监控中心统一对全线交通运行实施宏观管理和调控,协调各监控点的运行,必要时下达控制命令.
车道指示器是用来指示车辆的通行和前进方向的一种信号灯,它适用于高速公路收费站、匝道口、隧道和桥梁,以保证交通秩序,如图1所示.车道指示器按方向分可分为正向灯和反向灯两种.正向灯安装在车辆驶入的一方,有红叉“×”和绿箭头“十”2种图案;反向灯安装在车辆驶出的一方,只有红叉“×”一种图案.红叉和绿箭头图案如图2所示.调度员可以根据路面的交通情况决定使车道指示器显示红又或者绿箭头,红叉表示此车道禁止通行,绿箭头表示此车道可按箭头方向
收稿口期:2007—07—19
高焕兵:男,28岁,硕二仁,讲师,主要研究领域为软件工程与智能信息系统图1车道指示器安装示意图
flash控件怎么下载
图2车道指示器
万方数据
第6期通行。
高焕兵.等:Delphi下智能交通系统车道指示器控件的实现
在盛控:段仟!h宰道指示器控件应该具有以下功能.
1)为了使界丽示意图更加明朗化,往往在需要放置车道指示器的地方并排放两个既有红又又有绿箭头的车道指示器图标。但红叉和绿箭头不会同时显示,红又亮时,绿箭头处显示一灰圆圈,绿箭头亮时,红叉处显示一灰圆圈.
2)有的特殊车道无论在什么情况下都只允许单向行车,这个地方的车道指示器图标就应该是一个既
有红叉又有绿箭头的图标再并排一个只有红叉的图标.因此,车道指示器控件应具有改变为只显示一个单红叉的功能(即反向灯)。
3)监控系统要论证和查询车道指示器的工
作状态,构成多线巡回检测系统.如果检测到某个
车道指示器出现故障,应该使相应图标立即闪烁,即车道指示器控件应具备闪烁功能.
第1)、2)所描述的功能,可以参看示意图3和
图4。
图3功能1示意图
图4功能2示意图
图1所示的一条三车道的单向公路,在遇到特殊情况时,可通过改变车道指示器的显示来改变行车方向。改变后如图2所示.因为最下面的那条车道不允许反向,因此右面用了一个单红叉.
2
控制的实现
上述功能的实现可以通过Delphi自带的
Tlmage控件来实现.TImage的Picture属性可以调用LoadFromFile()方法装载不同的图像文件,但是界面上装载位图过多,一个很明显的缺点就是鼠标变得移动不灵活.因此,在监控软件界面上分布很多设备图标的情况下,用Tlmage控件实
现是不合适的,需要定义一・个新的可以自己绘制外观的控件类来实现其功能,这里设计了一个满足这种要求的控件TStopPass.
首先,必须选择适当的对象类型作为父类(基类),以派生出子类TStopPass.使用的所有控件都是由一些公共基类继承下来的.最顶层的是TObject,再下面是TComponent.TComponent是所有VCL组件的基类.在下面是TControl,TCon—trol又有几个继承者,其中TWinControl是窗口类控制的基类,TGraphicControl是非窗口类控制的基类,TCustomControl可以说是TWinCon—trol和TGraphicControl的混合体,兼有二者特性.根据面向对象程序设计的继承性的概念,子类可继承父类的全部非private部件,但不能摆脱不需要的部件.因此,所选父类应尽可能多地包含子类所需的属性、事件和方法,但不应包含子类不需要的东西.这里直接继承TGr
aphicControl,将图1所示的所有并排的两个图标分别做成两个控件TStopPassl和TStopPass2.下面以TStopPassl为例来介绍一下该控件的实现方法.2.1车道指示器控件的属性总览
下面是TStopPassl控件源代码中的属性声明部分,主要的属性都在声明代码之后做了注释.
propertyAlign;
propertyrowsJintegerreadFrowswrite
SetRows,心
上述的功能(2)就是通过这一属性实现的,如果Rows一2,控件为红叉绿箭头,如果Rows一1,为单红叉
propertycols:integerreadFcols;property
Font;
propertyCaptions:Tstringlist
read
FCaptionswrite
SetCaptions;
(Alistofbuttoncaptionsfromthetop—left
tO
the
bottom—right
button)
propertyColors:TStringlistread
FColorswriteSet-
Colors;\\可以为红叉和绿箭头设置不同的背景
property
Hints:TStringlist
read
FHints
write
SetHints;\\可对红叉和绿箭头分别设置提示
property
BooleanreadFRedEnabled
Write
SetRe一・
dEnabled;\\置为True时红叉亮.置为False时绿箭头亮
property
GreenEnabled:BooleanreadFGreenEn—
abled;\\与RedEnabled属性关联,为True时.绿箭头亮;置为False时红叉亮.使用时只能改变RedEnabled属性,GreenEnabled为只读属性.
property
Hint;\\可设置一个对整个控件的简单提
示,鼠标悬停在上方时显示此提示
propertyFlashEnabled:Booleanread
FFiashEnabled
万方数据
・1134・武汉理工大学学报(交通科学与工程版)2006年第30卷
writeSetFlashEnableddefaultFalse;\\置为True时闪烁,置为false时停止闪烁
propertyFlashRate:integerreadFFlashRatewriteSetFlashRate;\\设置闪烁的频率,单位是ms
propertyShowHint;
lI
以下都是继承自父类的标准事件,在开发控件时以属性的形式进行声明
propertyOnClick;propertyOnDblCliek;
propertyOnMouseDown;propertyOnMouseUp;
propertyOnMouseMove;propertyOnDragDrop;
propertyOnDragOver;propertyOnEndDrag;
2.2车遒指示器控件的方法介绍
要想在控件的表面绘制出红叉和绿箭头,需要在控件的Paint方法里面实现.这里是把红叉和绿箭头分成了两个单元格(所以可以通过调整Rows属性把控件变为一个单元格,红叉绿箭头形式就改成了单红叉形式),红叉的实现是在红叉单元格里面写了一个英文字母“X”,注意字体除大小、颜之外不能更改,否则“x”的显示就会被认出是英文字母,而不是叉号.显示这一字母可以用WindowsAPI函数DrawText或者Delphi的TCustomActionContr01.DrawText函数来实现.绿箭头和灰圆都是用TCanvas类的属性和方法进行绘制的.下面是Paint方法的程序实现.
procedureTStopPass1.Paint;
varR:TRect;col,row,dh,dw,xO,yO,index:integer;cap:string;backcolor:TColor;
begin
dh:=(height一2)divFRows;
dw:一(width一2)divFcols;
forrow:一0toFRows一1do
begin
y0:=1+row*dh;
forcol:一0toFCols—ldo
begin
xO:=1+col*dw;
R:=rect(x0,y0,x0+dw,y0+dh);
index:一row*Fcols+col;
ifindex<FCaptions.countthen
cap:一Fcaptions[jndex]
else
cap:=”:
ifindex<FColors.countthen
try
backcolor:一s”in耵oc。lor(FC010rs[.ndex]);
except
backcolor:=clWhite;
end
else
backcolor:=elWhite;
draw;\\画出边框和预显示红叉
end;
end;\\上面的代码可以为控件扩充多个单元格,加强了代码的可重用性
Font.Size:=round(width*8/9);\\调节红叉大小
ifFrows=1then
begin
ifFRedEnabledthen
EnableRed\\显示红叉
else
DrawGrayR;\\在红叉处绘制灰圆
end;
ifFrows=2then
begin
ifFGreenEnabledthen
begin
DrawGrayR;\\在红叉处绘制灰圆
DrawGreen;\\绘铺绿箭头
end
else
begin
Enabler:ed;\\显示红叉
DrawGrayG;\kS绿箭头处绘制灰圆
end;
end;
end;
其中EnableRed,DrawGreen,DrawGrayR,DrawGrayG是自己定义的私有方法,实现的基本思想在上文中已经介绍了.
另一个重要的功能是实现控件的闪烁,这只需要在控件接口的private部分声明一个TTimer变量,并在它的Ontimer方法中循环改变控件的visible属性就行了.其代码如下.
procedureTStopPass1.OnTimer(Sedner:Tobject);
begin
ifcsDesigninginComponentStatethen
begin
Timer.Enabled:=False;
Exit;
end;
Visible:=notvisible;
end;
2.3实际应用
此控件设计成功之后,立即在笔者参与的高速公路监控系统中得到了应用,图5所示是该监控系统中某隧道的监控示意画面.这是一个双向6车遭隧道,每个车道上都有一组车道指示器,分别布置在隧道的出口和入口以及隧道的中间.从当前的显示可以看出,此隧道监控示意图中上半部分所示车道行车方向向右,下半部分行车方向向
万方数据
第6期高焕兵,等:Delphi下智能交通系统车道指示器控件的实现
・1135・
图5隧道的监控示意图
左.此示意图中除了车道指示器之外,还实时显示了风机、车辆检测器、可变限速标志、光强探测器、紧急电话等其他设备的当前状态,同时操作员可
通过本监控系统对这些设备下发控制命令.
3
结束语
本文介绍了车道指示器控件的Object
Pascal
语言的实现方法.基于组件技术的系统,即采用面向对象的开发方法、以组件方式实现系统的各个对象,开发周期短,扩展性好,维护及升级费用低,可方便地组合、替换组件以及增加组件的新功能,执行即插即用功能的组件封装,方便动态修改,实现渐进发展目标[s。6].充分利用组件技术的特点,可以加快我国高速公路的建设及利用.但本文介绍的控件是两个分别代表两种类型的监控示意图车道指示器图标,这两个完全可以合并在一起,但
程序显得繁杂,有待于进一步改进.
参考文献
[1]Josephi
D.Extending
dlphi:components,wizard,
and
Add.Ins.Piano:Wordware
Publishing,2002:
127—135
[2]Marco
Cantu.Mastering
Borland
Delphi
2005.
Berkeley:SybexPress,2005:319—327
[3]李维.面向对象开发实践之路——Delphi版.北
京:电子工业出版社,2005
[4]陆化普,李瑞敏,朱茵.智能交通系统概论一智能
交通系统(ITS)系列丛书.北京:中国铁道出版社,
2004
E5]吴震,彭国雄。杨晓光.中小城市干道交通流量流
向特征及混合车道的使用.武汉理工大学学报:交通科学与工程版,2005,29(2):256—258[6]刘
艺.Delphi第三方控件使用大全(II).北京:中
国水利水电出版社,2002
Realityof
a
Componentof
theLaneIndicatorinITSwithDelphi
GaoHuanbin91’YuanLiyan2’
(SchoolofInformation&Electric
Engineering,S彤,Jinan
250101)1’
(ShondongCollegeofElectronicTechnology,Jinan250014)2’
Abstract
LaneindicatorcomponentdevelopedwithDelphiisintroducedinthispaper,whichis
a
simulation
oflaneindicatorinITS.Itmakesthedevelopmentofmonitoringsystemmoreconvenientandeffec—rive.Thedesigningtrainofthoughtandimplementationmethodofthecomponentare
expoundedin
thisarticle,theoperationmethodisgiven.Keywords:ITS;theLane
Indicator;Delphi;Component
万方数据
Delphi下智能交通系统车道指示器控件的实
作者:高焕兵, 袁丽艳, Gao Huanbing, Yuan Liyan
作者单位:高焕兵,Gao Huanbing(山东建筑工程大学信息与电气工程学院,济南,250101), 袁丽艳,Yuan Liyan(东电子职业技术学院,济南,250014)
刊名:
武汉理工大学学报(交通科学与工程版)
英文刊名:JOURNAL OF WUHAN UNIVERSITY OF TECHNOLOGY(TRANSPORTATION SCIENCE & ENGINEERING)年,卷(期):2007,31(6)
被引用次数:0次
参考文献(6条)
1.Josephi D Extending dlphi:components,wizard,and Add-Ins 2002
2.Marco Cantu Mastering Borland Delphi 2005 2005
3.李维面向对象开发实践之路--Delphi版 2005
4.陆化普.李瑞敏.朱茵智能交通系统概论-智能交通系统(ITS)系列丛书 2004
5.吴震.彭国雄.杨晓光中小城市干道交通流量流向特征及混合车道的使用[期刊论文]-武汉理工大学学报(交通科学与工程版) 2005(02)
6.刘艺Delphi第三方控件使用大全(Ⅱ) 2002
本文链接:d.wanfangdata/Periodical_whjtkjdxxb200706050.aspx
授权使用:吉林大学(jldx),授权号:f00da16a-dd5d-4f52-ac83-9e1100d7d53e
下载时间:2010年10月16日
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论