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

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


textual

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

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.

СДЕЛАЙТЕ РЕПОСТ

7   голосов, оценка 3.857 из 5



Похожие ответы
  1. Даны два непустых двусвязных списка из элементов типа integer. Объединить исходные списки, поместив все элементы первого списка (в том же порядке) после данного элемента А второго списка. На данный момент написал инициализацию списков. Как осуществить вставку одного списка в другой после данного элемента? Инициализация списков

  1. как реализовать программу сложения длинных целых чисел используя двусвязные списки?  

  1. Создать очередь строковых значений, для реализации используя одно- связные списки. Реализовать операции добавления (enqueue) и удаления (dequeue) элемента из очереди. Добавьте в очередь строки «one», «two», «three», «four», «five», «six», «seven» и распечатайте содержимое очере- ди. Удалите 4 элемента из очереди, затем добавьте в очередь строки «eight», «nine» и распечатайте очередь еще раз. * Найдите количество строк, состоящих из 4 символов