timer结合数据显示问题。(100分)

  • 主题发起人 主题发起人 xinphoebe
  • 开始时间 开始时间
X

xinphoebe

Unregistered / Unconfirmed
GUEST, unregistred user!
三个不同的表格轮流显示。
当数据表被显示时,每间隔一秒执行相应table名称的table.next
问题是,怎能做到接上次显示的数据继续显示呢?
比如说,table1第一次显示到第5条数据,当再次轮到table1显示时,从第6条开始。
 
你可以用书签嘛
Tbookmart型,每次要退出显示的时候保存一下,下次显示的时候读出来
 
非常简单,用3个dbgrid显示三个表中的数据,需要显示时把那个dbgrid的visible设为true另两个设为false.
完美的解决方案[:D],而且速度非常快。给分吧。[:)]
 
强烈推荐用bookmart,getbookmart、setbookmart很简单,可以看一下帮助,你肯定会的。
 
to chenxz:
兄弟啊,在一个dbgrid中一秒钟加载一表,要是记录很多的话那是不可能的。强烈建议楼主采用我的解决方案!!!因为本人曾实际使用过这种方法,效果很好。
 
哪位在叫我?
 
freaky7090,您的办法很好。多谢!但是有些问题,想请教您。
我使用1个timer控制表轮流显示,用3个timer控制table.next
哎呀,都是学得不好。出现了2个问题:
1。使用以下代码控制三个表轮流显示,但是只能轮流显示第二和第三个表。不显示第一个。
var
showNO :integer;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(showNO,5000);
if showNO div 5000=0 then //假设每5秒轮流显示一个数据表的数据。
显示第一个表的数据
if showNO div 5000=1 then
显示第二个表的数据
if showNO div 5000=2 then
begin
显示第三个表的数据;
Showno :=-5000;
end;
end;
2。数据逐条向下走的时候。还是不能接着上次的显示。现象是:比如第二表显示到第6条
时,时间到了,换第三个表的时候。他不是从第一条开始,而是从第7条开始。怎么回事呢?
if dbgrid1.Visible=true then
table1.Next;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
if dbgrid2.Visible=true then
table2.Next;
end;
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if dbgrid3.Visible=true then
table3.Next;
end;
真的多谢各位帮助我学习!
 
to xinphoebe:
不要用INC函数,用timer的inteval不就行了吗,看来只好贴出程序了。
//================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
Table2: TTable;
DBGrid2: TDBGrid;
DBGrid3: TDBGrid;
Table3: TTable;
Timer2: TTimer;
Timer3: TTimer;
Timer4: TTimer;//为控制3个dbgrid按时显示的计时器
DataSource2: TDataSource;
DataSource3: TDataSource;
Button1: TButton;//用于使timer4开始工作
procedure Timer4Timer(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
flag:integer=1;
implementation

{$R *.dfm}

procedure TForm1.Timer4Timer(Sender: TObject);
begin
case flag of
1:begin
flag:=2;
dbgrid1.Visible:=true;
timer1.Enabled:=true;
dbgrid2.Visible:=false;
dbgrid3.Visible:=false;
timer2.Enabled:=false;
timer3.Enabled:=false;
end;
2:begin
flag:=3;
dbgrid2.Visible:=true;
timer2.Enabled:=true;
dbgrid1.Visible:=false;
dbgrid3.Visible:=false;
timer1.Enabled:=false;
timer3.Enabled:=false;
end;
3:begin
flag:=1;
dbgrid3.Visible:=true;
timer3.Enabled:=true;
dbgrid1.Visible:=false;
dbgrid2.Visible:=false;
timer1.Enabled:=false;
timer2.Enabled:=false;
end;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if table1.Eof then
table1.First
else
table1.Next
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer4.Enabled:=true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
if table2.Eof then
table2.First
else
table2.Next
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
if table3.Eof then
table3.First
else
table3.Next
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Interval:=1000;//1000为1秒
timer2.Interval:=1000;
timer3.Interval:=1000;
timer4.Interval:=5000;
timer1.Enabled:=false;//让timer停止计时
timer2.Enabled:=false;
timer3.Enabled:=false;
timer4.Enabled:=false;
end;
end.
//================
 
flag是控制哪个dbgrid显示的标记。
哎呀,我的分很低啊,在大富翁排名垫底啊!!
 
to freaky7090
真的,我觉得你的编程思想很好。从您那里我学到了很多东西。
我学会了!
您多教小弟些东西吧,谢了!将来多分给您分数!
问题是:怎么实现自动数据分页显示呢?比如,第一页显示1-10
第二页显示11-20。
我查找过去的论坛记录,可惜,没有学会。帮帮我吧!
 
to xinphoebe:
老兄,在DelphiBBS中我应该是小弟(看看我的注册时间)。
要是问题回答得还可以的话,给分啊,我还等着孝敬其他大侠呢[:)]
顺便说一句,第二个问题我也会[^]
 
当然给分了!
 
to xinphoebe:
老兄,原来你上面那段代码也是别人写的啊[:(]
顺便问一句,专家分怎么拿?
 
嘿嘿,我在学习。
各位兄台,我讲信用的!
 
您说吧。
 
多人接受答案了。
 
后退
顶部