Изменить цвет пера в рисовалке - PascalABC.NET

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

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

Доброго времени суток! Мне нужна помощь.Не могу найти ошибку в своей программе. Первоначально это мини версия "пеинта" в общем водишь мышкой-рисуешь.Вот код:
Я решил добавить в неё возможность менять цвет "пера".Либо на красный либо на жёлтый.Всё зависит от нажатой клавиши R,r,К,к ставят красный цвет,а Y,y,ж,Ж ставят жёлтый,но я в этой теме не особо силён.В общем вот,что у меня получилось:
Тут программа и вовсе перестала работать не говоря уже про смену цветов.Умоляю.Подскажите,что не так.

Решение задачи: «Изменить цвет пера в рисовалке»

textual
Листинг программы
Program Paint;
Uses GraphABC;
Procedure Net(X,Y,Kol,Sz:Integer);
Var
I:Integer;
Begin
  For I:=0 To Kol Do
  Begin
    Line(X,Y+I*Sz,X+Kol*Sz,Y+I*Sz);
    Line(X+I*Sz,Y,X+I*Sz,Y+Kol*Sz);
  End;
End;
Const
  Size=20;
Var
  WW,WH,Kol,XS,YS:Integer;
  Col:Char:='R';
procedure KeyPress(ch : char);
begin
  if ch in ['R','r','К','k','Y','y','Ж','ж'] then Col := ch;
end;
Procedure MouseDown(X,Y,MB:Integer);
Begin
  If (X>XS)And(X<XS+Kol*Size)And(Y>YS)And(Y<YS+Kol*Size)And((X-XS)mod Size<>0)And((Y-YS)mod Size<>0) Then
    If MB=1 Then
      Case Col Of
        'R','r','К','k':Floodfill(X,Y,clRed);
        'Y','y','Ж','ж':Floodfill(X,Y,clYellow);
      End
    Else
      Floodfill(X,Y,clWhite);
End;
Procedure MouseMove(X,Y,MB:Integer);
Begin
  If (X>XS)And(X<XS+Kol*Size)And(Y>YS)And(Y<YS+Kol*Size)And((X-XS)mod Size<>0)And((Y-YS)mod Size<>0) Then
    If MB=1 Then
      Case Col Of
        'R','r','К','k':Floodfill(X,Y,clRed);
        'Y','y','Ж','ж':Floodfill(X,Y,clYellow);
      End
    Else
      If MB=2 Then
        Floodfill(X,Y,clWhite);
End;
Begin 
  WW:=ScreenWidth;
  WH:=ScreenHeight;
  SetWindowSize(WW,WH);
  CenterWindow;
  Kol:=WH div Size;
  XS:=(WW-Kol*Size)div 2;
  YS:=(WH-Kol*Size)div 2;
  Net(XS,YS,Kol,Size);
  OnMouseDown:=MouseDown; 
  OnMouseMove:=MouseMove;
  OnKeyPress:= KeyPress;
End.

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

  1. Объявлены константы и переменные:
    • Size = 20;
    • WW, WH, Kol, XS, YS: Integer;
    • Col: Char:='R';
    • Procedure KeyPress(ch : char);
    • Procedure MouseDown(X,Y,MB:Integer);
    • Procedure MouseMove(X,Y,MB:Integer);
    • Begin.
  2. В процедуре Net(X,Y,Kol,Sz:Integer) рисуется сетка:
    • Для каждого элемента массива от 0 до Kol выполняются действия:
      • Рисуются две линии с помощью функции Line(X,Y+ISz,X+KolSz,Y+I*Sz);
      • Рисуются две линии с помощью функции Line(X+ISz,Y,X+ISz,Y+Kol*Sz);
  3. В процедуре MouseDown(X,Y,MB:Integer) проверяется, было ли нажатие мыши в пределах рисунка, и если да, то выполняется заливка цветом в зависимости от нажатой клавиши:
    • Если X и Y в пределах рисунка и X и Y не являются кратными Size, то:
      • Если MB=1, то выполняется заливка красным или желтым цветом в зависимости от нажатой клавиши;
      • Если MB=2, то выполняется заливка белым цветом;
  4. В процедуре MouseMove(X,Y,MB:Integer) проверяется, было ли перемещение мыши в пределах рисунка, и если да, то выполняется заливка цветом в зависимости от нажатой клавиши:
    • Если X и Y в пределах рисунка и X и Y не являются кратными Size, то:
      • Если MB=1, то выполняется заливка красным или желтым цветом в зависимости от нажатой клавиши;
      • Если MB=2, то выполняется заливка белым цветом;

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


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

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

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