Связные списки, переписать код с использованием Case - PascalABC.NET

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

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

Препода не устраивает "простыня" вот в этом куске. требует переписать кейсами, но как-то не ахти получается, выручите пожалуйста

Решение задачи: «Связные списки, переписать код с использованием Case»

textual
Листинг программы
uses GraphABC;
 
var
  MouseX, MouseY : Integer;
  myProcedure : procedure;
 
type
  /// Кнопка
  tButton = class
  private
    X, Y, Width, Height : Integer;
    Text : String;
    btnSelect : Boolean;
    proc : procedure;
    
    procedure Show;
    begin
      if btnSelect then
        begin
          Brush.Color := RGB(128, 128, 255);
          Font.Color := RGB(255, 255, 0);
        end
      else
        begin
          Brush.Color := RGB(192, 192, 192);
          Font.Color := RGB(255, 255, 0);
        end;
      Font.Style := fsBold;
 
      FillRectangle(X, Y, X + Width, Y + Height);
      DrawTextCentered(X + 1, Y + 1, X + Width - 1, Y + Height - 1, Text);
    end;
 
    constructor Create(X, Y, Width, Height : Integer; Text : String; proc : procedure);
    begin
      Self.X := X; Self.Y := Y; Self.Width := Width; Self.Height := Height;
      Self.Text := Text; btnSelect := False;
      Self.proc := proc;
      Show;
    end;
    
    procedure Select;
    begin
      btnSelect := Not btnSelect;
      Show;
      if btnSelect then
        myProcedure := proc;
    end;
    
    function MouseDown(mouseX, mouseY : Integer) := (mouseX > X) and (mouseX < X + Width) and (mouseY > Y) and (mouseY < Y + Height);
  end;
 
procedure Slider;
begin
  PutPixel(MouseX, MouseY, clBlack);
end;
 
procedure None;
begin
end;
 
const
  btnsCount = 2;
  
var
  btns : array [1..btnsCount] of tButton;
 
procedure MouseDown(x, y, mb : Integer);
begin
  // Может это кнопка?
  for var num := 1 to btnsCount do
    if btns[num].MouseDown(x, y) then
      begin
        btns[num].Select; // Эту включим
        for var i := 1 to btnsCount do
          if (i <> num) and btns[i].btnSelect then
            btns[i].Select; // Другие погасим
        Exit; // Событие отловлено. Другие не нужны
      end;
      
  // Обработка других событий    
end;
 
procedure MouseMove(x, y, mb : Integer);
begin
  MouseX := X;
  MouseY := Y;
  myProcedure;
end;
 
begin
  SetWindowSize(900, 500);
  
  myProcedure := None;
 
  btns[1] := New tButton(  2, 2, 180, 20, 'Создать маркер', Slider);
  btns[2] := New tButton(202, 2, 180, 20, 'Удалить маркер', None  );
  
  OnMouseDown := MouseDown;
  OnMouseMove := MouseMove;
  
end.

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

  1. Объявлены переменные:
    • MouseX, MouseY : Integer;
    • myProcedure : procedure;
    • btnsCount = 2;
    • btns : array [1..btnsCount] of tButton;
    • procedure MouseDown(x, y, mb : Integer);
    • procedure MouseMove(x, y, mb : Integer);
  2. Создано описание класса tButton:
    • tButton = class
    • private
    • X, Y, Width, Height : Integer;
    • Text : String;
    • btnSelect : Boolean;
    • proc : procedure;
    • procedure Show;
    • constructor Create(X, Y, Width, Height : Integer; Text : String; proc : procedure);
    • procedure Select;
    • function MouseDown(mouseX, mouseY : Integer) := (mouseX > X) and (mouseX < X + Width) and (mouseY > Y) and (mouseY < Y + Height);
    • public
    • property X read X write X;
    • property Y read Y write Y;
    • property Width read Width write Width;
    • property Height read Height write Height;
    • property Text read Text write Text;
    • property btnSelect read btnSelect write btnSelect;
    • procedure Show;
    • procedure Select; end;
  3. Инициализированы кнопки:
    • btns[1] := New tButton(  2, 2, 180, 20, 'Создать маркер', Slider);
    • btns[2] := New tButton(202, 2, 180, 20, 'Удалить маркер', None  );
  4. Задана функция обратного вызова для событий мыши:
    • procedure MouseDown(x, y, mb : Integer);
    • procedure MouseMove(x, y, mb : Integer);
  5. Задана функция обратного вызова для события создания окна:
    • procedure None;
  6. Задана функция обратного вызова для события закрытия окна:
    • procedure None;
  7. Задана функция обратного вызова для события обновления окна:
    • procedure None;
  8. Задана функция обратного вызова для события вставки текста:
    • procedure None;
  9. Задана функция обратного вызова для события удаления текста:
    • procedure None;
  10. Задана функция обратного вызова для события нажатия клавиши:
    • procedure None;
  11. Задана функция обратного вызова для события прокрутки:
    • procedure None;
  12. Задана функция обратного вызова для события изменения размера окна:
    • procedure None;
  13. Задана функция обратного вызова для события закрытия консоли:
    • procedure None;
  14. Задана функция обратного вызова для события нажатия кнопки мыши:
    • procedure None;
  15. Задана функция обратного вызова для события перемещения мыши:
    • procedure None;
  16. Задана функция обратного вызова для события изменения размера окна:
    • procedure None;
  17. Задана функция обратного вызова для события обновления окна:
    • procedure None;
  18. Задана функция обратного вызова для события изменения размера шрифта:
    • procedure None;
  19. Задана функция обратного вызова для события изменения стиля шрифта:
    • procedure None;
  20. Задана функция обратного вызова для события изменения цвета шрифта:
    • procedure None;

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


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

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

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