300分求如何写设备面板图?如何多线程中刷新面板端口状态? ( 积分: 300 )

  • 主题发起人 主题发起人 panbq
  • 开始时间 开始时间
P

panbq

Unregistered / Unconfirmed
GUEST, unregistred user!
现在需要写一个设备面板实时状态的东西,比如一台设备有10块单板,就需要绘出10块单板,单板形状用长方形图形表示也行,可能有的板有10个端口,有的板有20个端口,就需要在相应的单板图形上动态绘出10个或20个小圆(表示端口),要求小圆要能够获得焦点,因为点右键要有右键菜单以实现详细信息的功能。虽然每一块板的端口数是已知的,但希望在单板上画端口的时候位置要均匀,因为单板高度(长方形)是一样的,但端口数不一样,相应的绘制密度就不一样。绘制单板及端口给个思路先。。。。如何写?
如果有10块单板,能否创建10个线程,每个线程负责更新一块单板上的端口状态,如何写?端口状态需要线程去获取。
 
现在需要写一个设备面板实时状态的东西,比如一台设备有10块单板,就需要绘出10块单板,单板形状用长方形图形表示也行,可能有的板有10个端口,有的板有20个端口,就需要在相应的单板图形上动态绘出10个或20个小圆(表示端口),要求小圆要能够获得焦点,因为点右键要有右键菜单以实现详细信息的功能。虽然每一块板的端口数是已知的,但希望在单板上画端口的时候位置要均匀,因为单板高度(长方形)是一样的,但端口数不一样,相应的绘制密度就不一样。绘制单板及端口给个思路先。。。。如何写?
如果有10块单板,能否创建10个线程,每个线程负责更新一块单板上的端口状态,如何写?端口状态需要线程去获取。
 
绘制单板及端口:
这就是个简单的小学数学除法,
要均匀分布的话,
10个的间隔就是板长度/11
20个就是板长度/21
动态生成timage,他本身就支持mouse事件
端口状态:
不用10线程,其实一个就可以查全部,
不过要看你的响应速度要求如何
自己先试试轮询的速度
 
stlont,感谢您的回复,是这样,我初学DELPHI,尤其对TIMAGE的用法不是很熟悉,所以想麻烦您针对上面的问题帮我大概写一些代码,,就是均匀生成单板面板及端口,,以及线程绘制端口状态的代码,,我参考一下,然后再自己写,主要是端口状态需要通过SNMP去查询,,可能会比较慢,所以想到了用多线程。
 
procedure tform1.chuangjian(count:integer);
var
myimage:timage;
i:integer;
jiange:integer;
//每个圆点的间隔距离
xx:integer;
//圆点的横坐标
yy:integer;
//圆点的纵坐标
begin
jiange:=width/(count+1);
//每个圆点的间隔距离,width是长方形的宽度
xx:=1;
yy:=10;
for i:=1 to countdo
begin
myimage:=timage.create(self);
myimage.top:=yy;
myimage.left:=xx;
xx:=xx+jiange;
//下一个圆点的横坐标
myimage.parent:=form1;
end;

end;

我最近在做一个电话语音服务系统,它有16个通道,和你做的那个有些类似,我就是一个通道一个线程。同时16个线程绝对不算什么的!之前我也想过只用一个线程逐个扫描端口的方式,但后来想了下,那样的话还是不好对每个端口进行分别控制,所以我建议你也一个端口一个线程
 
帮你顶!!
 
赛特, 一个端口一个线程的话,我做的这个一台设备将近有500多个端口呢,500个线程可能不太现实吧。。。。我先看看做图的这一块,至于端口状态控制咱们再探讨。
 
还有,画出的圆怎么不光滑,很难看啊,有没有好办法?
 
一定要是圆形吗?方形不行吗,你只是想用图形的颜色来表示每个接口的状态,这样比较一目了然些是不是嘛,换一种只要能达到目的就行撒。
你不是在问在代码中怎么创建吗,我只是举例。
500多个端口不能每个一个线程,也可以一个线程控制几个嘛。就是因为你端口多就更不可能用一个线程逐个扫描端口的方式了。我的意思是分散好分别管理。
 
呵,也是啊,用方形也可以,,表示出来就行了,,其实主要是想好看一些。。但总感觉还是有些问题,根据FORM的长和宽动态绘制个数不等的面板,即单板,这个我想用PANEL,感觉是不是好一些,怎么写代码?不好意思,主要是最近还有事,没时间想,就麻烦你写这样一段代码:
procedure drawpanel(count,form_width,form_height);
根据FORM的长和宽动态绘制COUNT个PANEL,PANEL的长和宽是固定的,或者也用参数。。。
procedure drawpoint(count,panel_name) 在相应的PANEL上均匀绘制COUNT个端口
 
你说的panel是指的控件的那个panel吗,panel控件不支持canves属性哟。你的意思是在窗口上用代码建panel,再在pannel上建表示端口的控件是不是?一个窗口要建几个panel吗?
 
对,我的意思就是你所说的,一个窗口动态创建COUNT个panel,然后在PANEL上再创建端口控件,要在FORM上均匀分布。对了,你有没有既能改变按钮颜色,又支持GROUPINDEX属性的按钮控件,BUTTON跟SPEEDBUTTON不能改变按钮颜色,但我又想用到SPEEDBUTTON的GROUPINDEX属性,找了一个控件,能改变颜色,但没有GROUPINDEX属性。
早晨看了贴子,说是通过改变SPEEDBUTTON上的图片也能实现改变它的颜色,呵,我做了纯红色的小方块图片,怎么不起作用?
 
那就用speedbutton嘛,可以用imagelist1.getbitmap()让speedbutton显示不同的图片,而这些图片就是颜色.
在窗口上动态建控件就几个步骤:
1.var a:tspeedbutton;
//定义
2.a:=tspeedbutton.create(self);
//建立
3.a.top:=??;
//坐标
a.left:=??;
4.a.parent:=form1;
//父窗体
 
好,就这样先试一下,你也试下,我做的颜色图片效果不好,你能做吗?帮我做下,分要等这周末才能给你,谢谢了。我的QQ:327809
 
多人接受答案了。
 
后退
顶部