回 帖 发 新 帖 刷新版面

主题:请教,在pascal显示时间??

我是想这样做
把执行画面分成两部份
一部执行程序
另一部是执行时间程序(不断更新)
请问有什么例子?

回复列表 (共9个回复)

沙发

uses dos;{important}
{for date}
procedure knowdate;
var
  w1,w2,w3,w4:word;
begin
  getdate(w1,w2,w3,w4);
  writeln('year:',w1);
  writeln('month:',w2);
  writeln('date:',w3);
  writeln('unknown:',w4);
end;
{for exact time}
procedure gettimeone;{add these at the begin of the program}
var
  w1,w2,w3,w4:word;
begin
  gettime(w1,w2,w3,w4);
  writeln('hour:',w1);
  writeln('minute:',w2);
  writeln('second:',w3);
  writeln('percent second:',w4);
end;
procedure gettimetwo;{add these at the end of the program}
var
  w1,w2,w3,w4,w5:word;
begin
  gettime(w1,w2,w3,w4);
  writeln('hour:',w1);
  writeln('minute:',w2);
  writeln('second:',w3);
  writeln('percent second:',w4);
end;
{example}
begin
  knowdate;
  gettimeone;
  {......
  your program
  ......}
  gettimetwo;
  {make your program quicker!}
end.
加进去就行了

板凳

听意思好象就是在屏幕上显示时间。最好用定时器中断完成。
下面是个例子:最顶行显示时间,而你的程序在做另一方面的工作:打印1-1000的数字。

Uses Dos, Crt;
Const
  days : array [0..6] of String[9] =
  ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
Var
  Int1CSave : Pointer;
  i : Integer;
Function IntToStr(n:word):string;
Var
   s : String;
Begin
    s := '';
    Repeat
        s := chr( ord('0')+n mod 10 ) + s;
        n := n div 10;
    Until n = 0;
    IntToStr := s;
End;

{$F+,S-,W-}
Procedure TimerHandler; interrupt;
Var
     s            : String;
     y, m, d, dow : Word;
     hh,mm,ss,hun : Word;
     x1, y1       : word;
Begin
     GetDate(y,m,d,dow);
     s := IntToStr(y) + '-' + IntToStr(m div 10 ) +
          IntToStr(m mod 10 ) + '-'+ IntToStr(d div 10 ) +
          IntToStr(d mod 10 );
     s := s + ' '+ days[dow];
     GetTime(hh,mm,ss,hun);
     s := s+' '+IntToStr(hh div 10)+IntToStr(hh mod 10)+':'+
          IntToStr(mm div 10)+IntToStr(mm mod 10)+':'+
          IntToStr(ss div 10)+IntToStr(ss mod 10);
     x1 := Wherex;
     y1 := Wherey;
     Window(1,1,80,1);
     Gotoxy(30,1);
     TextColor(Red+8);
     Write('Timer ISR Demo');
     Gotoxy(50,1);
     Write(s);
     Window(1,2,80,25);
     Textcolor(7);
     Gotoxy(x1,y1);
End;

{$F-,S+}
Begin
  ClrScr;
  Window(1,2,80,25);
  GetIntVec($1C,Int1CSave);
  SetIntVec($1C,Addr(TimerHandler));

(*** Your Code here. **********)
  For i:=1 to 1000 do
    Begin
       write(i:5);
       delay(10);
    End;
  Writeln;
  Writeln('Programmed by j.t.Chang. Press ENTER...');
  Readln;
(******************************)

  SetIntVec($01C,Int1CSave);
End.

3 楼

喂,没看见时间啊

4 楼

但时间不能自动更新

5 楼

郁闷!
我的程序是时间自动更新,一秒一秒在跳啊!
试试用TP7运行我的程序吧!

6 楼

但不多会用

7 楼

能讲解一下  {$F+,S-,W-}这一类是怎么用的吗?
{$F+,S-,W-}
Procedure TimerHandler; interrupt;
Var
     s            : String;
     y, m, d, dow : Word;
     hh,mm,ss,hun : Word;
     x1, y1       : word;

8 楼

[quote]郁闷!
我的程序是时间自动更新,一秒一秒在跳啊!
试试用TP7运行我的程序吧![/quote]
Error 200:Division by zero.
为什么?

9 楼

装CRT补丁

我来回复

您尚未登录,请登录后再回复。点此登录或注册