Pascal - 在CMD中的2个“按钮”之间移动时“闪烁”

时间:2017-02-21 19:16:47

标签: pascal

今天我一直在尝试从我的学校工作开始,我开始使用一些小图形,特别是菜单,其中有7个标题,你可以使用Key-Up和Key-Down在其中2个之间移动。主要问题是当你快速移动时,你可以看到我称之为“闪烁”,因为它不够快,不能重绘它。这是主要的想法。我怎么能解决这个问题?我想拥有它,因为他们有它。在Free Pascal IDE ..picture down`

procedure nakresliHviezdy(str:string;surX,surY:byte;backgroundCol:byte);

var i,j:byte;
    sirkaRamcek,vyskaRamcek:byte;
    dlzkaSlova:byte;
begin
  TextBackground(backgroundCol);
  sirkaRamcek:=40;
  vyskaRamcek:=3;
  dlzkaSlova:=length(str);
  for i:=1 to sirkaRamcek do begin
    for j:=1 to vyskaRamcek do begin
      gotoxy(i+surX,j+surY);
      if ((i=sirkaRamcek) or (i=1) or (j=1) or (j=vyskaRamcek)) then write(' ');
      if ((j=2) and ((i<(sirkaRamcek-dlzkaSlova) DIV 2 +1)) or (i>(sirkaRamcek-dlzkaSlova) DIV 2  + dlzkaSlova)) then write(' ');
      if ((i=(sirkaRamcek-dlzkaSlova) DIV 2 +1) and (j=2)) then writeln(str) ;
    end;
  end;
end;

procedure menu;
var pocitadlo:integer;
    klavesa:char;
    farba1,farba2,farba3,farba4,farba5,farba6,farba7:byte;
    suradnicaX,suradnicaY:byte;
begin
  pocitadlo:=1;

  cursoroff;
  TextColor(yellow);
  suradnicaX:=40;
  suradnicaY:=1;
  nakresliHviezdy( '1.Vlozit vozidlo do evidencie STK',40,1,4);
  nakresliHviezdy( '2.Najst vozidlo v evidencii STK',40,5,1);
  nakresliHviezdy( '3.Opravit udaje o vozidle',40,9,1);
  nakresliHviezdy( '4.Vymazat vozidlo z evidencie',40,13,1);
  nakresliHviezdy( '5.Zoznam vsetkych vozidiel',40,17,1);
  nakresliHviezdy( '6.Zoznam nesposobilych vozidiel',40,21,1);
  nakresliHviezdy( '7.Koniec programu',40,25,1);
  while True do begin
  klavesa:=ReadKey;
  if klavesa=#72 then dec(pocitadlo);
  if klavesa=#80 then inc (pocitadlo);
  if (pocitadlo=0) then pocitadlo:=1;
  if (pocitadlo=8) then pocitadlo:=7;
  if ((klavesa=#13) and (pocitadlo=7)) then exit;


  case pocitadlo of
       1:begin nakresliHviezdy( '1.Vlozit vozidlo do evidencie STK',40,1,4);nakresliHviezdy( '2.Najst vozidlo v evidencii STK',40,5,1); end;
       2:begin nakresliHviezdy( '1.Vlozit vozidlo do evidencie STK',40,1,1);nakresliHviezdy( '2.Najst vozidlo v evidencii STK',40,5,4);  nakresliHviezdy( '3.Opravit udaje o vozidle',40,9,1); end;
       3:begin nakresliHviezdy( '2.Najst vozidlo v evidencii STK',40,5,1);nakresliHviezdy( '3.Opravit udaje o vozidle',40,9,4);nakresliHviezdy( '4.Vymazat vozidlo z evidencie',40,13,1); end;
       4:begin  nakresliHviezdy( '3.Opravit udaje o vozidle',40,9,1);nakresliHviezdy( '5.Zoznam vsetkych vozidiel',40,17,1); nakresliHviezdy( '4.Vymazat vozidlo z evidencie',40,13,4);  end;
       5:begin nakresliHviezdy( '4.Vymazat vozidlo z evidencie',40,13,1); nakresliHviezdy( '6.Zoznam nesposobilych vozidiel',40,21,1);nakresliHviezdy( '5.Zoznam vsetkych vozidiel',40,17,4);  end;
       6:begin  nakresliHviezdy( '5.Zoznam vsetkych vozidiel',40,17,1); nakresliHviezdy( '7.Koniec programu',40,25,1); nakresliHviezdy( '6.Zoznam nesposobilych vozidiel',40,21,4); end;
       7:begin nakresliHviezdy( '6.Zoznam nesposobilych vozidiel',40,21,1); nakresliHviezdy( '7.Koniec programu',40,25,4);    end;
  end;
  end;
end;`

Here you can see how my program looks like

Free Pascal IDE 谢谢你的任何建议。

1 个答案:

答案 0 :(得分:0)

textmode IDE使用Free Vision框架,该框架使用视频单元进行视频抽象。视频单元维护虚拟屏幕,仅将更改的部分写入屏幕。 FV和视频装置均配有FPC。

首先查看Lister演示,在FPC演示中展示如何直接使用单位视频。