请大家帮我看一下是不TIMER1用法有问题,谢谢大家了!(50分)

百事

Unregistered / Unconfirmed
GUEST, unregistred user!
也有可能是程序不稳定,这个问题让我烦死了,有时候不知道怎么的就死了,我断点也
调不出来,请高手们帮我看看吧!我想可能是TIMER有问题,谢谢!!!
procedure TForm1.Button1Click(Sender: TObject);
begin

ADOTable1.First;
image1.Canvas.MoveTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);
if not adotable1.Eof then

Timer1.Enabled:=True;


end;




procedure TForm1.Timer1Timer(Sender: TObject);
var
Inxl,Insj:Integer;
Inlj:string;
begin

Timer1.Enabled:=False;
if not adotable1.Eof then

begin

inxl:=adotable1.fieldbyname('心率').AsInteger;
insj:=adotable1.fieldbyname('持续时间').AsInteger;
if adotable2.Locate('心率',inxl,[locaseinsensitive]) then

begin

inlj:=adotable2.fieldbyname('心率路径').AsString;
end;

mmwaveplayer1.FileName:=inlj;
mmwaveplayer1.Play;
mmwaveplayer1.Looping:=true;
timer1.Interval:=insj*1000;
timer1.Enabled:=true;
adotable1.Next;
image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);
end;

end;


end.
 
试试 把 TForm1.Timer1Timer(Sender: TObject);
中 的timer1.Enabled:=true 放到代码的最后执行看
 
我试了一下,不行。
SORRY啊,还是一会就出错了,这个问题真是烦人,还是很谢谢了!!!
 
可能这一段有问题
adotable1.Next;
image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);

adotable1.Next后没有判断是否为Eof,所以image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);出错
 
timer1.Interval:=insj*1000;
肯定是timer1定的时间与播放时间不一致!!
仔细检查一下播放时间
 
楼上说的不对
 
TO tianjh007:这个不应该是这个错误,因为我可以不描图但同样出错,谢谢你!!!
TO 春意:肯定是timer1定的时间与播放时间不一致!!对不起啊,我不太明白你的意思,
请仔细说明一下,这个播放的声音是我自己定的,我就定的播放时间为
timer1.Interval:=insj*1000;这个时间,怎么会有时间上的冲突呢,谢谢你,请指教!!!
TO 任豆豆:请给点意见,谢谢你!!!
 
你把我和tianjh007说的结合起来处理行吗
我实在看不出还有什么问题
 
adotable1.Next;
if not adotable1.Eof then

begin

image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);
end;

timer1.Interval:=insj*1000;
timer1.Enabled:=true;
我改成这样了,还是不行,还是出错了,你们说会不会是MMWAVEPLAYER播放有问题呢,
但是我这里也没有同时冲突的变量。我就真的不知道是那里有问题了!!!
很谢谢大家,请多多提出意见!
 
你这么写还是没有解决我说的问题
第一行adotable1.Next;如果这时adotable1.eof 那么肯定出错,这句话应该放在后边,如下
if not adotable1.Eof then

begin

image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);
adotable1.Next;
end;

timer1.Interval:=insj*1000;
timer1.Enabled:=true;
 
TO tianjh007:还是不行。
改后死机的时间更早了,有的时候它要运行到一半,大约15分钟后才死,改后只运行10秒
左右,我真的不知道怎么来调试了,已经很谢谢大家了。对了,问题是出在播放和TIMER
上,应该和描图没什么关系,因为我把
image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);
这些屏蔽掉了也出错的,所以和描图应该没什么关系,请大家多发表意见,江湖救急啊!!!
 
你把这几句去掉还会出错吗
mmwaveplayer1.FileName:=inlj;
mmwaveplayer1.Play;
mmwaveplayer1.Looping:=true;

不知道mmwaveplayer1多次打开会不会出问题
 
对的,我试过了,应该是这个地方有问题,但是我也用过其他的,MEDIAPLAYER,还有
MMAUDIOPLAYER,这些也不好用,MMAUDIOPLAYER这个没有LOOPING功能,所以是不能用的,
我发现它出错是因为找不到NEXT,出错时就只放前一个记录的心率,找不到NEXT,而且界面上
也不能用,只能PROGRAM RESET退出来。
请给点意见,谢谢!!!
 
为什么要looping呢,如果有下一条记录你会打开你外一个文件
两者会否有冲突呢
我对mmwaveplayer不怎么了解,不好意思
如果你一定要looping,能否判断是否是最后一条记录再用呢
 
我在这里用LOOPING是这个意思,我没有把它做成WAV文件,只是单独的一个一个的心音,
当我要用的时候才来在程序中做成相当于WAV文件一样来播放,如:80次/分钟的心音要放
9秒中,之后90次/分钟的心音放10秒钟,所以这里LOOPING是用来循环着个9秒,10秒的,
而TIMER是控制这个时间的。
我现在把程序改成:
mmwaveplayer1.FileName:=inlj;
mmwaveplayer1.Play;
mmwaveplayer1.Looping:=true;
image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.LineTo((adotable1.fieldbyname('时间').AsInteger)div(3),261-adotable1.fieldbyname('心率').AsInteger);
timer1.Interval:=insj*100;
timer1.Enabled:=true;
adotable1.Next;
这样就不会在描图的时候取植时候冲突了。
你觉得呢?
我也换了其他的播放的工具同样的出错,我真不知道是什么地方的原因了,真的很谢谢你!
请继续发表意见!!!
 
可能我一直有个问题忘说了,它有时可以顺利的运行完,但是有的时候在中间就死了。
就是不稳定!!!
不稳定的问题应该怎么调试呢?!
请指教!!!
 
可是,你播放完毕之后,并没有把looping设为false
并停止播放啊,那你第二次打开文件进行播放时,它是否会自动停止第一次的播放呢
如果没有,两次播放之间是否会有冲突呢
而且循环播放的时间并不是insj*100就行的啊,会有延时的
 
很谢谢你,我在程序的开头加了一个MMWAVEPLAYER1.STOP,然后用的时候再打开,现在好
像看来不怎么有错,我再多看一会有没有其他的问题,很谢谢了!
一会再告诉你答案吧!
非常感谢!!!
 
我试了不少了,偶尔有点错,不知道是不是连续播放会出错,又有新的错误,但是我只发现
一次,是MMWAVEERROR的错误,DEBUGGER错误,我在漫漫看看,很谢谢你了,在这个问题上你帮
了大忙,真谢谢你!!!
 
多人接受答案了。
 
顶部