Изменить цвет пера в рисовалке - 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.
Объяснение кода листинга программы
- Объявлены константы и переменные:
- 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.
- В процедуре 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);
- Для каждого элемента массива от 0 до Kol выполняются действия:
- В процедуре MouseDown(X,Y,MB:Integer) проверяется, было ли нажатие мыши в пределах рисунка, и если да, то выполняется заливка цветом в зависимости от нажатой клавиши:
- Если X и Y в пределах рисунка и X и Y не являются кратными Size, то:
- Если MB=1, то выполняется заливка красным или желтым цветом в зависимости от нажатой клавиши;
- Если MB=2, то выполняется заливка белым цветом;
- Если X и Y в пределах рисунка и X и Y не являются кратными Size, то:
- В процедуре MouseMove(X,Y,MB:Integer) проверяется, было ли перемещение мыши в пределах рисунка, и если да, то выполняется заливка цветом в зависимости от нажатой клавиши:
- Если X и Y в пределах рисунка и X и Y не являются кратными Size, то:
- Если MB=1, то выполняется заливка красным или желтым цветом в зависимости от нажатой клавиши;
- Если MB=2, то выполняется заливка белым цветом;
- Если X и Y в пределах рисунка и X и Y не являются кратными Size, то:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д