我要新建一个TWeight类,用MSComm控件通过串口从工业秤中读重量数据,用测试程序我已经把重量正确读出来了,现在要求我把它做成一个TWeight类,并提供一个GetWeight方法,别的程序调用GetWeight方法能得到重量,要用一个事件通知别的程序调用GetWeight方法,请高手指教,最好能写出完整的源代码,小弟学习,先谢
解决方案 »
- DELPHI 线程访问VCL 不能取得字符的问题
- fastreport的dialogpage问题
- 关于dxGird的sum列问题,急!!!在线等
- 请赐教(关于TCPServer接收数据的问题)
- 终于可以在这里发200分的帖了,散分!:)
- WebBrowser如何自动滚屏?
- 急!!!!请教一个关于Treeview的问题,请多多指教!
- 帮帮忙,兄弟们,关于编历,送分
- 如何用TOpenPictureDialog构件打开JPG格式的图片?大虾们帮帮忙
- 公式一个,急,非常急
- 关于"写程序"的困惑,各位大虾进来给个见意吧,
- 为什么在keypressdown事件中,如果录入的是“-4”或带“-”的其它字符串,实际收到的却是“?”?
类还是按照常规的类去写,把您的GetWeight作成方法,通过属性来得到数据,不知道能不能行,就象下面的代码:
...
private
...
FWeight:double;
function GetWeight:double;
...
publish
property FWeight read GetWeight;
嘿嘿~
小弟献丑了!
protected
procedure GetWeight;
published
property OnGetWeight: TGetWeight read FOnGetWeight write FOnGetWeight;
end;procedure TXXXX.GetWeight;
begin
...
...
if 获取到数据 then
begin
if OnGetWeight <> nil then OnGetWeight(Self, 获取到的重量);
end;
end;
==要用一个事件通知别的程序调用GetWeight方法==这个想法说的很模糊,比如说事件触发的条件。
所以,下面的源代码是我能够提供的。
TWeight = class
private
FWeight : double;
function GetWeight : double;
public
property Weight : double read GetWeight;
end;
...
function TWeight.GetWeight : double;
begin
Result := FWeight;
end;
我想问问,你这个类仅仅就是为了实现读取数据的作用吗?如果是这样的话,我觉得真没必要封装成一个类,如果没有数据成员的话,这样的类建立起来似乎比较别扭。
TWeight = class
public
function GetWeight : Double;
end; {TWeight}function TWeight.GetWeight : Double;
begin
...
end;
这个类就是为了实现读取数据的作用,在这个类中用MSComm控件通过串口从工业秤中读重量数据,领导要求我把它做成一个TWeight类,并提供一个GetWeight方法,别的程序调用GetWeight方法能得到重量,要用一个事件通知别的程序调用GetWeight方法,1.数据成员应该是有的把,没有的话怎么储存重量数据呢??
2.不知道我能不能在MSComm控件的OnComm事件中通知别的程序调用GetWeight方法??
这样写:
Type
TTWeight = Class
private
fMscomm: TMSComm;
..........
public
constructor Create(aMSComm: TMSComm);
destructor Destroy;override;
function GetWeight(var Weight:Double):Boolean;
........
end;
.......constructor TTWeight.Create(aMSComm: TMSComm);
begin
fMscomm := aMSComm;
......
end;......function GetWeight(var Weight:Double):Boolean; //返回值是为了辨别通信是否成功
begin
Result := False;
try
fMscomm.PortOpen := True;
.....
except
....
end;
fMscomm.OutPut := ........;
Sleep(200);
//将接收到的数据进行分析
........
Weight := .....;
Result := ...;
end;
我对MSComm的初始化与OnComm事件也应该放在这个类把,好象应该在OnComm事件中将接收到的数据进行分析完后,在OnComm事件中调用 GetWeight 方法,但我这个类没有窗体,怎么调试呢??F7、F8、F9都不能运行,学习
在这里就可以不使用OnComm事件了 思路无非两种,中断方式与查询方式.OnComm是中断方式,但容易出现错误.所以你可以根据你的波特率和长度计算一下从发出指令到接收多长时间算超时.然后Mscomm.Input.就可以得到需要的东西了
**声明属性和是否需要在 Object Inspector中编辑属性没有必然的联系,如果你需要编辑属性那么应该将它放在published下面。
==我对MSComm的初始化与OnComm事件也应该放在这个类把,好象应该在OnComm事件中将接收到的数据进行分析完后,在OnComm事件中调用 GetWeight 方法==
**我想如果你这样做的话,和suuare(督察) 的想法就是不一样的。suuare(督察) 的代码中constructor Create(aMSComm: TMSComm);实际上是将一个TMSComm和你的TWeight形成聚集的关系,不管你的TWeight是否存在这个TMSComm都可以独立存在,而你的想法是形成一种组合的关系。我赞同你的做法。至于在OnComm事件中调用GetWeight方法和事件通知的具体做法,我不是很清楚了。