Как управлять стрелочками при вводе числа Crt Pascal - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Как написать кнопочки, которыми нужно управлять с клавы ( как на скрине)? Подскажите, пожалуйста.

Решение задачи: «Как управлять стрелочками при вводе числа Crt Pascal»

textual
Листинг программы
program test;
 
uses
  crt;
 
const
  scKeyArrUp = $4800;
  scKeyArrLeft = $4B00;
  scKeyArrRight = $4D00;
  scKeyArrDown = $5000;
  scKeyEnter = $000D;
  scKeyEsc = $001B;
type
  {тип для быстрого обращения к компонентам целого типа Word}
  TWordConvert = record
    case word of
      0: (w: word);
      1: (int: integer);
      2: (Lo, Hi: byte);
      3: (c0, c1: char);
  end;
 
  function ReadChar: word;
  var
    Res: word;
  begin
    Res := 0;
    TWordConvert(Res).c0 := ReadKey;
    if TWordConvert(Res).c0 = #0 then
      TWordConvert(Res).c1 := ReadKey;
    ReadChar := Res;
  end;
 
  procedure ClearKey;
  begin
    while KeyPressed do
      ReadKey;
  end;
 
  function GetWord(Message: string; var Num: word; Min, Max: word): boolean;
  var
    Scan: word;
    x0, y0: byte;
    OldNum: word;
    Res:  boolean;
  begin
{$I-}
    OldNum := Num;
    if (Num < Min) or (Num > Max) then
      Num := (Min + Max) shr 1;
    Write(Message);
    Write(' < ');
    x0 := WhereX;
    y0 := WhereY;
    ClearKey;
    Res := True;
    repeat
      TextAttr := TextAttr or Blink;
      Write(Num);
      TextAttr := TextAttr xor Blink;
      Write(' >');
      ClrEoL;
      GotoXY(x0, y0);
      Scan := ReadChar;
      case Scan of
        scKeyArrUp, scKeyArrRight: if Num < Max then
            Inc(Num);
        scKeyArrDown, scKeyArrLeft: if Num > Min then
            Dec(Num);
        scKeyEsc:
        begin
          Num := OldNum;
          Res := False;
          Break;
        end;
          {      scKeyEnter                : Break;}
        else
          Continue;
      end;
    until Scan = scKeyEnter;
    Write(Num);
    GetWord := Res;
{$I+}
  end;
 
var
  X: word;
begin
  X := 85;
  writeln;
  GetWord('Enter the X: ', X, 70, 200);
  writeln;
  writeln('x=', x);
end.

Объяснение кода листинга программы

  1. Объявлены константы, представляющие клавиши стрелок и клавишу Enter.
  2. Объявлен тип TWordConvert для быстрого обращения к компонентам целого типа Word.
  3. Функция ReadChar считывает введенный символ и возвращает его в виде слова.
  4. Процедура ClearKey считывает все введенные символы до тех пор, пока не будет нажата клавиша Enter.
  5. Функция GetWord выводит сообщение, в которое нужно ввести число, и обрабатывает ввод числа с клавиатуры.
  6. Если число меньше минимального или больше максимального допустимого значения, то оно заменяется на среднее значение между минимальным и максимальным.
  7. Число выводится на экран, а затем считывается введенное значение.
  8. Если введена клавиша стрелки вверх или вправо, то число увеличивается на единицу.
  9. Если введена клавиша стрелки вниз или влево, то число уменьшается на единицу.
  10. Если введена клавиша Esc, то текущее значение числа устанавливается на значение по умолчанию, и функция возвращает False.
  11. Если введена клавиша Enter, то функция возвращает True.
  12. Значение числа выводится на экран.
  13. В основной программе объявлена переменная X со значением 85.
  14. Вызывается функция GetWord для ввода значения переменной X.
  15. Выводится значение переменной X.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы