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

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

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

Доброго времени суток! Мне нужна помощь.Не могу найти ошибку в своей программе. Первоначально это мини версия "пеинта" в общем водишь мышкой-рисуешь.Вот код:
Листинг программы
  1. Program Paint;
  2. Uses GraphABC;
  3. Procedure Net(X,Y,Kol,Sz:Integer);
  4. Var
  5. I:Integer;
  6. Begin
  7. For I:=0 To Kol Do
  8. Begin
  9. Line(X,Y+I*Sz,X+Kol*Sz,Y+I*Sz);
  10. Line(X+I*Sz,Y,X+I*Sz,Y+Kol*Sz);
  11. End;
  12. End;
  13. Const
  14. Size=20;
  15. Var
  16. WW,WH,Kol,XS,YS:Integer;
  17. Procedure MouseDown(X,Y,MB:Integer);
  18. Begin
  19. 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
  20. If MB=1 Then
  21. Floodfill(X,Y,clRandom)
  22. Else
  23. Floodfill(X,Y,clWhite);
  24. End;
  25. Procedure MouseMove(X,Y,MB:Integer);
  26. Begin
  27. 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
  28. If MB=1 Then
  29. Floodfill(X,Y,clRandom)
  30. Else
  31. If MB=2 Then
  32. Floodfill(X,Y,clWhite);
  33. End;
  34. Begin
  35. WW:=ScreenWidth;
  36. WH:=ScreenHeight;
  37. SetWindowSize(WW,WH);
  38. CenterWindow;
  39. Kol:=WH div Size;
  40. XS:=(WW-Kol*Size)div 2;
  41. YS:=(WH-Kol*Size)div 2;
  42. Net(XS,YS,Kol,Size);
  43. OnMouseDown:=MouseDown;
  44. OnMouseMove:=MouseMove;
  45. End.
Я решил добавить в неё возможность менять цвет "пера".Либо на красный либо на жёлтый.Всё зависит от нажатой клавиши R,r,К,к ставят красный цвет,а Y,y,ж,Ж ставят жёлтый,но я в этой теме не особо силён.В общем вот,что у меня получилось:
Листинг программы
  1. Program Paint;
  2. Uses GraphABC;
  3. Procedure Net(X,Y,Kol,Sz:Integer);
  4. Var
  5. I:Integer;
  6. Begin
  7. For I:=0 To Kol Do
  8. Begin
  9. Line(X,Y+I*Sz,X+Kol*Sz,Y+I*Sz);
  10. Line(X+I*Sz,Y,X+I*Sz,Y+Kol*Sz);
  11. End;
  12. End;
  13. Const
  14. Size=20;
  15. Var
  16. WW,WH,Kol,XS,YS:Integer;
  17. Col:Char;
  18. Procedure MouseDown(X,Y,MB:Integer);
  19. Begin
  20. 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
  21. If MB=1 Then
  22. Case Col Of
  23. 'R':Floodfill(X,Y,clRed);
  24. 'r':Floodfill(X,Y,clRed);
  25. 'К':Floodfill(X,Y,clRed);
  26. 'k':Floodfill(X,Y,clRed);
  27. 'Y':Floodfill(X,Y,clYellow);
  28. 'y':Floodfill(X,Y,clYellow);
  29. 'Ж':Floodfill(X,Y,clYellow);
  30. 'ж':Floodfill(X,Y,clYellow);
  31. End
  32. Else
  33. Floodfill(X,Y,clWhite);
  34. End;
  35. Procedure MouseMove(X,Y,MB:Integer);
  36. Begin
  37. 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
  38. If MB=1 Then
  39. Case Col Of
  40. 'R':Floodfill(X,Y,clRed);
  41. 'r':Floodfill(X,Y,clRed);
  42. 'К':Floodfill(X,Y,clRed);
  43. 'k':Floodfill(X,Y,clRed);
  44. 'Y':Floodfill(X,Y,clYellow);
  45. 'y':Floodfill(X,Y,clYellow);
  46. 'Ж':Floodfill(X,Y,clYellow);
  47. 'ж':Floodfill(X,Y,clYellow);
  48. End
  49. Else
  50. If MB=2 Then
  51. Floodfill(X,Y,clWhite);
  52. End;
  53. Begin
  54. WW:=ScreenWidth;
  55. WH:=ScreenHeight;
  56. SetWindowSize(WW,WH);
  57. CenterWindow;
  58. Kol:=WH div Size;
  59. XS:=(WW-Kol*Size)div 2;
  60. YS:=(WH-Kol*Size)div 2;
  61. Net(XS,YS,Kol,Size);
  62. OnMouseDown:=MouseDown;
  63. OnMouseMove:=MouseMove;
  64. End.
Тут программа и вовсе перестала работать не говоря уже про смену цветов.Умоляю.Подскажите,что не так.

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

textual
Листинг программы
  1. Program Paint;
  2. Uses GraphABC;
  3. Procedure Net(X,Y,Kol,Sz:Integer);
  4. Var
  5. I:Integer;
  6. Begin
  7.   For I:=0 To Kol Do
  8.   Begin
  9.     Line(X,Y+I*Sz,X+Kol*Sz,Y+I*Sz);
  10.     Line(X+I*Sz,Y,X+I*Sz,Y+Kol*Sz);
  11.   End;
  12. End;
  13. Const
  14.   Size=20;
  15. Var
  16.   WW,WH,Kol,XS,YS:Integer;
  17.   Col:Char:='R';
  18. procedure KeyPress(ch : char);
  19. begin
  20.   if ch in ['R','r','К','k','Y','y','Ж','ж'] then Col := ch;
  21. end;
  22. Procedure MouseDown(X,Y,MB:Integer);
  23. Begin
  24.   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
  25.     If MB=1 Then
  26.       Case Col Of
  27.         'R','r','К','k':Floodfill(X,Y,clRed);
  28.         'Y','y','Ж','ж':Floodfill(X,Y,clYellow);
  29.       End
  30.     Else
  31.       Floodfill(X,Y,clWhite);
  32. End;
  33. Procedure MouseMove(X,Y,MB:Integer);
  34. Begin
  35.   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
  36.     If MB=1 Then
  37.       Case Col Of
  38.         'R','r','К','k':Floodfill(X,Y,clRed);
  39.         'Y','y','Ж','ж':Floodfill(X,Y,clYellow);
  40.       End
  41.     Else
  42.       If MB=2 Then
  43.         Floodfill(X,Y,clWhite);
  44. End;
  45. Begin
  46.   WW:=ScreenWidth;
  47.   WH:=ScreenHeight;
  48.   SetWindowSize(WW,WH);
  49.   CenterWindow;
  50.   Kol:=WH div Size;
  51.   XS:=(WW-Kol*Size)div 2;
  52.   YS:=(WH-Kol*Size)div 2;
  53.   Net(XS,YS,Kol,Size);
  54.   OnMouseDown:=MouseDown;
  55.   OnMouseMove:=MouseMove;
  56.   OnKeyPress:= KeyPress;
  57. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы