Изменить цвет пера в рисовалке - PascalABC.NET
Формулировка задачи:
Доброго времени суток!
Мне нужна помощь.Не могу найти ошибку в своей программе.
Первоначально это мини версия "пеинта" в общем водишь мышкой-рисуешь.Вот код:
Я решил добавить в неё возможность менять цвет "пера".Либо на красный либо на жёлтый.Всё зависит от нажатой клавиши R,r,К,к ставят красный цвет,а Y,y,ж,Ж ставят жёлтый,но я в этой теме не особо силён.В общем вот,что у меня получилось:
Тут программа и вовсе перестала работать не говоря уже про смену цветов.Умоляю.Подскажите,что не так.
Листинг программы
- 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;
- 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
- Floodfill(X,Y,clRandom)
- 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
- Floodfill(X,Y,clRandom)
- 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;
- End.
Листинг программы
- 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;
- 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':Floodfill(X,Y,clRed);
- 'r':Floodfill(X,Y,clRed);
- 'К':Floodfill(X,Y,clRed);
- 'k':Floodfill(X,Y,clRed);
- 'Y':Floodfill(X,Y,clYellow);
- 'y':Floodfill(X,Y,clYellow);
- 'Ж':Floodfill(X,Y,clYellow);
- 'ж':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':Floodfill(X,Y,clRed);
- 'r':Floodfill(X,Y,clRed);
- 'К':Floodfill(X,Y,clRed);
- 'k':Floodfill(X,Y,clRed);
- 'Y':Floodfill(X,Y,clYellow);
- 'y':Floodfill(X,Y,clYellow);
- 'Ж':Floodfill(X,Y,clYellow);
- 'ж':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;
- End.
Решение задачи: «Изменить цвет пера в рисовалке»
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, то:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д