2017-02-21 1 views
0

Сегодня я пытаюсь начать с моей школьной работы, я начал с небольшой графики, особенно с меню, где есть 7 названий, и вы можете переместитесь между 2 из них с помощью Key-Up и Key-Down. Основная проблема заключается в том, когда вы двигаетесь быстро, вы можете видеть, что я бы назвал это «мерцающим», потому что он недостаточно быстрый, чтобы перерисовать его. Вот основная идея этого. Как я могу это решить? Я хотел бы иметь его, как есть. в Free Pascal IDE..picture down`Pascal - «мерцание» при перемещении между 2 «кнопками» в CMD

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 Спасибо за любые советы.

ответ

0

В текстовой среде IDE используется инфраструктура Free Vision, которая использует видеоустройство для абстракции видео. Видеоустройство поддерживает виртуальный экран и только записывает измененные части на экран. И FV, и видео-блок поставляются с FPC.

Начните с просмотра демо-версии Lister в демо-версиях FPC, в котором показано, как напрямую использовать видеопотоки.

Смежные вопросы