如何在Virtual Pascal中实时显示时间

时间:2015-02-10 15:13:10

标签: time pascal

我一直在为我的学校制作一个库存计划(在虚拟帕斯卡中),作为其中的一部分,我希望能够显示今天的日期以及当前主要时间程序的菜单。现在,我已经能够显示正确的日期,因为这非常简单。

但是当我使用此代码显示Time时,它只显示编译程序的时间,并且不刷新以显示当前时间。

Procedure getTheTime;

VAR

      Hour, Minute, Second, Sec100   : WORD;

BEGIN

        GetTime( Hour, Minute, Second, Sec100 );
        TEXTCOLOR(lightgreen);
        whereY;
        whereX;
        WRITE;WRITE('                                                                       ');
        WRITE( Hour, ':', Minute, ':', Second, '.', Sec100);
END;

基本上,它显示:19:8:41.75 随着时间的推移,我想要时间刷新。

任何帮助都将不胜感激。

我调用getTheTime过程的过程。

Procedure mainMenu;

BEGIN
    REPEAT
            CLRSCR;
            getTheDate;
            getTheTime;
            TEXTCOLOR(15);
            GOTOXY(18,2);
            WRITELN('Welcome To RAK Academy''s School Shop');
            TEXTCOLOR(11);
            GOTOXY(18,3);
            WRITELN('------------------------------------');
            WRITELN;

            WRITE('A ':25);
            TEXTCOLOR(15);
            WRITELN(': Customers');
            WRITELN;
            TEXTCOLOR(11);

            WRITE('B ':25);
            TEXTCOLOR(15);
            WRITELN(': Products');
            WRITELN;
            TEXTCOLOR(11);

            WRITE('C ':25);
            TEXTCOLOR(15);
            WRITELN(': Orders');
            WRITELN;
            TEXTCOLOR(11);

            WRITE('X ':25);
            TEXTCOLOR(15);
            WRITELN(': Exit');
            WRITELN;
            GOTOXY(0,3);

            WRITE('Enter Choice: ':23);
            MenuChoice:=UPCASE(READKEY);
            sndPlaySound('F:\School\IB 1\HL subjects\Computer Science\Pascal programs\InternalAssessment\sound files\beep.wav', snd_Async or snd_NoDefault );
            TEXTCOLOR(11);;
            WRITELN(MenuChoice);
            TEXTCOLOR(15);
            DELAY(200);


            CASE MenuChoice OF

            'A' : CustomersMenu;
            'B' : ProductsMenu;
            'C' : OrdersMenu;
            'X' : BEGIN
                    sndPlaySound('F:\School\IB 1\HL subjects\Computer Science\Pascal programs\InternalAssessment\sound files\end.wav', snd_Async or snd_NoDefault );
                    WRITELN;
                    WRITELN('Program Is Shutting Down');
                    GOTOXY(25,15);
                    DELAY(750);
                    WRITE('.');
                    DELAY(750);
                    WRITE('.');
                    DELAY(750);
                    WRITE('.');
                    DELAY(750);
                  END

          ELSE
          BEGIN
             WRITELN;
             TEXTCOLOR(12);
             WRITELN('ERROR - Only Enter A-B Or X To Exit. Please Try Again.');
             TEXTCOLOR(11);
             READKEY;
          END;
          END;

    UNTIL menuChoice='X';

END;

2 个答案:

答案 0 :(得分:0)

不是程序编译的时间,而是程序运行的时间。

BEGIN-END之间的代码运行一次,然后更新时间。 如果您想要更新时间,则需要添加一个更新OnTimer事件触发时间的计时器。

答案 1 :(得分:0)

从内存中,了解如何执行此操作:

var updatecounter : integer;
    mustexit      : Boolean;
updatecounter:=10; mustexit:=false;
repeat //eventloop start.
  if keypressed then
      begin
        c:=readkey;
        if c=#0 then 
          c2:=readkey;   // C=#0 is functionkey, read second value
        mustexit:=processkey(c,c2); // process whatever key is pressed
       end
    else
      begin
        sleep(10); // windows/winprocs unit? Don't know VP that well.
                   // pauses 10ms
        dec(updatecounter);
        if updatecounter=0 then // every 10*10ms update time
           begin
             updatetime; // update the time.
             updatecounter:=10;
           end;
      end;
until mustexit;

您可以实现各种过程并使用常量来获得所需的响应。