Связные списки, переписать код с использованием 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.
Объяснение кода листинга программы
- Объявлены переменные:
- 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);
- Создано описание класса 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;
- Инициализированы кнопки:
- btns[1] := New tButton( 2, 2, 180, 20, 'Создать маркер', Slider);
- btns[2] := New tButton(202, 2, 180, 20, 'Удалить маркер', None );
- Задана функция обратного вызова для событий мыши:
- procedure MouseDown(x, y, mb : Integer);
- procedure MouseMove(x, y, mb : Integer);
- Задана функция обратного вызова для события создания окна:
- procedure None;
- Задана функция обратного вызова для события закрытия окна:
- procedure None;
- Задана функция обратного вызова для события обновления окна:
- procedure None;
- Задана функция обратного вызова для события вставки текста:
- procedure None;
- Задана функция обратного вызова для события удаления текста:
- procedure None;
- Задана функция обратного вызова для события нажатия клавиши:
- procedure None;
- Задана функция обратного вызова для события прокрутки:
- procedure None;
- Задана функция обратного вызова для события изменения размера окна:
- procedure None;
- Задана функция обратного вызова для события закрытия консоли:
- procedure None;
- Задана функция обратного вызова для события нажатия кнопки мыши:
- procedure None;
- Задана функция обратного вызова для события перемещения мыши:
- procedure None;
- Задана функция обратного вызова для события изменения размера окна:
- procedure None;
- Задана функция обратного вызова для события обновления окна:
- procedure None;
- Задана функция обратного вызова для события изменения размера шрифта:
- procedure None;
- Задана функция обратного вызова для события изменения стиля шрифта:
- procedure None;
- Задана функция обратного вызова для события изменения цвета шрифта:
- procedure None;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д