我使用了spinedit1来对应调整Timer1.Interval的触发频率,但是spinedit1却没有text属性,请问应当取那个属性Timer1.Interval:=才能取到spinedit1变动的值,我要求完成的是按下button1,即完成一个过程,代码如此的写,不知是否对;
procedure tform1.button1click(sender:tobject);
begin
过程....
end;
procedure tdatamodule1.ttimer1timer(sender:tobject)
begin
Timer1.Interval:=?
这里应当是调用tform1.button1click(nil);但是不知怎样的写代码
end;
同时以上的写还是不通,因为没有触发tdatamodule1.ttimer1timer的事件发生,如果将tdatamodule1.ttimer1timer事件写入tform1.button1click中又成了死循环,困惑,不知那位高人能指点一二?!!!
procedure tform1.button1click(sender:tobject);
begin
过程....
end;
procedure tdatamodule1.ttimer1timer(sender:tobject)
begin
Timer1.Interval:=?
这里应当是调用tform1.button1click(nil);但是不知怎样的写代码
end;
同时以上的写还是不通,因为没有触发tdatamodule1.ttimer1timer的事件发生,如果将tdatamodule1.ttimer1timer事件写入tform1.button1click中又成了死循环,困惑,不知那位高人能指点一二?!!!
纠正一下spinedit1有text属性
Timer1.Interval := SpinEdit1.Value;
Form1.Button1Click(Form1.Button1);
procedure tform1.button1click(sender:tobject);
begin
tdatamodule1.timer1.enable:=true;
过程....
end;
procedure tdatamodule1.ttimer1timer(sender:tobject)
begin
Timer1.Interval:=spinedit1.values;
end;
这样的话即可以按spinedit1.values设定的时间间隔向外完成button的过程了,对不对,请那位高手确认一下,我不敢放入程序中,怕出错,改起来麻烦
在button按钮OnClick中添加Form1.Button1Click(Form1.Button1);
begin
Timer1.Interval:=spinedit1.values;
end;这段代码有什么意思义吗?Timer1.Enable:=true;以后反复给Timer1.Interval赋同一个值?楼主是不是想这样? procedure tform1.button1click(sender:tobject);
begin
//这里用启动timer1
Timer1.Interval:=spinedit1.value;
TImer1.Enable:=true;
end;
procedure tdatamodule1.ttimer1timer(sender:tobject)
begin
//代码...
end;
SysUtils, Classes, ExtCtrls, DB, ADODB;我有加Windows, Messages两个
而tform下的
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls
不知有那位专家能解答一下,是不是这个原因引起的
整个代码我也附在后面,如下:
unit winmindata;interfaceuses
SysUtils, Classes, ExtCtrls, DB, ADODB,windows,messages;type
Tmindatamodule = class(TDataModule)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
holidaydas: TADOQuery;
timedas: TADOQuery;
anocomm: TADOQuery;
adolog: TADOQuery;
holidays: TDataSource;
times: TDataSource;
commds: TDataSource;
Timer1: TTimer;
adoqyywpset: TADOQuery;
adoqrycustlist: TADOQuery;
adogroup: TADOQuery;
adoreinfo: TADOQuery;
adotgp: TADOQuery;
ADOCommand1: TADOCommand;
adosend_cache: TADOQuery;
send_cache: TDataSource;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
mindatamodule: Tmindatamodule;
hsend:thandle;implementation
uses
wintest,mainpage;
{$R *.dfm}procedure Tmindatamodule.Timer1Timer(Sender: TObject);
var
datasendednum,datasendingnum,datasendennum,errorflag:dword;
pdatatowrite:pchar;
write_os:toverlapped;
begin
datasendennum:=0;
datasendingnum:=0;
datasendednum:=testfrm.Edit1.GetTextLen+testfrm.Memo1.GetTextLen;
if (datasendednum=0) then
raise exception.Create('发送缓冲区为空');
pdatatowrite:=pchar(testfrm.memo1.Text+testfrm.edit1.Text);
fillchar(write_os,sizeof(write_os),'a');
write_os.hEvent:=createevent(nil,true,false,nil);
setcommmask(hsend,ev_txempty);
repeat
if not writefile(hsend,pdatatowrite[datasendingnum],datasendednum,datasendennum,@write_os) then
begin
errorflag:=getlasterror;
if errorflag<>0 then
begin
if errorflag=error_io_pending then
begin
waitforsingleobject(write_os.hEvent,infinite);
getoverlappedresult(hsend,write_os,datasendennum,false);
end
else
begin
raise exception.Create('发送数据失败');
end;
end;
dec(datasendednum,datasendennum);
inc(datasendingnum,datasendennum);
until (datasendednum<=0);
testfrm.statusbar1.Panels[2]:='已发送:'+inttostr(datasendingnum)+'个字节的数据';end;
end.
SysUtils, Classes, ExtCtrls, DB, ADODB,windows,messages;
把windows,messages放到最前面试试,及
uses
Windows, Messages, SysUtils, Classes, ExtCtrls, DB, ADODB;